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

  1. Same,获取的点旋转角都相同。

  2. Rule,有规律的。
      实际就是一条代码,orientationAngle * Quaternion.LookRotation(offset) ,orientationAngle是点方向角度,offset就是点相对圆心的位置偏移量。

    2.1. 角度为0,所有点相对圆心向外。

    2.2. y为180,所有点相对圆心向内。

    2.3. y为90,所有点从上往下看是顺时针方向。

  3. 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。方便标记出生点或巡逻点等功能。相关推荐

  1. Unity 制作等比小地图并在小地图上标记出生点(类似于永劫无间、绝地求生、LoL小地图标记信号给队友)

    等比小地图PlayerIcon显示的坐标 核心两行: 1. 角色等比= 角色坐标 / 地形大小 2. 角色在小地图中的位置 = UImap地图大小(UI的大小) * 角色等比 + UI锚点偏移 小地图 ...

  2. 【Unity新闻】Unity新工具Metric Validation帮你自动化测试游戏平衡性

    洪流学堂,让你快人几步. 我们一起看看上周Unity有什么大事情发生吧! Unity性能优化团队最新进展 大约两年前,Unity组建了一支专门的优化团队,专注于将性能本身作为一项功能.团队的任务很简单 ...

  3. chatgpt赋能python:Python编写录屏软件:方便、高效的自制工具

    Python编写录屏软件:方便.高效的自制工具 录屏软件是一种能够将电脑屏幕上的活动记录下来的工具,通常用于制作教学视频.游戏攻略视频等.市面上有很多录屏软件可供选择,但是有时候这些软件不够灵活,无法 ...

  4. 【基于C++面向WindowAPI的自制工具】随机数按位生成器

    [基于C++面向WindowAPI的自制工具]随机数按位生成器 [by_041] 主要想到以前要定时抢淘宝限量货品的时候每次都是记录式的编码,导致代码量极大,工程效率极低. 现尝试使用记录操作信息的方 ...

  5. 【Unity Editor工具制作-文本转UTF-8编码、用WPS表格打开表格、用WPS表格打开】

    Unity Editor工具制作 文本转UTF-8编码 用NotePad打开 用WPS表格打开 文本转UTF-8编码 [MenuItem("Assets/文本转UTF-8编码")] ...

  6. Unity C#工具类 ArrayHelper

    Unity C#工具类 ArrayHelper 功能介绍 C#下传统的数组不支持Linq库,无法方便的进行查询,查找最值,批量获取等操作,利用泛型制作通用的ArrayHelper工具类,使得数组也像L ...

  7. 怎样用Unity Terrain工具制作美观的场景(四)

    怎样用Unity Terrain工具制作美观的场景(四) 1.前言 这篇文章将是这个系列最后的一篇文章了,关于unity terrain工具更详细的内容,如果后面我再用到也会给大家出续集,话不多说直接 ...

  8. 怎样用Unity Terrain工具制作美观的场景(一)

    怎样用Unity Terrain工具制作美观的场景(一) 1.前言(针对Unity Terrain的介绍) 目前地形方面terrain已经成为了unity开发的主流地形,好处是,可以用笔刷直接控制颜色 ...

  9. Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

    Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 目录 Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控 ...

最新文章

  1. linux 安装了tomcat 但是一直访问不了怎么办
  2. lpk.dll病毒的现象和手工处理
  3. 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )
  4. CTFshow 命令执行 web54
  5. 3w最简单led灯电路图_行业内幕揭秘:LED灯没有你想的那么简单!
  6. 产品原型示例_原型设计模式示例
  7. LeetCode 835. 图像重叠
  8. 容器编排技术 -- Kubernetes kubectl label 命令详解
  9. C#中is vs as 1
  10. linux中匿名用户怎么登陆_Linux网络配置 | FTP 实战-匿名用户登录
  11. python视频帧提取并保存_如何用python实现视频关键帧提取并保存为图片?
  12. 如何写出高性能的SQL语句,及如何进行SQL性能分析与调优
  13. 高斯正算matlab,MATLAB实现高斯-克吕格投影正算
  14. ROM 、RAM和FLASH 的区别
  15. matlab绘制二元一次函数图像_基于MATLAB的数学图像绘制
  16. 如何让微软Onedrive同步其他硬盘的文件
  17. 新世界日本语初级上(更新中)
  18. C语言Matrix编程题——[Recursion]D. Liang 8.2 Fibonacci number
  19. MacBook safari一直闪退打不开,提示意外退出也重新启动不了
  20. spine 动态换皮功能

热门文章

  1. Unity3D开发:为地形添加水源和效果
  2. .NET中zip的压缩和解压——SharpCompress
  3. 无忧考吧python编译环境不存在_windows下python一些库编译问题
  4. 斯坦福大学iOS开发公开课总结
  5. 中兴交换机ZXR10-2950 为什么没有ssh这个命令
  6. 就教大家如何进行内存超频设置
  7. 全面分析日语助词(3)
  8. BCD码转二进制的数学原理
  9. 台式计算机清洁除尘内容,解决方案:教您如何清洁计算机主机灰尘,计算机除尘教程...
  10. 系统重装教程-使用PE盘