在Unity中创建一个射弹击球手

时间:2013-04-17 15:21:01

标签: c# unity3d

我开始在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..");
    }

0 个答案:

没有答案
相关问题