Unity3d:Mesh模拟英雄攻击范围扇形:

128 篇文章 1 订阅
64 篇文章 1 订阅

扇形攻击范围:使用代码生成mesh模拟扇形攻击范围:新建场景,新建一个Cube,此脚本挂在Cube上;

  1. public class DrawMeshSector : MonoBehaviour {
  2.     //mesh代码生成的
  3.     public GameObject go;
  4.     MeshFilter mf;
  5.     MeshRenderer mr;
  6.     Shader shader;
  7.     void Start()
  8.     {
  9.     }
  10.     void Update()
  11.     {
  12.         if (Input.GetKeyDown(KeyCode.S))
  13.         {
  14.             ToDrawSector(transform,transform.localPosition,60,3);
  15.             
  16.         }
  17.     }
  18.     //生成网格    
  19.     public GameObject CreateMesh(List<Vector3> vertices)
  20.     {
  21.         int[] triangles;
  22.         Mesh mesh = new Mesh();
  23.         int triangleAmount = vertices.Count - 2;
  24.         triangles = new int[3 * triangleAmount];
  25.         //根据三角形的个数,来计算绘制三角形的顶点顺序      
  26.         //顺序必须为顺时针或者逆时针      
  27.         for (int i = 0; i < triangleAmount; i++)
  28.         {
  29.             triangles[3 * i] = 0;
  30.             triangles[3 * i + 1] = i + 1;
  31.             triangles[3 * i + 2] = i + 2;
  32.         }
  33.         if (go == null)
  34.         {
  35.             go = new GameObject("Sector");
  36.             go.transform.SetParent(transform, false);
  37.             go.transform.position = new Vector3(0, 0.1f, 0);
  38.             mf = go.AddComponent<MeshFilter>();
  39.             mr = go.AddComponent<MeshRenderer>();
  40.             shader = Shader.Find("Unlit/Color");
  41.         }
  42.         //分配一个新的顶点位置数组        
  43.         mesh.vertices = vertices.ToArray();
  44.         //包含网格中所有三角形的数组       
  45.         mesh.triangles = triangles;
  46.         mf.mesh = mesh;
  47.         mr.material.shader = shader;
  48.         mr.material.color = Color.red;
  49.         return go;
  50.     }
  51.     
  52.     /// <summary>
  53.     /// 画弧度角扇形
  54.     /// </summary>
  55.     /// <param name="t">参考方向</param>
  56.     /// <param name="center">位置</param>
  57.     /// <param name="angle">角度</param>
  58.     /// <param name="radius">半径</param>
  59.     private void ToDrawSector(Transform t,Vector3 center,float angle,float radius)
  60.     {
  61.         int pointAmmount = 100;
  62.         float eachAngle = angle / pointAmmount;
  63.         Vector3 forward = t.forward;
  64.         List<Vector3> vertices = new List<Vector3>();
  65.         vertices.Add(center);
  66.         for (int i = 0; i < pointAmmount; i++)
  67.         {
  68.             Vector3 pos = Quaternion.Euler(0, -angle / 2 + eachAngle * (i - 1), 0) * forward * radius;
  69.             vertices.Add(pos);
  70.         }
  71.         CreateMesh(vertices);
  72.     }
  73.  
  74.   
  75. }
     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值