2017-01-20 4 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'を意味するかもしれません(これは、おそらくクラスのコンストラクタではなく変数であるため、小文字で始める必要があります)。 – hlfrmn

+1

@hlfrmn gameObjectは未定義ではありません。gameObjectを1つのスクリプトに入力すると、MonoBehaviourから継承されたスクリプトがアタッチされているgameObjectを参照します。 – Eddge

答えて

1

OK、ここにはたくさんのことがあります。最初に、CPU時間を大量に消費するキャニスタから1メートルか200マイルのプレーヤーに関係なく、すべてのフレームを実行するUpdateを使用しないでください。代わりにOnMouseOverを使用してください。あなたのキャニスターにcolliderを持っていることを確認し、その後のようなもので、スクリプトを追加します。

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

これはあなたのプレイヤーの手にキャニスターを「添付」になります。あなたは正しい姿になるように位置&の姿勢を練習したいかもしれません。

第2に、キャニスターを識別する方法が必要です。最も簡単な方法は、tagを追加することです。

次のようなもの、あなたがやりたい発電機と同様のスクリプトを追加:

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