如何制作门和钥匙预制件?

时间:2016-09-21 03:21:42

标签: c# unity3d

如果我有一个以上的预制件,我怎样才能用门和钥匙制作一个预制件,只需打开它被拖入的门而不是其他门。

因此,除了我用作示例的门,我还有与其他对象交互的键。水,岩石,葡萄藤是"门"。

public List<GameObject> rockList = new List<GameObject>();

// Use this for initialization
private void Start()
{
    anim = GetComponent<Animator>();

    isMounted = false;

    water = GameObject.Find("water");
    freezeWaterKey = GameObject.Find("freezeWaterKey");

    moveRockKey = GameObject.Find("moveRockKey");
    rock = GameObject.Find("rock");


    waterBoundary = GameObject.Find("golemBoundary");
    moveRockKey = GameObject.Find("moveRockKey");

    vine = GameObject.Find("Vines");
    vineKey = GameObject.Find("key_vine");
}

private void OnTriggerStay(Collider other)
{
    if (Input.GetKeyDown(KeyCode.E) && (other.tag == "Golem") && (isMounted == false))
    {
        isMounted = true;

        //Change the Name of instantiated Clone
        GameObject mountedGolemClone =
            Instantiate(mountedGolem, golem.transform.position, golem.transform.rotation) as GameObject;
        mountedGolemClone.name = "mountedGolem";

        Destroy(mage);
        Destroy(golem);
    }

    if (Input.GetKeyDown(KeyCode.C) && !freezeWaterKey && (other.tag == "waterTrigger"))
    {
        Renderer rend = water.GetComponent<Renderer>();
        rend.material = frozenWaterMaterial;
        Destroy(waterBoundary);
    }

    if (Input.GetKeyDown(KeyCode.C) && !moveRockKey && (other.tag == "rockTrigger"))
    {
        rb.AddForce(transform.right*-1*rockThrust);
        Debug.Log("force");
    }

    if (Input.GetKeyDown(KeyCode.C) && !vineKey && (other.tag == "vineTrigger"))
    {
        Destroy(vine);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在两个对象上放置不同的脚本,即A&#34; Key&#34;钥匙上的脚本和&#34;门&#34;门上的脚本。

现在,在这两个脚本中都会提供一个公共变量,例如&#34; keyNo&#34;和&#34; doorNo&#34;。

在屏幕中拖动预制件后,您可以将这些变量的值设置为对于一对门和一把钥匙相同。

然后,在您的脚本中,检查keyNo是否等于doorNo。如果是,请解锁。