赞
踩
一,配置怪物轨迹位置长短不一,移动表现不理想,就写了个简单的正多边形点位生成工具。
二,代码功能三部分,根据边数和外切圆半径生成点位位置信息,根据定点数生成空物体,改名并赋值对应的点位位置信息,OnDrawGizmos方法里显示。
三,上代码。
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 创建多边形,点位
/// 策划正多边形的点位工具
/// </summary>
public class CreatePolygonPoint : MonoBehaviour
{
[SerializeField]
private List<GameObject> points = new List<GameObject>();
[Header("正多边形顶点数")]
[Range(3,100)]
public int pointCount;
[Header("外切圆半径")]
public float radius = 0.2f;
public bool openDrawGizmos = true;
#if UNITY_EDITOR
[ContextMenu ("CreatPathPoint")]
public void CreatPathPoint()
{
if (points.Count >0)
{
for (int i = 0; i < points.Count; i++)
{
DestroyImmediate(points[i]);
}
points.Clear();
}
GetPath(pointCount, radius);
for (int i = 0; i < pointCount; i++)
{
GameObject item = new GameObject("point_" + i);
item.transform.SetParent(this .transform);
float x, y;
if (fixDic.ContainsKey (i))
{
x = fixDic[i].x;
y = fixDic[i].y;
item.transform.localPosition = new Vector3(x, y, 0f);
}
points.Add(item);
}
}
Dictionary<int, Vector2> fixDic = new Dictionary<int, Vector2>();
public void GetPath(float sides, float radius)
{
fixDic.Clear();
int i = 0;
float x, y, t;
while (i < sides)
{
t = 360 * Mathf.Deg2Rad * i / sides;
x = Mathf.Cos(t) * radius;
y = Mathf.Sin(t) * radius;
if (!fixDic.ContainsKey(i))
{
fixDic.Add(i, new Vector2(x, y));
}
i++;
}
}
public void OnDrawGizmos()
{
if (openDrawGizmos)
{
Gizmos.color = Color.green;
if (points.Count > 0)
{
for (int i = 0; i < points.Count; i++)
{
if (i + 1 == points.Count)
{
Gizmos.DrawLine(points[i].transform .position , points[0].transform.position);
}
else
{
Gizmos.DrawLine(points[i].transform.position, points[i+1].transform.position);
}
}
}
}
}
#endif
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。