判断对象是否在视线内


// Cast a sphere with the desired distance. Check each collider hit to see if it is within the field of view. Set objectFound
// to the object that is most directly in front of the agent
/// <summary>
/// Withins the sight.
/// </summary>
/// <returns>The sight.</returns>
/// <param name="transform">玩家</param>
/// <param name="fieldOfViewAngle">可视角度</param>
/// <param name="viewDistance">可视距离</param>
/// <param name="objectLayerMask">对象层</param>
public static Transform WithinSight(Transform transform, float fieldOfViewAngle, float viewDistance, LayerMask objectLayerMask)
{
Transform objectFound = null;
var hitColliders = Physics.OverlapSphere(transform.position, viewDistance, objectLayerMask);//获取可视范围内的对象
if (hitColliders != null) {
float minAngle = Mathf.Infinity;
float angle = 0;
for (int i = 0; i < hitColliders.Length; ++i) {
// The hit agent needs to be within the field of view of the current agent
if ((angle = Vector3.Angle(transform.position, hitColliders[i].transform.position)) < fieldOfViewAngle) {//获取可视角度内的对象
RaycastHit hit;
// The hit agent needs to be within view of the current agent
if (Physics.Linecast(transform.position, hitColliders[i].transform.position, out hit)) {//检测玩家与对象之间是否存在障碍物
if (hit.transform.Equals(hitColliders[i].transform)) {
// This agent is within sight. Set it to the agentInSight GameObject if the angle is less than any of the other agents
if (angle < minAngle) {//获取最小角度对象
minAngle = angle;
objectFound = hitColliders[i].transform;
}
}
}
}
}
}
return objectFound;
}

判断对象是否在视线内

时间: 2024-11-07 11:09:47

判断对象是否在视线内的相关文章

javascript 判断对象的内置类型

判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.在toString方法被调用时,会执行下面的操作步骤:1. 获取this对象的[[Class]]属性的值.2. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串.3. 返回第二步的操作结果Result(2).Object.prototype.toString方法返回的字符串,去掉前面固定的"[

【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; import java.lang.reflect.Field; import java.util.*; /** * @ClassName Test * @Description 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 * @Author sxd

SQL Server判断对象是否存在 (if exists (select * from sysobjects )(转)

1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = '数据库名')    drop database [数据库名]  if exists (select * from sys.databases where name = '数据库名')  drop database [数据库名]2 判断表是否存在Sql代码 if exists (select * from sysobjects where id = objec

js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内

/** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对象 */ function dateParse(dateString){ var SEPARATOR_BAR = "-"; var SEPARATOR_SLASH = "/"; var SEPARATOR_DOT = "."; var dateArr

百度地图API 判断点是否在圆形内

/** * @fileoverview GeoUtils类提供若干几何算法,用来帮助用户判断点与矩形. * 圆形.多边形线.多边形面的关系,并提供计算折线长度和多边形的面积的公式. * 主入口类是<a href="symbols/BMapLib.GeoUtils.html">GeoUtils</a>, * 基于Baidu Map API 1.2. * * @author Baidu Map Api Group * @version 1.2 */ /** * @n

判断对象类型

1.typeof不能区分数组类型和对象,只能区分原始类型与function 2.判断父级对象: isPrototypeOf -- 判断对象本身数据类型,及可能继承自原型的数据类型 let bool = Array.prototype.isPrototypeOf(obj) 3. 判断构造函数: 检查整个原型链 obj.constructor==Array 是数组,也可能继承自数组 let bool = obj instanceof Array 是数组,也可能继承自数组 4. 判断对象的内部clas

Python中 isinstance()用法 判断对象的类型

isinstance(p_object, class_or_type_or_tuple):判断对象的类型 a=123 ret=isinstance(a,int) print(ret) #输出:True li=[2,57,4] ret1=isinstance(li,list) print(ret1) #输出:True  

javascript判断对象是否为空

JavaScript是一种弱类型的脚本语言,在开发中经常会因为语法不严谨而出现一些错误. 下面的方法是判断对象是否为空的方法,包括对 null.undefind.空字符等类型. //判断是否为空 为空返回 false 不为空返回true function isNotEmpty(_value) { return ((_value === undefined || _value === null || _value === "" || _value === "undefined&

判断点是否在多边形内

有一个n边形,顶点为p1,p2,...,pn;给定一个已知点p,判断p在此多边形内还是外. 预备知识: 两线段相交的定义,如果一条线段的两端分别处在另一条线段的两端,则此两线段相交 判断2点在线段的两侧可以用向量的叉乘实现! 基本步骤: 1,过p点垂直向上作一条射线 2,判断此射线与n边形n条边的交点 3,把所有交点相加,如果是奇数则说明在多边形内,否则在多边形外 思路非常的简单,另外说明一下几种特殊的情况: 1,射线与多边形的顶点相交:比如射线过多边形的Pi点,则如果Pi-1和Pi+1在此射线