Unity 自制工具:Point。方便标记出生点或巡逻点等功能。
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的位置和旋转来改变所有点的位置。除了缩放对所有点没有任何影响。
变量名 | 说明 |
---|---|
Appearance | 外观。对点没有实际影响。 |
Keep Gizmos | 在点列表对象没有选择时,仍然保持显示Gizmos。 |
Use Screen Size | 使用屏幕尺寸显示点。打勾后所有点大小都会保持一致,不管镜头在什么位置。 |
Axis Length | 每个点三个虚拟轴的长度。 |
Focus Size | 在下方每个点项按钮点击时,会对焦到对应的点,这个变量是控制对焦后场景大小。 |
Current Index | 当前点索引,用于函数中的变量,对应点列表索引。 |
Looped | 是否循环,在调用GetNextPoint()时,如果当前是最后一个点,会重新跳到第一个点。 |
Points Details | 点列表。前面两条杠拖拽可以控制点的顺序。按钮用于对焦选择点。直接点击这一项即是选中该点(可以在场景中点击)。 |
实例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来控制区域的位置,同样不受缩放影响。
变量名 | 说明 |
---|---|
Orientation Type | 点的方向。如下面的图。 |
Orientation Euler Angle | 点方向角度。仅对类型Same和Rule有效。 |
Appearance | 外观。 |
Angle | 扇形面积的角度。 |
MinRadius | 区域最小半径。 |
MaxRadius | 区域最大半径。 |
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 制作等比小地图并在小地图上标记出生点(类似于永劫无间、绝地求生、LoL小地图标记信号给队友)
等比小地图PlayerIcon显示的坐标 核心两行: 1. 角色等比= 角色坐标 / 地形大小 2. 角色在小地图中的位置 = UImap地图大小(UI的大小) * 角色等比 + UI锚点偏移 小地图 ...
- 【Unity新闻】Unity新工具Metric Validation帮你自动化测试游戏平衡性
洪流学堂,让你快人几步. 我们一起看看上周Unity有什么大事情发生吧! Unity性能优化团队最新进展 大约两年前,Unity组建了一支专门的优化团队,专注于将性能本身作为一项功能.团队的任务很简单 ...
- chatgpt赋能python:Python编写录屏软件:方便、高效的自制工具
Python编写录屏软件:方便.高效的自制工具 录屏软件是一种能够将电脑屏幕上的活动记录下来的工具,通常用于制作教学视频.游戏攻略视频等.市面上有很多录屏软件可供选择,但是有时候这些软件不够灵活,无法 ...
- 【基于C++面向WindowAPI的自制工具】随机数按位生成器
[基于C++面向WindowAPI的自制工具]随机数按位生成器 [by_041] 主要想到以前要定时抢淘宝限量货品的时候每次都是记录式的编码,导致代码量极大,工程效率极低. 现尝试使用记录操作信息的方 ...
- 【Unity Editor工具制作-文本转UTF-8编码、用WPS表格打开表格、用WPS表格打开】
Unity Editor工具制作 文本转UTF-8编码 用NotePad打开 用WPS表格打开 文本转UTF-8编码 [MenuItem("Assets/文本转UTF-8编码")] ...
- Unity C#工具类 ArrayHelper
Unity C#工具类 ArrayHelper 功能介绍 C#下传统的数组不支持Linq库,无法方便的进行查询,查找最值,批量获取等操作,利用泛型制作通用的ArrayHelper工具类,使得数组也像L ...
- 怎样用Unity Terrain工具制作美观的场景(四)
怎样用Unity Terrain工具制作美观的场景(四) 1.前言 这篇文章将是这个系列最后的一篇文章了,关于unity terrain工具更详细的内容,如果后面我再用到也会给大家出续集,话不多说直接 ...
- 怎样用Unity Terrain工具制作美观的场景(一)
怎样用Unity Terrain工具制作美观的场景(一) 1.前言(针对Unity Terrain的介绍) 目前地形方面terrain已经成为了unity开发的主流地形,好处是,可以用笔刷直接控制颜色 ...
- Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)
Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 目录 Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控 ...
最新文章
- linux 安装了tomcat 但是一直访问不了怎么办
- lpk.dll病毒的现象和手工处理
- 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )
- CTFshow 命令执行 web54
- 3w最简单led灯电路图_行业内幕揭秘:LED灯没有你想的那么简单!
- 产品原型示例_原型设计模式示例
- LeetCode 835. 图像重叠
- 容器编排技术 -- Kubernetes kubectl label 命令详解
- C#中is vs as 1
- linux中匿名用户怎么登陆_Linux网络配置 | FTP 实战-匿名用户登录
- python视频帧提取并保存_如何用python实现视频关键帧提取并保存为图片?
- 如何写出高性能的SQL语句,及如何进行SQL性能分析与调优
- 高斯正算matlab,MATLAB实现高斯-克吕格投影正算
- ROM 、RAM和FLASH 的区别
- matlab绘制二元一次函数图像_基于MATLAB的数学图像绘制
- 如何让微软Onedrive同步其他硬盘的文件
- 新世界日本语初级上(更新中)
- C语言Matrix编程题——[Recursion]D. Liang 8.2 Fibonacci number
- MacBook safari一直闪退打不开,提示意外退出也重新启动不了
- spine 动态换皮功能