给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图_behavior designer can see object_透明Loong的博客-程序员宅基地

技术标签: unity  游戏引擎  

原本的辅助图是这样的

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

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

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

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

 

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/D_lxl/article/details/126109705

智能推荐

python水印加画文字方法_pil 字体阴影-程序员宅基地

文章浏览阅读842次。import timeimport osimport asynciotry: from PIL import Image, ImageDraw, ImageFont, ImageEnhanceexcept ImportError: import Image, ImageDraw, ImageFont, ImageEnhancefontpath = "/home/he..._pil 字体阴影

那些总是写“烂代码”的同学,强烈推荐你使用这款IDEA插件!-程序员宅基地

文章浏览阅读29次。点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者:WhyWincnblogs.com/0201zcr/p/6722932.html1、目标idea集成sonar的..._一款 idea 插件帮你优雅转化 方志朋

SSM框架自学(一)——Spring学习总结_ssm框架 spring属于一个轻量级的反转控制框架(ioc),但它也是一个面向表面的容器(a-程序员宅基地

文章浏览阅读1w次,点赞19次,收藏71次。前言:首先学习Java SSM三大框架中的Spring,Spring框架是为了解决企业应用开发的复杂性而创建的,可以降低代码的耦合度,从而提高了程序的可扩展性和维护性。Spring给复杂的J2EE开发带来了春天。它的核心是轻量级的IoC容器,它的目标是为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spr..._ssm框架 spring属于一个轻量级的反转控制框架(ioc),但它也是一个面向表面的容器(a

自己学学编程——Python_chapter4_秋海鱼的博客-程序员宅基地

文章浏览阅读40次。本章内容:程序的组织结构:顺序结构、选择结构if、循环结构while/for-in一、顺序结构:每条程序都要执行二、选择结构:对象的布尔值:在Python中一切皆对象,所有对象都有一个布尔值,使用内置函数bool()获取对象的布尔值。以下对象的布尔值为False:False、数值0、None、空字符串、空列表、空元组、空字典、空集合print(bool(False))print(bool(0))print(bool(0.0))print(bool(None))print(bool('

全球范围内12个典型区域提取(total runoff)_全球12个典型区域-程序员宅基地

文章浏览阅读427次。代码内容包括: 空间插值griddata函数的使用 用mask矩阵提取全球范围的12个典型区域提取 替换xticklabels% 【摘要】读取.grd文件;对不同分辨率数据网格插值;对不重合区域取公共交集区cd 'D:\数据\UNH-GRDC\World Runoff Data\runoff_grd\'%(1)读 .grd 文件的 unh_grdc 月平均值clc; clear; close allflistobs = dir('D:\数据\UNH-GRDC\World Runoff D_全球12个典型区域

如何复现论文中的算法_论文算法复现-程序员宅基地

文章浏览阅读1w次,点赞15次,收藏71次。转载地址:https://blog.csdn.net/qq_35503971/article/details/88935591本文将给出一种从科学论文中复现算法的简单指导,以为个人经历而言,我已经成功从书籍或者科学文献资料中复现了许多复杂算法,本文包括了我从搜索、阅读、编程和调试中所学到的经验。本文提供的指导显然也仅限于与计算机科学相关的领域的文献资料。然而,我更希望你们能够将本文提供的指导和实..._论文算法复现

随便推点

python SqlAlchemy+xlrd 读取excel入库小记-程序员宅基地

文章浏览阅读527次。user.py:from sqlalchemy import create_enginefrom sqlalchemy import Table,MetaDataengine = create_engine('mysql+mysqldb://root:password@localhos..._sqlalchemy读取excel

UML——用例图-程序员宅基地

文章浏览阅读46次。用例图主要用来图示化系统的主事件流程,它主要用来描述客户的需求,即用户希望系统具备的完成一定功能的动作,一般生成于需求分析的时候,通俗理解用例就是软件的功能模块,所以设计系统分析阶段的起点,设计人员根据客户的需求来创建和解释用例图,用来描述软件应具备哪些功能模块以及这些模块之间的协作调用关系,用例图包含了用例和参与者,用例之间来连接以求把系统的整个结构和功能反映给非技术人员(通常是软件的用户)...

bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线-程序员宅基地

文章浏览阅读223次。题目又是最小最大值问题,这显然是满足二分性质的。二分最大值,把权值比它小的边新权值设为0,比它大的设为1。然后再跑一遍最短路,比较到n的距离与k的大小就好了。#include#define N 20000using namespace std;int n,p,k,l,r,mid,mn,x,y,z;int first[N+5],nxt[N+5],to[N+5],v

jdk11没有jre(linux)_ubuntu 安装jdk后,jdk11没有jre linux_xsge88的博客-程序员宅基地

文章浏览阅读746次。jdk11解压后没有jre文件,可用命令生成命令:cd ${jdk11的文件夹下}bin/jlink --module-path jmods --add-modules java.desktop --output jre会在当前目录下生成一个jre目录_ubuntu 安装jdk后,jdk11没有jre linux

CListCtrl基本用法_clistctrl用法-程序员宅基地

文章浏览阅读2.7w次。 CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。最近使用了这个控件,有心得总结如下: (Dialog模式) _clistctrl用法

《信息可视化:交互设计(原书第2版)》——2.17节感知与解释-程序员宅基地

文章浏览阅读404次。2.17 感知与解释在汽车购买一例中我们讨论了可视化活动中的人类行为。感知(perception)与解释(interpretation)是其中最本质的两种行为(图2-17)。视觉感知,即观看数据描述,发生在对描述(无论它是条形图上方的高显图标还是旁边的拖动栏)进行解释之前。根据当前的普遍理解,在信息可视化范围内对这些人类行为进行研究是可能的而且是有用的...

推荐文章

热门文章

相关标签