热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Unity中的事件监听

Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。如下图所示:先以PointerClick为例。这个是用于某点点击

    Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。如下图所示:

技术分享

    先以PointerClick为例。这个是用于某点点击事件。其他事件都可以根据相同的办法调用。

    之所以使用PointerClick为例。是因为在最后笔者会提到一个特殊的实现方式。而相比于其他事件类型,有且仅有Click事件存在特殊实现。

    我们要实现事件主要有3种方式:

    方式一:继承基础接口实现

技术分享

    步骤一:创建ClickObject脚本。继承MonoBehaviour和IPointerClickHandler。

    技术分享

    步骤二:实现public void OnPointerClick(PointerEventData eventData)方法:

    步骤三:创建一个名为Panel_IPointer的空对象。并且将ClickObject脚本附加到对象上。

    步骤四:启动,并点击Panel_IPointer对象。在Console输出如下:

技术分享

    方式二:Unity3D编辑器操作设置实现

    技术分享

步骤一:创建一个C#脚本。在脚本中添加一个public方法。

技术分享

步骤二:创建一个命名为Empty的UI对象,用于接收和响应点击事件。创建一个名为Panel的UI对象,用于触发点击事件。

步骤三:Panel对象添加EventTrigger组件," Add New" -> 选择" PointerClick"。将Empty对象拖拽到触发者位置。然后点击"No Function"选择我们写在Test脚本中的OnTestClick事件。

技术分享技术分享

    步骤四:设置好这些之后。我们的事件触发就已经完成了。运行Unity3D。点击窗口中Panel对象。Console输出内容如下:

技术分享

    方式三:程序动态设置实现

技术分享

    我们在日常的开发中。可能需要动态的需要变更绑定的事件。那么我们如何才能使用C#代码控制绑定触发事件呢?

    下面我们就介绍代码控制。ScriptControl.cs脚本

技术分享

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;

public class NewBehaviourScript : MonoBehaviour
{

// Use this for initialization
void Start()
{

var trigger = transform.gameObject.GetComponent();
if (trigger == null)
trigger = transform.gameObject.AddComponent();

// 实例化delegates
List entrys = trigger.triggers;

// 定义需要绑定的事件类型。并设置回调函数
EventTrigger.Entry entry = new EventTrigger.Entry();
// 设置 事件类型
entry.eventID = EventTriggerType.PointerClick;
// 设置回调函数
//entry.callback = new EventTrigger.TriggerEvent();

entry.callback.AddListener(OnScriptControll);
// 添加事件触发记录到GameObject的事件触发组件
entrys.Add(entry);
}
void Updata()
{ }

public void OnScriptControll(BaseEventData arg0)
{
Debug.Log("Test Click" + arg0.ToString());
}

}

技术分享
    点击事件的特殊实现方式:使用Button控件实现

    技术分享

    针对Click事件还存在一种特殊方式:uGUI系统中官方提供了一种Button控件。Button封装了官方提供的一套OnClick事件。操作完全类似于方式二。便不详述了。

    使用Button我们可以实现动态的变更鼠标绑定的点击事件。如下代码所示:

技术分享
 1 using UnityEngine;
 2 using System.Collections;
 3 using UnityEngine.UI;
 4 
 5 public class BtnControl : MonoBehaviour {
 6 
 7     // Use this for initialization
 8     void Start ()
 9     {
10         var button = transform.gameObject.GetComponent

Unity中的事件监听


推荐阅读
author-avatar
手机用户2502873837
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有