Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一5-物理。重叠球不工作_C#_Unity5_Overlap_Physics Engine - Fatal编程技术网

C# 统一5-物理。重叠球不工作

C# 统一5-物理。重叠球不工作,c#,unity5,overlap,physics-engine,C#,Unity5,Overlap,Physics Engine,我正在制作我的第一个Unity游戏,这个脚本有问题 void FixedUpdate () { Debug.Log ("dead is " + dead); dead = Physics.OverlapSphere (frontCheck.position, radius, whatIsWall); if (dead == true) { Debug.Log ("Player died!"); Invoke ("Reset",

我正在制作我的第一个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");
}

当玩家撞到墙时,我试图在玩家前面使用变换使bool
dead
为真。我使用的是Physics2D.OverLapPoint,它运行得很好,但我不得不将播放器的物理特性更改为3D。我现在正在尝试使用Overlapphere,但收到一条错误消息“无法隐式转换type
UnityEngine.Collider[]
bool
。我该怎么做才能使这项工作成功呢?我基本上是Unity和编码的初学者,所以这可能是一个简单的解决方案。也许我只需要尝试其他方法?谢谢。

更好的方法

我认为检测碰撞的更好方法是使用OnCollisionCenter。

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

void OnCollisionEnter(Collision col) {
    if (col.gameObject.tag == "Wall"){
      dead = true;
    } 
}
以下是一个简短的教程:

使用重叠球体

如果出于某种原因您更喜欢Overlapphere,那么您需要知道它不会像您期望的那样返回bool,而是返回所有与球体重叠的碰撞器

我相信你要找的是:

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);
    }
}
我该怎么做才能让它工作

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

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

这是Unity Prefact第一人称控制器的示例,该控制器已分配以下脚本。之后,所有具有任何碰撞器和标记集ro“红色”的对象都将对scrip作出反应。在这种情况下,它将写入“我已与触发器碰撞”+某物

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
        }
    }
}

除非对象需要彼此通过,否则OnCollisionCenter不是通常更好吗?尽管屏幕截图做得很好,您已经完成了完整教程的一半;)因为Physics.OverlapSphere可以让您获得碰撞发生的精确点,以及它对爆炸之类的东西更有用的半径。问题是如何请检查玩家是否在任何时候撞到墙。所以我认为对撞机很好。谢谢喜欢屏幕:)