【发布时间】:2020-06-15 11:50:40
【问题描述】:
我有以下FollowingNPC 游戏对象,如果有直视,它应该跟随Player 对象:
这里是Player 对象:
BlockingLayer 和 Player 层之间启用了物理碰撞:
FollowingNPC 附加了以下脚本,该脚本始终返回“未命中”结果:Raycast 始终为 false。这不是预期的输出,因为两个对象之间似乎有清晰的视图,并且可以毫无问题地绘制调试射线。
public class FollowingNPC : MonoBehaviour
{
private Vector3 heading, direction;
private float distance;
void Update()
{
heading = GameObject.FindGameObjectWithTag("Player").transform.position - transform.position;
distance = heading.magnitude;
direction = heading / distance;
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit))
{
if (hit.transform== GameObject.FindGameObjectWithTag("Player").transform)
{
Debug.DrawRay(transform.position, direction * distance, Color.red);
Debug.Log("Hit Player");
}
else
{
Debug.DrawRay(transform.position, direction * distance, Color.yellow);
Debug.Log("Hit Wall");
}
}
else
{
Debug.DrawRay(transform.position, direction * distance, Color.white);
Debug.Log("Not Hit");
}
}
}
已解决:
正如derHugo 建议的那样,这里应该使用Physics2D.Raycast。这个函数不返回布尔值,所以这是对我有用的实现:
void Update()
{
heading = GameObject.FindGameObjectWithTag("Player").transform.position - transform.position;
RaycastHit2D hit = Physics2D.Raycast(transform.position, heading.normalized, LayerMask.GetMask("Player"));
if (hit.collider != null)
if (hit.transform == GameObject.FindGameObjectWithTag("Player").transform)
Debug.Log("Hit Player");
else
Debug.Log("Hit Wall");
else
Debug.Log("Not Hit");
}
另外,重要的是要注意,即使有面具,Raycast 也会用FolloginNPC 的对撞机返回命中,所以我不得不禁用它。我将不得不进行一些调查或寻找解决方法。
【问题讨论】:
-
您的意思是
Raycast和false?光线追踪用于闪电系统,与您所说的无关;)
标签: unity3d