2016-09-22 450 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); 

,因爲你用[這裏](http://stackoverflow.com/a/ 39617471/3785314)解決方案,爲什麼不接受它作爲答案? – Programmer

+0

我不確定它是否有效。我有一個引用按鈕的問題。如果它有效,我會接受它。這是左邊的複選標記?你能幫助參考按鈕嗎? – Rango

+0

是的,複選標記不是upvote或downvote圖像。所以,如果你問一個問題,你得到的答案不起作用,不要用非工作答案創建一個新問題。相反,在答案下留下評論。我相信這些人願意幫助你更多地回答你的問題。如果你忽略它們然後在一個新問題中使用他們的代碼,這意味着他們所做的代碼解決了你的問題,而你現在又面臨一個新的不同的問題。 – Programmer

回答

2

看你的代碼,還有另一個問題:

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

不能鑄件(Button)到遊戲物體那樣。您必須使用GetComponent從GameObject獲取Button組件。

我不能將其拖放到檢查刪除按鈕,當我發現它 按標籤我無法從遊戲物體將其丟至按鈕

這是因爲遊戲對象要拖動到shootButton插槽不是按鈕或沒有附加到它的按鈕組件。它必須具有Button組件才能將其拖動到Button(shootButton)插槽。

您必須創建一個按鈕,然後將該按鈕拖到shootButton插槽。

你可以做到這一點,首先去除

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

然後拖動ButtonshootButton插槽:

enter image description here

OR

得到參考從腳本:

如果你想從腳本做到這一點,與

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

我已連接按鈕組件,但它仍不起作用 – Rango

+0

您正在做錯某事。如果您仍然無法將其拖動到插槽中,請張貼拖動它的位置的屏幕截圖。發佈GameObject的另一個屏幕截圖,您將拖動到該插槽中,並向我們展示哪些組件已連接到它。另外,除非您的問題得到解決,否則不要接受答案。 – Programmer

+0

問題已解決我使用了_shootButton = GameObject.FindGameObjectWithTag(「ShootButton」)。GetComponent

相關問題