2016-09-22 13 views
1

スクリプトはシーンに含まれていないプレハブに添付されています。ボタンにはタグがあります。Unityのスクリプトからボタンへの参照を取得する

私は、インスペクタのボタンをドラッグアンドドロップしようとしましたが、エンジンは私を許さないでしょう。私はタグで見つけようとしましたが、「UnityEngine.GameObjectをUnityEngine.UI.Buttonに暗黙的に変換できません」という例外が発生し、キャスト時にこれらの型を組み込み変換で変換できないという例外が発生します。 いくつかお手伝いしますか? ボタンへの参照を取得するにはどうすればよいですか?ここで コードです:

あなたのコードを見てみると
using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class TankShooting : MonoBehaviour { 

    private Transform ShootingCameraTransform; 
    private PlayerTankMovement playerTankMovement; 
    public Button shootButton; 


    // Use this for initialization 
    void Start() { 

     shootButton = GameObject.FindGameObjectWithTag ("ShootButton") as Button; 
     shootButton.onClick.AddListener ((UnityEngine.Events.UnityAction)this.OnShootButtonClick); 

     playerTankMovement = GetComponent<PlayerTankMovement>(); 
     Transform t = transform; 
     foreach (Transform tr in t) 
     { 
      if (tr.tag == "ShootingCamera") 
      { 
       ShootingCameraTransform = tr.transform; 
      } 
     } 
    } 

    // Update is called once per frame 
    void Update() { 

    } 

    public void OnShootButtonClick() 
    { 
     Debug.Log ("Success"); 

    } 
} 
+0

こんにちはで

shootButton = GameObject.FindGameObjectWithTag ("ShootButton") as Button; shootButton.onClick.AddListener ((UnityEngine.Events.UnityAction)this.OnShootButtonClick); 

を交換したい場合は、次のスクリプトから39617471/3785314)解決策、それを回答として受け入れるのはなぜですか? – Programmer

+0

私はそれが動作するのか分からない。私はボタンを参照する際に問題があります。それがうまくいくなら私はそれを受け入れます。それは左のチェックマークのことですか?あなたはボタンの参照を手伝ってもらえますか? – Rango

+0

はい、チェックマークはupvoteまたはdownvoteイメージではありません。だから、あなたが質問し、あなたが持っている答えがうまくいかない場合は、動作していない答えで新しいものを作成しないでください。代わりに、答えの下にコメントを残してください。私はそれらの人々があなたの質問にもっと答えるのを助けてくれると確信しています。それらを無視して新しい質問にそのコードを使用すると、彼らがあなたの問題を解決したコードが今や別の新しい問題を抱えていることを意味します。 – Programmer

答えて

2

、別の問題があります:

shootButton = GameObject.FindGameObjectWithTag ("ShootButton") as Button; 

あなたがそのようなゲームオブジェクトをコンポーネント(Button)をキャストすることはできません。 GameObjectからButtonコンポーネントを取得するには、GetComponentを使用する必要があります。

私はドラッグして、インスペクタでボタンをドロップすると、私はタグによってそれを を見つけたとき、私はボタンのゲームオブジェクトを使用すると、shootButtonスロットにドラッグされているためです

にゲームオブジェクトからそれをキャストすることはできませんすることはできませんボタンではないか、ボタンコンポーネントがアタッチされていません。それはあなたがButton(シュートボタン)スロットにドラッグできるようにボタンコンポーネントを持っている必要があります。

ボタンを作成してから、そのボタンをshootButtonスロットにドラッグする必要があります。あなたが最初のによって

shootButton = GameObject.FindGameObjectWithTag ("ShootButton") as Button; 
shootButton.onClick.AddListener ((UnityEngine.Events.UnityAction)this.OnShootButtonClick); 

を取り除くことを行うことができます

その後、shootButtonスロットにButtonをドラッグ:

enter image description here

OR

参照を取得

あなたは[この](http://stackoverflow.com/a/を使用するので、スクリプトからこれを行う

shootButton = GameObject.FindGameObjectWithTag("ShootButton").GetComponent<Button>(); 
shootButton.onClick.AddListener(() => OnShootButtonClick()); 
+0

ボタンコンポーネントが接続されていますが、まだ動作していません – Rango

+0

何か問題があります。まだスロットにドラッグできない場合は、ドラッグしている場所のスクリーンショットを投稿してください。スロットにドラッグしているGameObjectのスクリーンショットをもう1つ掲示し、それにどのコンポーネントが接続されているか表示します。また、問題が解決されない限り、回答を受け入れないでください。 – Programmer

+0

問題が修正されました_shootButton = GameObject.FindGameObjectWithTag( "ShootButton")の部分を使用しました。GetComponent

関連する問題