2016-08-16 1 views
0

私は「攻撃ボタン」と呼ばれるUIボタンを持っています。私は私のGameObjectにHeroBattleControllerというスクリプトを添付しています。私は、シリアル化されたフィールドとして設定された攻撃ボタンを持っており、攻撃ボタンオブジェクトはエディタのスクリプト上にドロップされています。それにアクセスしようとしているユニティオブジェクトリファレンス+シリアライズされたフィールド。私は何が欠けていますか?

[SerializeField] 
private Button AttackButton; 

public void SetButtonStatus(bool status) { 
    AttackButton.interactable=status; 
} 

は私にエラーとNullReferenceExceptionを与える:私はエディタでオブジェクトを置くと思っオブジェクト

のインスタンスに設定されていないオブジェクト参照は、私が「検索しなくても、それにアクセスできるようになります" オブジェクト。誰かが私を正しい方向に向けることができますか?

enter image description here

エラーがライン上にある

AttackButton.interactable=status; 

完全HeroBattleControllerスクリプト

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 

public class HeroBattleController: MonoBehaviour { 

    public static string SelectedHero; 

    [SerializeField] 
    private Button AttackButton; 

    public void SetButtonStatus(bool status) { 
     AttackButton.interactable=status; 

    } 

    public void HeroTouch() { 
     Debug.Log("Hero was touched: "+this.name); 

     SetButtonStatus(false); 
    } 

    // Use this for initialization 
    void Start() { 

    } 

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

    } 
} 

HeroTouchはheroprefab物体からのonClickを介して呼び出されます。

更新:私はherobattlecontrollerスクリプトを2つのオブジェクト、シーンのルートにあるgameオブジェクトとheroprefabオブジェクトに接続させました。私はそれをゲームオブジェクトから削除し、プレハブ上にのみ持っていました。ただし、攻撃ボタンをプレハブのスクリプトセクションにドラッグすると太字のままになり、ゲームを実行すると攻撃ボタンの参照はなくなります。私は実行中のオブジェクトにボタンをドラッグすることができ、それは私が期待どおりに機能します。私は明らかに、オブジェクト階層とオブジェクトが使用可能な場所との間の接続に何かを見逃しています。主人公の戦闘コントローラのスクリプトをルートのゲームオブジェクトに置くことは、それが太字であり、実行されたときにリンクが欠落していることを意味するのと同じように機能します。 HeroBattleControllerはプレハブにランタイム

enter image description here

+2

** "アクセスしようとすると、エラーNullReferenceExceptionが発生します:オブジェクト参照がオブジェクトのインスタンスに設定されていません"エラーの原因となっているコード行は?コンソールタブからそのエラーをダブルクリックすると、Unityはそのエラーの原因となっている行を表示します。私はあなたの質問のコードに問題があるとは思わない。 – Programmer

+0

エラーはAttackButton.interactable = statusにあります。 – Sym

+0

それはうまくいくはずです。たぶん、リンクエラーがあります。あなたの 'Button'をエディタから' AttackButton'スロットにドラッグし直してください。これを行っても問題が解決しない場合は、 'SetButtonStatus'関数の呼び出し方法を説明してください。あなたの質問を編集し、完全なスクリプトを 'HeroBattleController'に入れてください。また、 'SetButtonStatus'関数を呼び出す場所の完全なスクリプトを記述してください。これは問題を特定するのに役立ちます。 – Programmer

答えて

1

時に編集中の

階層

enter image description here

階層を添付していますか? AttackButtonは同じプレハブにありますか?そうでなければ問題がある。

+0

HeroBattleControllerがプレハブに添付されていますが、アタックボタンを取り付けたままにすることはできません。私はプロジェクトのプレハブにそれを付けようとすると無印を得て、それを現場のプレハブに取り付けると消えます。プレハブオブジェクトは、Hero1からHero5を作成します。あなたはプレハブでもあるオブジェクトだけをドロップできますか? – Sym

+0

プレハブが何かに依存しているなら、そのプレハブの中にあるはずです。 – AminSojoudi

関連する問題