Unity 自制工具:Point。方便标记出生点或巡逻点等功能。
来源:互联网 发布:windows 8 10 whql 编辑:程序博客网 时间:2024/06/05 16:51
Unity 自制工具:Point。方便标记出生点或巡逻点等功能。
之前的一篇点的封装:Unity 实现出生点(Spawn Points)的Scriptable封装
工具源码:Point For Unity
如上链接,之前封装过一次点对象,但觉得易用性还不是那么好,在使用cinemachine插件后,发现其相机轨道到waypoint控制很不错,所以就抄袭了一些代码,重新实现点的封装,并添加了一些常用随机区域出生点工具(环状、球状、立方体状等)。
Point(点)
定义:只有位置和旋转角度两个属性的类对象。
[System.Serializable]public class Point{ public Vector3 position; public Vector3 eulerAngles; public Quaternion rotation { get { return Quaternion.Euler(eulerAngles); } set { eulerAngles = value.eulerAngles; } } public Point() { } public Point(Vector3 position, Quaternion rotation) { this.position = position; this.rotation = rotation; } public Point(Vector3 position, Vector3 eulerAngles) { this.position = position; this.eulerAngles = eulerAngles; }}
Points(点列表)
直接点击Gizmos可以选中点列表,控制Appearance来更方便控制点的位置角度。
点击按钮可以直接聚焦到对应的点。选择移动或旋转工具,可以直接在场景中控制点的位置已经旋转角度。
可以控制transform的位置和旋转来改变所有点的位置。除了缩放对所有点没有任何影响。
实例1.在每个点同时作为出生点和巡逻点
public Points points; // 作为出生点。因为定义了索引器,所以直接使用points[i]就代表索引为i对应的点。 private void Start() { Point worldSpacePoint; for (int i = 0; i < points.Count; i++) { chickenList.Add(Instantiate(prefab, transform).GetComponent<ChickenManager>()); //其中GetWorld***()的方法是获取世界坐标下的点,因为该点列表是基于GameObject的Transform的。 worldSpacePoint = points.GetWorldSpacePoint(points[i]); chickenList[i].transform.position = worldSpacePoint.position; chickenList[i].transform.rotation = worldSpacePoint.rotation; } } // 作为巡逻点。如果没有勾选Looped,那么在最后一个点调用GetNextPoint()将是为null。 private void Update() { elapsed -= Time.deltaTime; if (elapsed <= 0) { nextPoint = points.GetNextPoint(); if (nextPoint != null) for (int i = 0; i < chickenList.Count; i++) chickenList[i].SetNextWayPoint(points.GetWorldPosition(nextPoint)); elapsed = changeNextWayPointTime; } }
Annulus Area(环状区域)
可在场景直接拖拽缩放杆,来控制区域大小,控制angle来控制区域的扇形面积。
同样可以控制Transform来控制区域的位置,同样不受缩放影响。
Qrientation Type
Same,获取的点旋转角都相同。
Rule,有规律的。
实际就是一条代码,orientationAngle * Quaternion.LookRotation(offset)
,orientationAngle是点方向角度,offset就是点相对圆心的位置偏移量。2.1. 角度为0,所有点相对圆心向外。
2.2. y为180,所有点相对圆心向内。
2.3. y为90,所有点从上往下看是顺时针方向。Random,随机方向。不受角度输入影响。
实例2.环状区域中(或边缘)随机产生超载鸡们。
private void ResetChicken(ChickenManager c) { // 判断是否打勾inEgde来判断产生位置(已经转换到世界坐标)。 temP = inEgde ? area.GetRandomPointInEdge() : area.GetRandomPointInArea(); c.transform.position = temP.position; c.transform.rotation = temP.rotation; c.autoMoveForward = autoMove; }
Sphere Area(球状区域)
继承于Annulus Area,原理相同,但是不支持角度控制,因为光想想怎么绘制出被裁切的球体就觉得很麻烦。
实例3.球状区域中随机产生超载鸡们。
Cube Area (立方体区域)
这个更简单,只有一个区域范围控制。
同样可以通过transform改变位置旋转,而且支持修改缩放控制大小。
实例4.立方体区域中随机产生超载鸡们。
- Unity 自制工具:Point。方便标记出生点或巡逻点等功能。
- unity 点光源 point Light
- Unity 实现出生点(Spawn Points)的Scriptable封装
- 功能点 Function Point 估算法
- Unity Point light(点光源)的个数问题
- 功能点(Funciton Point FP)估算法(三) 调整因子
- 功能点(Funciton Point FP)估算法(四) 功能点估算法
- 用javadoc工具自制java文档的注意点
- C#画点point
- 画点point
- unity的mono没有点出来功能
- 初探功能点估算以及功能点估算工具
- 锚点标记
- POJ3069标记点
- 添加标记点
- 在地图上 选择出生点
- (39)玩家出生点Actor
- 功能点
- 欢迎使用CSDN-markdown编辑器
- python3 循环
- @Autowired 注释
- 安卓笔记(3)用户名密码输入框
- arraylist与linkedlist区别
- Unity 自制工具:Point。方便标记出生点或巡逻点等功能。
- DOM动态创建标记
- Hadoop2.x环境搭建2
- Map.putall()方法
- JavaOOP面试题
- [启发式合并] [模拟] [BZOJ5040] 未来研究
- GetThreadSelectorEntry 函数,msdn
- PLC-串口通信实例
- 高级C语言教程-编译链接调试