团结 5 - Physics.OverlapSphere 不工作

Unity 5 - Physics.OverlapSphere not working

我正在开发我的第一个 Unity 游戏,但我遇到了这个脚本的问题。

void FixedUpdate ()
{
    Debug.Log ("dead is " + dead);
    dead = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall);

    if (dead == true) 
    {
        Debug.Log ("Player died!");
        Invoke ("Reset", 1);
    }
}

void Reset()
{
    SceneManager.LoadScene ("Game");
}

我试图在玩家撞墙时使布尔 dead 为真,在玩家面前使用变换。我使用的是 Physics2D.OverLapPoint 并且运行良好,但我必须将玩家的物理效果更改为 3D。我现在正在尝试使用 OverLapSphere,但我收到一条错误消息“无法将类型 UnityEngine.Collider[] 隐式转换为 bool。我应该怎么做才能完成这项工作?我是 Unity 和编码的初学者总的来说,所以这可能是一个简单的修复。也许我只需要尝试其他方法?谢谢。

更好的方法

我认为检测碰撞的更好方法是使用 OnColissionEnter。 https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html

这样你就可以进行简单的检查,例如:

void OnCollisionEnter(Collision col) {
    if (col.gameObject.tag == "Wall"){
      dead = true;
    } 
}

这里有一个简短的教程:https://unity3d.com/learn/tutorials/topics/physics/detecting-collisions-oncollisionenter

使用 OverlapSphere

如果出于某种原因您更喜欢 OverlapSphere,那么您需要知道它并不像您期望的那样 return 是布尔值。相反,它 return 是与球体重叠的所有对撞机。

https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html

我相信你要找的是:

void FixedUpdate ()
{
    Debug.Log ("dead is " + dead);
    Collider[] hitColliders = = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall);

    if (hitColliders.length != 0) {
        Debug.Log ("Player died!");


        Invoke ("Reset", 1);
    }
}

What should I do to make this work?

我个人会使用不同的方法然后重叠。最简单的解决方案之一是使用碰撞器和对象标签。

回答为什么您的代码不起作用。主要是因为变量 "dead" 不是 bool 并且 'UnityEngine.Collider[]' 不能是值 "true".

这是 Unity 预制第一人称控制器的示例,已分配以下脚本。在那之后,所有具有任何碰撞器和标签集 ro "red" 的对象都会对 scrip.In 做出反应,在这种情况下它会写 "I have collided with trigger"+something.

using UnityEngine;

public class collisionTest : MonoBehaviour {
   void OnTriggerEnter(Collider trigg)
   {
        if (trigg.gameObject.tag == "Red")
        {
            Debug.Log("I have collided with trigger" + trigg.gameObject.name);
            //do your stuff
        }
    }
}