unity 3 D,NGUIにおけるbutton応答イベント実装

2528 ワード

最近やっているプロジェクトの一つは、マウスで左ボタンをクリックしてplaneに線を引くことです.その中で、インタフェースにはNGUIのbuttonがあり、線の色を変えるためにクリックします.明らかに主な線を描くスクリプトはカメラにバインドされていますが、button応答イベントのスクリプトは対応するbuttonにバインドされています.オブジェクトにバインドされていないスクリプトはどのようにbutton応答を実現しますか.以下で説明します.まず、線を引くスクリプトの上で1つの対外インタフェースの関数を書いて、例えば色を変える対外インタフェースの関数、私はこのように書きます:

public void set_linecolor() //
{
linecolor = Color.red; //linecolor
line = new VectorLine("DrawnLine", linePoints,linecolor,lineMaterial, lineWidth, LineType.Continuous);
}
対応するbuttonの上で1つのスクリプトを縛って、中はMainCameraのオブジェクトを探し当てて、更にこのオブジェクトの上のスクリプトを探し当てて、私のここはtestで、それから、スクリプトの中で色を変える対外インタフェースの関数set_を呼び出しますlinecolor、これで応答メカニズムが実現します.button上のスクリプト:

using UnityEngine;
using System.Collections;

public class bb1 : MonoBehaviour {
//
private GameObject myobj1;
// Use this for initialization
void Start () {
//
myobj1 = GameObject.FindWithTag("MainCamera");
}
// Update is called once per frame
void Update () {
}
//button
void OnClick()
{
test t = GetComponent();// test
t.set_linecolor();//
Debug.Log("button!"); //
}
}

これでbuttonをクリックして色を変えることができます.(もちろんtestスクリプトをbuttonの上にドラッグ&ドロップし、対応する線引きマテリアル、衝突体を追加して実現します.そうしないと、オブジェクトが見つからないとエラーが表示されます.これは重要です!!しかし、このように実際にはもう一つの欠陥があります.変更する必要がある色が多い場合、それは多くの対外インタフェース関数を定義するのではないでしょうか.だからこれも不便ですが、パラメータ伝達を利用する方法がいいです.次は幅を変える対外インタフェース関数です:

// , float ,
ublic void set_linewidth(float line_width)
{
lineWidth = line_width; //
line = new VectorLine("DrawnLine", linePoints,linecolor,lineMaterial, lineWidth, LineType.Continuous);
}
それから、buttonの中でスクリプトを創立して、呼び出し:

using UnityEngine;
using System.Collections;

public class bb1 : MonoBehaviour {
//
private GameObject myobj1;
// Use this for initialization
void Start () {
//
myobj1 = GameObject.FindWithTag("MainCamera");
}
// Update is called once per frame
void Update () {
}
//button
void OnClick()
{
test t = GetComponent();// test
t.set_linewidth(4.0f);// , float
Debug.Log("button!"); //
}
}

このようにすれば、線のスクリプトの中で1つの対外インタフェース関数を作成すればいいだけで、ただ異なるbuttonの時に異なるパラメータを伝えるだけでいいので、このように便利になったかもしれません.c++の中のコードの再利用を考えさせます.(もちろん、testをbuttonの上にドラッグし、線マテリアルをドラッグして衝突体を実現することも繰り返します).