2016-09-21 9 views
0

我該如何去做一個預製的門和鑰匙,而鑰匙只能打開它被拖入的門,而不是其他的門,如果我有一個以上的預製件。如何使門和關鍵預製統一?

所以,而不是我用作爲一個例子,我有鑰匙與其他物體相互作用前門。水,岩石,葡萄藤是「門」。

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); 
    } 
} 
+0

而不是隻是要求回答,你爲什麼不先給它一個去。我建議看一下標籤以幫助您入門。 –

+0

我現在正在研究它,因爲每個門和鑰匙預製件都有相同的標籤,然後一個鑰匙可以打開帶有預製件多個實例的任何門。 – Spooge19

+0

我只希望能夠拖放一個包含門和鑰匙的預製件,並且只能使用該門而不是相同預製件的其他實例。 – Spooge19

回答

0

您可以在這兩個對象上放置不同的腳本,即按鍵上的「Key」腳本和門上的「Door」腳本。

現在,在這兩個腳本中給出一個公共變量,如「keyNo」和「doorNo」。

將屏幕中的預製件拖動後,可以將這些變量的值設置爲一對門和一個鍵的值。

然後,在您的腳本中,檢查keyNo是否等於doorNo。如果是,解鎖。