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我如何检查它?