2016-08-15 5 views
1

私は線幅を変更したいと思っていますが、少し問題があるようです。私はそれを設定している方法は、私は6つの異なる線の幅を持っていると、ユーザーが次の線を描画するときに反映する必要がある幅をクリックしたとき。現在、私はエラーが発生しています:行幅を変更する、オブジェクト参照がオブジェクトのインスタンスに設定されていません

"NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていないBrushWidth.SetThickness(Int32 _lineNum)(Assets/_Scripts/BrushWidth.cs:46)BrushWidth.Start()(私はここで何をしないのです

私は私が私を作ったと思った; 30 lineConfig.Scale = 0.35f、ラインスケールを変更行を参照している)」

:資産/ _Scripts/BrushWidth.csで? Public LineConfig lineConfigを使用したインスタンス参照;助けをありがとう!

using UnityEngine ; 
using System.Collections ; 
using UnityEngine.UI ; 
using System ; 
using PaintCraft.Tools ; 

public class BrushWidth : MonoBehaviour 
{ 
    public Button btn1, btn2, btn3, btn4, btn5, btn6 ; 
    public float brushSize ; 
    public Text brushNameTextBox ; 
    public String brushName ; 
    public LineConfig lineConfig ; 

    void Awake() 
    { 
     lineConfig = gameObject.GetComponent<LineConfig>() ; 

     btn1.onClick.AddListener (() => SetThickness (1)) ; 
     btn2.onClick.AddListener (() => SetThickness (2)) ; 
     btn3.onClick.AddListener (() => SetThickness (3)) ; 
     btn4.onClick.AddListener (() => SetThickness (4)) ; 
     btn5.onClick.AddListener (() => SetThickness (5)) ; 
     btn6.onClick.AddListener (() => SetThickness (6)) ; 
    } 

    void Start() 
    { 
     // Set Starting Thickness 
     SetThickness (3) ; 
    } 

    void SetThickness (int _lineNum) 
    { 
     switch (_lineNum) 
     { 
      case 1: 
       lineConfig.Scale = 0.1f ; 
       brushName = "Thin " ; 
       break ; 
      case 2: 
       lineConfig.Scale = 0.2f ; 
       brushName = "Light " ; 
       break ; 
      case 3: 
       lineConfig.Scale = 0.35f ; 
       brushName = "Regular " ; 
       break ; 
      case 4: 
       lineConfig.Scale = 0.5f ; 
       brushName = "Medium " ; 
       break ; 
      case 5: 
       lineConfig.Scale = 0.75f ; 
       brushName = "Thick " ; 
       break ; 
      case 6: 
       lineConfig.Scale = 1.0f ; 
       brushName = "Heavy " ; 
       break ; 
      default: 
       break ; 
     } 
     brushNameTextBox.text = brushName ; 
    } 
} 
+1

を助けました! 'Awake()'は 'Start()'の前に実行されます。 –

+1

@ user3185569 Awakeが呼び出され、Startが呼び出されます。 @OPそれに接続された 'LineConfig'をGameObjectを' lineConfig'スロットにドラッグします。 – Programmer

+0

BrushWidthスクリプトの前に '[RequireComponent(typeof(LineConfig)]]属性を追加する –

答えて

1

スクリプトに添付されているオブジェクトにLineConfigコンポーネントが添付されていないという問題があります。このため、GetComponentはnullを返します。この問題を解決し、あなたのオブジェクトにLineComponentを追加、または単に変更するには:

lineConfig = gameObject.GetComponent<LineConfig>() ; 

へ:

lineConfig = gameObject.AddComponent<LineConfig>() ; 

それとも、あなたはすでに添付LineConfigがあることを確認したい場合は、に[RequireComponent (typeof (LineConfig))]を追加あなたのクラスの初めは、public class BrushWidth : MonoBehaviour以上です。 だから、あなたのクラスは次のようになります。

using UnityEngine ; 
using System.Collections ; 
using UnityEngine.UI ; 
using System ; 
using PaintCraft.Tools ; 
public class BrushWidth : MonoBehaviour 
{ 
public Button btn1, btn2, btn3, btn4, btn5, btn6 ; 
public float brushSize ; 
public Text brushNameTextBox ; 
public String brushName ; 
public LineConfig lineConfig ; 

void Awake() 
{ 
    lineConfig = gameObject.AddComponent<LineConfig>() ; 

    btn1.onClick.AddListener (() => SetThickness (1)) ; 
    btn2.onClick.AddListener (() => SetThickness (2)) ; 
    btn3.onClick.AddListener (() => SetThickness (3)) ; 
    btn4.onClick.AddListener (() => SetThickness (4)) ; 
    btn5.onClick.AddListener (() => SetThickness (5)) ; 
    btn6.onClick.AddListener (() => SetThickness (6)) ; 
} 

void Start() 
{ 
    // Set Starting Thickness 
    SetThickness (3) ; 
} 

void SetThickness (int _lineNum) 
{ 
    switch (_lineNum) 
    { 
     case 1: 
      lineConfig.Scale = 0.1f ; 
      brushName = "Thin " ; 
      break ; 
     case 2: 
      lineConfig.Scale = 0.2f ; 
      brushName = "Light " ; 
      break ; 
     case 3: 
      lineConfig.Scale = 0.35f ; 
      brushName = "Regular " ; 
      break ; 
     case 4: 
      lineConfig.Scale = 0.5f ; 
      brushName = "Medium " ; 
      break ; 
     case 5: 
      lineConfig.Scale = 0.75f ; 
      brushName = "Thick " ; 
      break ; 
     case 6: 
      lineConfig.Scale = 1.0f ; 
      brushName = "Heavy " ; 
      break ; 
     default: 
      break ; 
    } 
    brushNameTextBox.text = brushName ; 
} 
} 

希望これはNO :)

関連する問題