Unity 实用教程 之 绘制实体2D矩形攻击范围线

2025-10-27 13:18:46

1、打开Unity,新建一个空工程,具体如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

2、在场景中添加  Cube,并把视图改为2D,布局如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

3、在工程中,新建一个脚本,命名为 DrawRectangleSolid2D,并右键脚本 Open  C# Project 打开,具体如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

4、在打开的脚本上编写代码,具体代码和代码说明如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

Unity 实用教程 之 绘制实体2D矩形攻击范围线

5、脚本具体内容如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class DrawRectangleSolid2D : MonoBehaviour {

    public static GameObject go;  

    public static MeshFilter mf;  

    public static MeshRenderer mr;  

    public static Shader shader;  

    // Use this for initialization

    void Start () {

            }

        // Update is called once per frame

    void Update () {

        if(Input.GetKeyDown (KeyCode.A)) {

            ToDrawRectangleSolid2D (transform, 1, 3, 4);

        }

    }

    private static GameObject CreateMesh(List<Vector3> vertices)  

    {  

        int[] triangles;  

        Mesh mesh = new Mesh();  

        int triangleAmount = vertices.Count - 2;  

        triangles = new int[3 * triangleAmount];  

        //根据三角形的个数,来计算绘制三角形的顶点顺序(索引)  

        //顺序必须为顺时针或者逆时针      

        for (int i = 0; i < triangleAmount; i++)  

        {  

            triangles[3 * i] = 0;//固定第一个点    

            triangles[3 * i + 1] = i + 1;  

            triangles[3 * i + 2] = i + 2;  

        }  

        if (go == null)  

        {  

            go = new GameObject("mesh");  

            go.transform.position = new Vector3(0, 0.1f, 0);//让绘制的图形上升一点,防止被地面遮挡  

            mf = go.AddComponent<MeshFilter>();  

            mr = go.AddComponent<MeshRenderer>();  

            shader = Shader.Find("Unlit/Color");  

        }  

        mesh.vertices = vertices.ToArray();  

        mesh.triangles = triangles;  

        mf.mesh = mesh;  

        mr.material.shader = shader;  

        mr.material.color = Color.red;  

        return go;  

    }  

    //绘制实心长方形2D  

    //distance指的是这个长方形与Transform t的中心点的距离  

    public static void ToDrawRectangleSolid2D(Transform t, float distance, float length, float width)  

    {  

        List<Vector3> vertices = new List<Vector3>();  

        if (IsFacingRight(t))  

        {  

            Vector3 forwardMiddle = new Vector3(t.position.x + distance, t.position.y);  

            vertices.Add(forwardMiddle + new Vector3(0, width / 2));  

            vertices.Add(forwardMiddle + new Vector3(length, width / 2));  

            vertices.Add(forwardMiddle + new Vector3(length, -width / 2));  

            vertices.Add(forwardMiddle + new Vector3(0, -width / 2));  

        }  

        else  

        {  

            //看不到颜色但点击mesh可以看到形状  

            Vector3 forwardMiddle = new Vector3(t.position.x - distance, t.position.y);  

            vertices.Add(forwardMiddle + new Vector3(0, width / 2));  

            vertices.Add(forwardMiddle + new Vector3(-length, width / 2));  

            vertices.Add(forwardMiddle + new Vector3(-length, -width / 2));  

            vertices.Add(forwardMiddle + new Vector3(0, -width / 2));  

        }  

        CreateMesh(vertices);  

    } 

    public static bool IsFacingRight(Transform t)  

    {  

        if (t.localEulerAngles.y > 0) return false;  

        else return true;  

    } 

}

6、脚本编译正确,回到Unity界面,把脚本赋给 Cube,具体如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

7、运行场景,然后按下 A 键,实体2D矩形范围攻击线绘制出来,具体如下图

Unity 实用教程 之 绘制实体2D矩形攻击范围线

8、到此,《Unity 实用教程 之 绘制实体2D矩形攻击范围线》讲解结束,谢谢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢