前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从六边形开始制作战棋类游戏-01

从六边形开始制作战棋类游戏-01

作者头像
keyle
发布2024-11-01 12:24:17
600
发布2024-11-01 12:24:17
举报
文章被收录于专栏:礼拜八不工作

再开个新坑,业余时间做个SLG游戏Demo。将以前工作与学习的积累做一个有效转化。这个专题就长期记录下项目进展,顺便分享下一些技术点。

言归正传,本章主题 六边形。

先说为什么要用六边形做基础地块,主要是用来规避穿越问题,六边形更平滑,每个基础格的距离都一致(斜线移动也是1),并且不存在危险穿越的问题(斜边穿越),斜边穿越符合程序逻辑,但是不符合视觉逻辑,试想两个Cube组成斜线阻挡,主角从中间径自穿越,这很程序化,但是不符合人类直觉。当然可以将寻路的朝向从八向改为四向,这样修改后,原本到斜边的距离为√2,修改后路径长度变为2,需要走两步抵达斜边目标。

六边形

代码语言:javascript
复制
    void CreateHexagon()
    {
        Vector3[] vertices = new Vector3[7];
        int[] triangles = new int[18];

        float radius = 1f; // 半径为1
        float angleOffset = Mathf.PI / 3f; // 60度的偏移角度

        // 旋转角度
        float rotationAngle = Mathf.PI / 2f;

        // 六个顶点
        for (int i = 0; i < 6; i++)
        {
            float angle = angleOffset * i + rotationAngle;
            // 旋转顶点
            vertices[i] = new Vector3(Mathf.Cos(angle) * radius, 0f, Mathf.Sin(angle) * radius);
        }

        // 中心点
        vertices[6] = Vector3.zero;

        // 三角形顺序
        for (int i = 0; i < 6; i++)
        {
            triangles[i * 3] = 6; // 中心点
            triangles[i * 3 + 1] = i; // 当前顶点
            triangles[i * 3 + 2] = (i + 1) % 6; // 下一个顶点,如果是最后一个顶点则连接第一个顶点
        }

        mesh.vertices = vertices;
        mesh.triangles = triangles;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 礼拜八不工作 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档