当前位置:网站首页>给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图
给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图
2022-08-04 07:06:00 【龙樱无花】
原本的辅助图是这样的

这个辅助图很容易让人先入为主,认为只要是在这个区域就属于判定区域,但实际测试下来,实际的判定区域是一个圆锥,底部有弧度的那种。因为懒(我还没百度过官方有没有其他方法把这个实际判断区域展现出来),所以我把目标瞄准了画图的源码(谢天谢地这玩意我可以改)

右键Edit Script
翻源码最下面找到unity的OnDrawGizmos()方法,可以看到插件作者是自己写的DrawLineOfSight()

根据编译器提示,我们可以找到这个方法源代码在Behavior Designer Movement/Scripts/MovementUtility.cs里,找到它

这是作者源码
public static void DrawLineOfSight(Transform transform, Vector3 positionOffset, float fieldOfViewAngle, float angleOffset, float viewDistance, bool usePhysics2D)
{
#if UNITY_EDITOR
var oldColor = UnityEditor.Handles.color;
var color = Color.yellow;
color.a = 0.1f;
UnityEditor.Handles.color = color;
var halfFOV = fieldOfViewAngle * 0.5f + angleOffset;
var beginDirection = Quaternion.AngleAxis(-halfFOV, (usePhysics2D ? transform.forward : transform.up)) * (usePhysics2D ? transform.up : transform.forward);
UnityEditor.Handles.DrawSolidArc(transform.TransformPoint(positionOffset), (usePhysics2D ? transform.forward : transform.up), beginDirection, fieldOfViewAngle, viewDistance);
UnityEditor.Handles.color = oldColor;
#endif
}我作为新手,肯定不可能完全看懂这些代码啦,但我可以用时间来换啊,本来我只是打算让这个图垂直旋转90度,但我瞎猫撞上死耗子,碰上了另外一个非常棒的结果。
这是我修改后的源码
// 修改变量名,避免牵连其他
public static void DrawLineOfSight_2(Transform transform, Vector3 positionOffset, float fieldOfViewAngle, float angleOffset, float viewDistance, bool usePhysics2D)
{
#if UNITY_EDITOR
var oldColor = UnityEditor.Handles.color;
//修改颜色
var color = Color.red;
color.a = 0.1f;
UnityEditor.Handles.color = color;
var halfFOV = fieldOfViewAngle * 0.5f + angleOffset;
var beginDirection = Quaternion.AngleAxis(-halfFOV, (usePhysics2D ? transform.forward : transform.up)) * (usePhysics2D ? transform.up : transform.forward);
//第二个参数transform.up和transform.forward对调,第四个参数直接改为360度
UnityEditor.Handles.DrawSolidArc(transform.TransformPoint(positionOffset), (usePhysics2D ? transform.up : transform.forward), beginDirection, 360, viewDistance);
UnityEditor.Handles.color = oldColor;
#endif
}注意,最好重新写一个类并且区分颜色,不要占用原有代码,万一把其他函数牵连了就得Remake了。
然后我们调用这个函数,参数还是一样(虽然可以少些一个,但没必要,麻烦)

于是,我们便有了以下图片

实际操作起来基本无误差。
边栏推荐
猜你喜欢
![(19)[系统调用]SSTD hook 阻止关闭](/img/73/e9d591af366db17965d0bf1cf192b7.png)
(19)[系统调用]SSTD hook 阻止关闭

Distributed Computing Experiment 1 Load Balancing

GIS数据与CAD数据间带属性字段互相转换还原工具,解决ArcGIS等软件进行GIS数据转CAD数据无法保留属性字段问题

RT-Thread Studio学习(十一)IIC

拒绝碰运气,导师人品这样了解!

Amazon亚马逊 Vendor Central Label详解

Verilog“七宗罪”

小程序如何使用订阅消息(PHP代码+小程序js代码)

两日总结四

Distributed Computing Experiment 4 Random Signal Analysis System
随机推荐
MMDeploy部署实战系列【第二章】:mmdeploy安装及环境搭建
powershell和cmd对比
adb无法桥接夜神模拟器
Distributed Computing Experiment 4 Random Signal Analysis System
【学习笔记】AGC036
使用腾讯云发送短信 ---- 手把手教你搞定所有步骤
8.2学习记录
Centos通过Docker搭建MySQL的PXC集群
高等代数_证明_两个矩阵乘积为0,则两个矩阵的秩之和小于等于n
LAN技术-3iStack
Use of MotionLayout
C语言实现-华为太空人手表
npm包发布与迭代
likeshop外卖点餐系统【100%开源无加密】
data:image/jpg;base64格式数据转化为图片
[Paper Notes] - Low Illumination Image Enhancement - Supervised - RetinexNet - 2018-BMVC
分布式计算实验4 随机信号分析系统
QT + msvc2017编译器
尚医通【预约挂号系统】总结
SQL存储过程详解