2017-01-20 86 views
0

我剛剛發佈了我的第一個獨立恐怖遊戲,前幾天我正在更新它的過程。在我的遊戲中,目標是繞過激活多個發電機以恢復能量並逃脫。我想讓自己的遊戲更逼真一點,所以,我添加了可用於激活發電機的汽油罐。我需要一些幫助,創建一個腳本,允許玩家拾取氣體罐並使用它們來激活發生器。這是我到目前爲止有:摧毀拾取對象OnMouseDown

public class GasCanisters : MonoBehaviour 

public GameObject Player; 
public GameObject[] GasCanisters; 
public AudioClip PickupSound; 

void Update() 
{ 
AudioSource.PlayClipAtPoint(PickupSound, transform.position); 

    if (Input.GetMouseButtonDown(0)) 
     { 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      RaycastHit hit; 
      if (Physics.Raycast(ray, out hit)) 
      { 
       if (hit.collider.CompareTag("Gas Canister")) 
    GameObject.Destroy(gameObject); 
       } 
} 

正如你或許可以告訴,我是一個非常基本的和糟糕的程序員。但無論如何,我真的很感謝所有的幫助,我可以做到這一點。

+5

有什麼問題嗎?目前我們對你在問什麼問題有一個非常模糊的概念:) - 有什麼不工作? – Charleh

+1

到目前爲止,我唯一能注意到的是'gameObject'(最後一行)未定義。也許你的意思是'Player'(它可能應該以小寫字母開頭,因爲它不是一個Class構造函數,而是一個變量)。 – hlfrmn

+1

@hlfrmn gameObject不是未定義的,當你在一個腳本中輸入gameObject時,它將引用腳本附加到的gameObject,它繼承自MonoBehaviour。 – Eddge

回答

1

好的,這裏有很多事情要做;首先,不要使用更新,它會運行每一幀,無論您的播放器距離容器1米或200英里是否浪費了大量CPU時間。請使用OnMouseOver

void OnMouseOver() 
{ 
    if(Input.GetButtonDown) 
    { 
     transform.SetParent(yourPlayersHand.transform); 
     transform.localPosition = Vector3.Zero; 
     transform.localRotation = Quaterion.Identity; 
    } 
} 

這將「附加」罐到你的球員的手:確保您在您的罐有collider然後用類似添加腳本。你可能想擺弄位置&的方向,讓它看起來是正確的。

其次,你需要一些方法來識別罐,最簡單的方法是添加一個tag

接下來,添加一個類似的腳本來發電,做你想做的,是這樣的:

void OnMouseOver() 
{ 
    if(Input.GetButtonDown) 
    { 
     if(yourPlayersHand.transform.GetChild(0).tag == "canister") 
     { 
      // your code for what happens 
     } 
    } 
}