unity3D,NGUI中button响应事件实现

原创 2013年12月03日 10:50:55

               最近做的一个项目,是鼠标点击左键在plane上画线,其中,界面上有NGUI的button,点击用来改变线的颜色,显然主要画线脚本绑定在摄像头上面,而button响应事件的脚本绑定在对应的button上面,不同对象上面绑定的脚本怎么来实现点击button响应呢,下面就来说一说。

               首先,要在画线脚本上写一个对外接口函数,比如改变颜色的对外接口函数,我这么写:

                

		public void  set_linecolor() //定义为公有型的函数
	{
		linecolor = Color.red;       //linecolor是全局变量
		line = new VectorLine("DrawnLine", linePoints,linecolor,lineMaterial, lineWidth, LineType.Continuous);
	}
           

               对应的在button上面绑定一个脚本,里面要找到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>();//找到脚本test
		t.set_linecolor();//调用脚本里面的函数
		Debug.Log("button!");  //测试是否响应
		}
}

             这样就可以实现点击button,改变颜色了。(当然还要将test脚本拖拽到button上面,然后添加相应的画线材质,碰撞体,这样才能实现,不然会错误提示找不到对象,这个很重要!!)

             但是这样其实还有一个缺陷,就是,当需要改变的颜色很多的时候,那是不是要定义很多个对外接口函数?所以这样也不方便,但有一个解决方法很好,就是利用参数传递的方法。

             下面是改变宽度的对外接口函数:

              

		//公有类型函数,里面有一个float型参数,用来传递宽度
public 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>();//找到脚本test
		t.set_linewidth(4.0f);//调用脚本里面的函数,并传递一个float型的参数
		Debug.Log("button!");  //测试是否响应
		}
}

               这样的话,画线脚本里面只要创建一个对外接口函数即可以,只是不同button的时候传递不同参数便可以了,这样可能方便多了,让我想到c++里面的代码重用^_^(当然还要重复操作将test拖到button上面,再拖拽画线材质,碰撞体才能实现)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【NGUI】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

大家好,我是雨中祈雨。一直以来,CSDN都是我最好的编程助手。这是我在CSDN的第一篇关于Unity3D的博客,其实也就是记录我在学习Unity3D时遇到的一些小问题从不懂到有所了解的过程。另一方面,...
  • IceFantasyLcj
  • IceFantasyLcj
  • 2015年10月27日 16:42
  • 4242

【Unity3D】【NGUI】点击按钮没反映

NGUI讨论群:333417608 以下是经常发现会遇到的问题。 1、设置正确的Camera的Culling Mask;设置正确的UICamera的Event ReceiverMask。这两个要...
  • u012091672
  • u012091672
  • 2014年03月20日 15:45
  • 8143

NGUI 按钮 按下 抬起 事件

using UnityEngine; using System.Collections; public class MaskOnClick : MonoBehaviour {     ...
  • SanShanYaoWuYue
  • SanShanYaoWuYue
  • 2014年10月16日 13:30
  • 1756

Unity3D:NGUI Srollview子对象中有Button时,点击不能滚动

NGUI中使用Scrollview控件,通过Gird来添加和管理子项,一般能正常使用。但如果你把Button作为Scrollview子项或者子项中有Button时,你会发现Button可以正常起效,但...
  • azhou_hui
  • azhou_hui
  • 2015年06月18日 17:01
  • 2347

NGUI butten 点击事件监听

1.直接监听 用的少 void OnClick() { Debug.Log("Button is Click!!!"); } 2
  • kaixindragon
  • kaixindragon
  • 2014年11月25日 16:19
  • 1626

Unity2017 UGUI开发 之 按钮点击事件处理

在Unity3D中的按钮添加事件有多种方式,举个例子看一下,我现在有一个Canvas对象,Canvas对象中有一个Button对象。 给Canvas 对象添加 testScript脚本,实现按钮的点...
  • hack_yin
  • hack_yin
  • 2017年08月26日 15:23
  • 997

NGUI 3.5教程(三)Button 按钮

写在前面:         本文将创建一个基本的Button。并且编写脚本,响应点击事件。     欢迎大家纠错、拍砖!原创很辛苦,如有转载,请注明出处。     Button --...
  • chenggong2dm
  • chenggong2dm
  • 2014年05月10日 21:04
  • 46355

NGUI基础之button(按钮)

1,button的创建;2,button组件的基本属性;3,button的事件监听
  • dingkun520wy
  • dingkun520wy
  • 2016年01月14日 18:21
  • 4706

unity3d NGUI 基础控件及添加监听事件

接下来我们讲解下UILabel,UILabel是用来显示文本的脚本,继承自UIWidget。我们创建一个label,属性如下图: 所有的label都需要Font才可正常工作。这个字体...
  • u014635337
  • u014635337
  • 2014年06月10日 19:30
  • 2942

【Unity3D】【NGUI】处理Button的按下状态?

提供一个脚本,会不会用就看各位的造化了。 MonoBehaviour SZUIPressedButton: using UnityEngine; using System.Collections.G...
  • u012091672
  • u012091672
  • 2013年11月28日 23:04
  • 3842
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity3D,NGUI中button响应事件实现
举报原因:
原因补充:

(最多只允许输入30个字)