用Unity制作正六边形拼成的地面

目录

效果演示

1.在Unity中创建正六边形

2.创建一个用于管理正六边形的类

3.创建一个用于管理正六边形地面的类

4.创建一个空对象并将游戏控制脚本挂上

5.设置正六边形碰撞所需组件

6.创建正六边形行为触发脚本并挂上

7.创建圆柱体——田伯光

8.创建圆柱体移动脚本

运行


在开始前,先来看效果演示:

        圆柱体代表的角色——田伯光,在正六边形组成的地板上奔跑,地面悬于空中,沿途所接触到的正六边形组成的地砖开始逐渐消失,而他能够站稳脚跟的地方逐渐减少。此时的田伯光想起了梅西:心里慌的一批!可站立的范围越来越小,突然,他脚底踩空,跌了下去。

        演示使用的Unity版本为Tuanjie 1.0.0,团结引擎是Unity中国的引擎研发团队基于Unity 2022 LTS版本为中国开发者定制的引擎,使用功能上没有太多区别,国际版的Unity也可同样操作。

接下来我来试试要让田伯光在正六边形组成的地板上一路奔袭并使其掉落需要几个步骤:

1.在Unity中创建正六边形

        田伯光不明白地砖为什么是正六边形的,但我就是想要正六边形!于是我在Unity中创建了一个名叫HexCreator的脚本,用来创建正六边形地砖。

using UnityEngine;
using UnityEditor;

public class HexCreator : EditorWindow
{
    [MenuItem("Tools/Hexagon/Create a Hexagon")]
    public static void Create()
    {
        Mesh mesh = new Mesh();

        Vector3[] vertices = new Vector3[6];
        int[] triangles = new int[12] { 0, 1, 2, 2, 3, 0, 0, 3, 4, 4, 5, 0 };

        float radius = 1f; //正六边形外接圆的半径
        for (int i = 0; i < 6; i++)
        {//设置正六边形的顶点位置
            float angle = i * Mathf.PI / 3;
            vertices[i] = new Vector3(radius * Mathf.Sin(angle), 0f, radius * Mathf.Cos(angle));
        }

        mesh.vertices = vertices;
        mesh.triangles = triangles;

        string meshAssetPath = "Assets/Hexagon/Prefabs/HexagonMesh.asset";
        AssetDatabase.CreateAsset(mesh, meshAssetPath);
        Mesh saveMesh=AssetDatabase.LoadAssetAtPath<Mesh>(meshAssetPath);

        GameObject go = new GameObject("Hexagon");
        go.AddComponent<MeshFilter>();
        go.GetComponent<MeshFilter>().sharedMesh = saveMesh;

        Material material = new Material(Shader.Find("Standard"));
        material.color = Color.black;
        string matAssetPath = "Assets/Hexagon/Prefabs/HexagonMat.asset";
        AssetDatabase.CreateAsset(material, matAssetPath);
        Material saveMat = (Material)AssetDatabase.LoadAssetAtPath<Material>(matAssetPath);

        MeshRenderer renderer = go.AddComponent<MeshRenderer>();
        renderer.sharedMaterial = saveMat;

        go.AddComponent<MeshCollider>();

        //将设置好的正六边形Prefab保存到路径
        PrefabUtility.SaveAsPrefabAsset(go, "Assets/Hexagon/Prefabs/Hexagon.prefab");

        DestroyImmediate(go);//将创建在Hierarchy窗口的正六边形对象立即销毁,如果不销毁可以将本行去除
    }
}

        要使用这个脚本,需要在Unity中创建名为Editor的文件夹,将其放在该文件夹下。然后,我想让田伯光明白正六边形地砖是怎么创建出来的。为什么要让他明白?因为他是采花大盗,我想折腾他一下。

        HexCreator:

        HexCreator脚本是一个用于创建正六边形游戏对象Prefab的工具类,它定义了一个继承自EditorWindow的类HexCreator。当用户点击菜单栏中的"Tools/Hexagon/Create a Hexagon"选项时,会调用Create静态方法来执行以下步骤:

        1.创建Mesh: 初始化一个新的Mesh对象,这是Unity中用于存储3D几何形状数据的组件。

        2.定义顶点: 创建一个包含6个顶点的Vector3数组,用于表示正六边形的六个角。循环遍历数组,根据正六边形的数学特性计算每个顶点在三维空间中的坐标(绕Z轴旋转正六边形)。

        3.定义三角面片: 创建一个int数组,用于指定这些顶点如何组成两个三角形(一个正六边形由六个三角形组成,此处简化为两个连续的三角形序列)。

        4.构建Mesh: 将顶点和三角形数据赋值给新建的Mesh对象。

        5.保存Mesh资源: 将创建好的Mesh对象作为资产保存到项目的特定路径下,并加载回内存以便后续使用。

        6.创建GameObject: 创建一个新的游戏

  • 47
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神气仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值