2016-07-09 5 views
0

私の最近のプロジェクトでは、ユーザーが「e」を押しているときにドアを開く必要があります。ボタンを押してアニメーションを開始できない

これは、ボタンのコードです:

using UnityEngine; 

public class Button : MonoBehaviour 
{ 

    public Animator Door; // In the editor, give a reference to your door. It  must have an Animator script for this to work 

    void OnTriggerEnter(Collider c) 
    { 
     if (c.gameObject.tag == "Player") 
     { 
      //Text = "E to interact!" 

      if (Input.GetKeyDown("e")) 
      { 
       print("´Test"); 
       GetComponent<Animator>().SetTrigger("OnPress"); // The button's animator goes to "pressed" state 
       Door.SetTrigger("Open"); // The door's animator goes to "open" state 
      } 
     } 
    } 
} 

アニメーターは、次のようになります。 Animator

開くために、アイドルからの移行: enter image description here

ボタンは、添付のドアを持っていますそれまで: Door with Animator

だから私はここで2つの問題がある、最初のです - 上記のコードで私はEを押しても何も起こりません。No Error、No Action、whatsoever。 私はInput.GetKeyDown("e")を削除し、トリガーにボタンメッシュを作成し、その中で実行した場合には、それは

MissingComponentException言う: 「ボタン」ゲームオブジェクトに添付NO「アニメーター」はありませんが、スクリプトがありますそれにアクセスしようとしています。 はおそらくゲームオブジェクト "ボタン"にアニメーターを追加する必要があります。または、 スクリプトを使用する前にコンポーネントが接続されているかどうかを確認する必要があります。

詳細情報が必要な場合は、私に知らせてください。ありがとう!

+0

移行を選択してここに表示してください。 –

答えて

2

あなたのやり取りに対するアプローチは間違っています。まず、On trigger enterは1回だけ動作します。それがトリガに入るときです。それで、Keypressイベントは受け付けません。常に呼び出されるOnTriggerStay(Collider col)のコードを移動する必要があります。キーイベントがあれば起動します。それはあなたの問題を解決します1.

2番目の問題については、私はかなりあなたが別の場所からこのコードを貼り付けてコピーすると確信しています。キャンバスのUIボタンにのみアニメーターの状態があります。あなたのボタンはノーマルメッシュであり、UIではありません。スクリプトが動作しないキャンバスボタンを使用していない限り、すなわち、そのコードの状態ボタンは機能しませんGetComponent<Animator>().SetTrigger("OnPress"); // The button's animator goes to "pressed" state

を設定します。そして、エラーの説明には既にあなたがボタンメッシュにアニメーターを持っていないエラーが記載されています。行にコメントを付けて、それがどのように動作するかを見てください。

編集:

私はドアアニメーターのたonPress状態を呼び出そうとすると、あなたのコードが

door.GetComponent<Animator>().SetTrigger("OnPress"); 

なく

GetComponent<Animator>().SetTrigger("OnPress"); 

する必要がありますあなたの変遷を経ました。詳細は以下のコメントになります。申し訳ありませんが最初に気付かなかった。

+0

さて、コードが今すぐ動作します!はい、私は以前の質問からそれをコピーして貼り付けました。そのコードは@Toasterのものです。 しかし、私は今 "パラメータ 'オープン'が存在しません。エラーとして。あなたはそれを私に助けてくれますか? –

+1

私はまだDoor.SetTrigger( "Open")の問題があるはずだと思います。あなたはそのようなクリップを再生することはできません。それはパラメータからトリガーを設定することです。ほとんどの場合、エラーが発生します。アニメーターを再加工する必要があるかもしれません。アニメーターでもう一度確認してみてください。それはアニメータトリガーに間違ったアプローチです。 –

+1

あなたのアニメーターが正しく設定されていません。もう一度設定してください。特定のクリップを再生したい場合は、animatorObject.Play( "Clipname"); –

関連する問題