检测编辑器内部的碰撞
Detect collision inside editor
我正在创建一个编辑器扩展来轻松创建 2D 和 3D 关卡。我可以使用箭头键移动一个发电机箱,并放置一个分配给数字键的预制件。
问题是我想检查一下,如果预制件已经在那个位置,那么它要么不允许另一个预制件在那里生成,要么删除新的预制件。
如有任何帮助,我们将不胜感激。
我可以在这里考虑两种可能的解决方案。
第一个是使用 Physics.OverlapSphere。我报告文档中的示例:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void ExplosionDamage(Vector3 center, float radius) {
Collider[] hitColliders = Physics.OverlapSphere(center, radius);
int i = 0;
while (i < hitColliders.Length) {
hitColliders[i].SendMessage("AddDamage");
i++;
}
}
}
基本上,使用这种方法,您检查占据给定区域的碰撞器的数量(区域本身由中心和半径决定)。
另一个更 "basic" 的解决方案是 保留一个数据结构(如地图) 包含 spawns 的信息(如已经实例化的预制件的坐标) : 这样,您可以直接从地图上检查是否已在此处实例化了预制件。
希望对您有所帮助!
我正在创建一个编辑器扩展来轻松创建 2D 和 3D 关卡。我可以使用箭头键移动一个发电机箱,并放置一个分配给数字键的预制件。 问题是我想检查一下,如果预制件已经在那个位置,那么它要么不允许另一个预制件在那里生成,要么删除新的预制件。
如有任何帮助,我们将不胜感激。
我可以在这里考虑两种可能的解决方案。 第一个是使用 Physics.OverlapSphere。我报告文档中的示例:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void ExplosionDamage(Vector3 center, float radius) {
Collider[] hitColliders = Physics.OverlapSphere(center, radius);
int i = 0;
while (i < hitColliders.Length) {
hitColliders[i].SendMessage("AddDamage");
i++;
}
}
}
基本上,使用这种方法,您检查占据给定区域的碰撞器的数量(区域本身由中心和半径决定)。
另一个更 "basic" 的解决方案是 保留一个数据结构(如地图) 包含 spawns 的信息(如已经实例化的预制件的坐标) : 这样,您可以直接从地图上检查是否已在此处实例化了预制件。
希望对您有所帮助!