我开始在Unity中尝试使用C#脚本。我是Unity和编程的初学者。
目前我想创建一个检测物理射弹击中它的hitbox,所以我创建了一个hitbox脚本,用于检查与哈希表中存储的一组GameObject的冲突:
void OnTriggerEnter(Collider hitboxCollider){
weaponScript = weapon.GetComponent("FireWeapon") as FireWeapon;
projectiles = weaponScript.getProjectiles();
foreach (GameObject obj in projectiles.Values)
{
if (obj.ToString() != "null" && obj.collider == hitboxCollider)
{
Debug.Log ( "Hit detected! " + testCounter ++);
}
}
}
创建射弹的GameObject脚本如下所示:
void FireW()
{
GameObject proj;
proj = (GameObject) Instantiate(projectile, transform.position, transform.rotation);
projectiles.Add(lastHash++,proj);
proj.rigidbody.AddRelativeForce(Vector3.forward * attackSpeed);
Destroy (proj,3);
}
是否有更好的方法可以找到那些想检查碰撞的物体?
到目前为止这是有效的,但令我头疼的是如何清理哈希表中已经被破坏的GameObjects。
我尝试过这样的事情:
public void startCleanup()
{
foreach (int key in projectiles.Keys)
{
if (projectiles[key].ToString() == "null")
{
projectiles.Remove(key);
}
}
}
然后我收到“不同步”的错误。
我还尝试使用List并使用Coroutine在销毁后删除这些项目,但这不能同时用于多个项目。
编辑: 只是注意到层的使用使这里的事情更容易。
void OnTriggerEnter(Collider hitboxCollider){
cObject = collider.gameObject;
if(cObject.layer == gameObject.layer)
{
Debug.Log("thats a hit..");
}