使用光线投射检测障碍物并阻止玩家移动
Detect obstacle and block players movement with raycast
我是 Unity3D 新手,遇到碰撞检测问题。如果我通过光线投射击中障碍物并阻止朝这个方向移动,我想 return 为真。当我面对面地面对障碍物时,效果很好。当我改变方向并且我在障碍物前面时(但面对另一个方向)然后它 returns false 我仍然可以向所有方向移动(它应该阻止 "up" 移动就像你在第一张图片上看到)。
任何提示将不胜感激!
Returns 当障碍物在我们面前并且我们无法移动时为真 "up"
Returns false 当障碍物在我们的左边或右边时
玩家走错后被封锁
这是我的代码示例:
void Update()
{
Ray myRay = new Ray(transform.position, Vector3.right);
Debug.DrawRay(transform.position, Vector3.right, Color.red);
if (Physics.Raycast(myRay, out hit, 1.5f))
{
if (hit.collider.gameObject.tag == "TerrainObject")
{
Debug.DrawRay(transform.position, Vector3.right, Color.blue);
upHit = true;
}
}
else
upHit = false;
...
}
正如评论中所讨论的,您需要增加光线投射的起始高度。
使用 Ray myRay = new Ray(transform.position+new Vector3(0f,0.15f,0f), Vector3.right);
从地面上方一点点进行光线投射。
我是 Unity3D 新手,遇到碰撞检测问题。如果我通过光线投射击中障碍物并阻止朝这个方向移动,我想 return 为真。当我面对面地面对障碍物时,效果很好。当我改变方向并且我在障碍物前面时(但面对另一个方向)然后它 returns false 我仍然可以向所有方向移动(它应该阻止 "up" 移动就像你在第一张图片上看到)。 任何提示将不胜感激!
Returns 当障碍物在我们面前并且我们无法移动时为真 "up"
Returns false 当障碍物在我们的左边或右边时
玩家走错后被封锁
这是我的代码示例:
void Update()
{
Ray myRay = new Ray(transform.position, Vector3.right);
Debug.DrawRay(transform.position, Vector3.right, Color.red);
if (Physics.Raycast(myRay, out hit, 1.5f))
{
if (hit.collider.gameObject.tag == "TerrainObject")
{
Debug.DrawRay(transform.position, Vector3.right, Color.blue);
upHit = true;
}
}
else
upHit = false;
...
}
正如评论中所讨论的,您需要增加光线投射的起始高度。
使用 Ray myRay = new Ray(transform.position+new Vector3(0f,0.15f,0f), Vector3.right);
从地面上方一点点进行光线投射。