给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图

原本的辅助图是这样的

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

 右键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了。

然后我们调用这个函数,参数还是一样(虽然可以少些一个,但没必要,麻烦)

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

 

 实际操作起来基本无误差。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值