Physics.CheckSphere始终为false(Unity3D)

Physics.CheckSphere始终为false(Unity3D),unity3d,game-physics,Unity3d,Game Physics,我正在尝试创建标记我可以访问的单元格的对象。我用红方块标记它们: 我创建对象的代码: using UnityEngine; using System.Collections; using System; public class SpawnCheck : MonoBehaviour { public GameObject checkObject; public bool canSpawnCheck = true; Vector2 boxSize; pu

我正在尝试创建标记我可以访问的单元格的对象。我用红方块标记它们:

我创建对象的代码:

using UnityEngine;
using System.Collections;
using System;

public class SpawnCheck : MonoBehaviour {

    public GameObject checkObject;

    public bool canSpawnCheck = true;
    Vector2 boxSize;

    public GameObject spawnedObject;
    // Use this for initialization
    void Start () {
        Debug.Log("Into spawn check");
    }

    void OnTriggerEnter2D(Collider2D other) {
        Debug.Log("Enter trigger collision");
        canSpawnCheck = false;

        if (other.gameObject.tag == "Target") {
            Debug.Log ("Found Target");
        }

        if (other.gameObject.tag == "Wall") {
            canSpawnCheck = false;
        }

        if (other.gameObject.tag == "Check") {
            canSpawnCheck = false;
        }
    }

    void OnTriggerExit2D(Collider2D other) {
        Debug.Log("Exit trigger collision");
        canSpawnCheck = true;
    }

    // Update is called once per frame
    void Update () {

        Debug.Log ("canSpawnCheck " + canSpawnCheck);

        if (canSpawnCheck == true) {

            Vector3 currentPosition = this.gameObject.transform.position;
            Vector3 spawnPos = new Vector3 (Mathf.Round (currentPosition.x), Mathf.Round (currentPosition.y),0);

            Debug.Log ("Physics.CheckSphere " + Physics.CheckSphere (spawnPos, 5));

            if (!Physics.CheckSphere(spawnPos,5)) {

                spawnedObject = (GameObject)Instantiate (checkObject, spawnPos, Quaternion.identity);

                this.gameObject.GetComponentInParent<AILerp> ().possibleTargets.Add (spawnedObject);
            }
        }

    }
}
使用UnityEngine;
使用系统集合;
使用制度;
公共类检查:单行为{
公共游戏对象检查对象;
公共bool canspawnscheck=true;
向量2盒大小;
公共游戏对象派生对象;
//用于初始化
无效开始(){
Log(“进入生成检查”);
}
无效OnTiggerEnter2D(碰撞的R2D其他){
Log(“输入触发器冲突”);
canspawnscheck=false;
if(other.gameObject.tag==“Target”){
Log(“找到目标”);
}
如果(other.gameObject.tag==“墙”){
canspawnscheck=false;
}
如果(other.gameObject.tag==“检查”){
canspawnscheck=false;
}
}
无效OnTriggerExit2D(碰撞的R2D其他){
Log(“退出触发器冲突”);
canspawnscheck=true;
}
//每帧调用一次更新
无效更新(){
Log(“canspawnscheck”+canspawnscheck);
if(canspawnscheck==true){
Vector3 currentPosition=this.gameObject.transform.position;
Vector3 spawnPos=新的Vector3(Mathf.Round(currentPosition.x),Mathf.Round(currentPosition.y),0);
Log(“Physics.CheckSphere”+Physics.CheckSphere(spawnPos,5));
如果(!Physics.CheckSphere(spawnPos,5)){
spawnedObject=(游戏对象)实例化(checkObject、spawnedPos、Quaternion.identity);
this.gameObject.getComponentParent().possibleTargets.Add(spawnedObject);
}
}
}
}
我的问题:作为
物理。检查球体(spawnPos,5)
始终返回
false
我的代码生成了太多的红色方块,并且它们彼此重叠。我希望只创建一次红色方块,而不在墙上创建(白色方块)。

您的复选(克隆)游戏对象已附加了
Box Collider 2D
。因此,您必须使用的每个物理函数都应该是
Physics2D.something
而不是
physical.something
。注意这里的关键字“2D”

如果您只使用
盒碰撞器
,而不使用2D,那么您可以使用
物理。因此,
Physics.CheckSphere
不能与2D碰撞器一起使用

Check(Clone)是一个
SpriteRenderer
,2D碰撞器是合适的。您只需要使用其中一个重叠函数,例如,或。您喜欢哪一个。

您的复选(克隆)游戏对象已附加了
Box Collider 2D
。因此,您必须使用的每个物理函数都应该是
Physics2D.something
而不是
physical.something
。注意这里的关键字“2D”

如果您只使用
盒碰撞器
,而不使用2D,那么您可以使用
物理。因此,
Physics.CheckSphere
不能与2D碰撞器一起使用


Check(Clone)是一个
SpriteRenderer
,2D碰撞器是合适的。您只需要使用其中一个重叠函数,例如,或。你喜欢哪一种。

我只想指出一件事。在
OnTriggerEnter2D
方法中,应该使用
Equals()
方法而不是
=
进行字符串比较。您是否检查过确实有一个或多个碰撞器与由中心和半径5定义的球体重叠?@greenPadawan我如何检查它?我只想指出一件事。在
OnTriggerEnter2D
方法中,应该使用
Equals()
方法而不是
=
进行字符串比较。您是否检查过确实有一个或多个碰撞器与由中心和半径5定义的球体重叠?@greenPadawan我如何检查它?