1.用Delegate 和 Event 来定义一个通用类来处理事件 (观察者模式)

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.EventSystems;

public class NewBehaviourScript : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler

{

// 定义事件代理

public delegate void UIEventProxy(GameObject gb);

// 鼠标点击事件

public event UIEventProxy OnClick;

// 鼠标进入事件

public event UIEventProxy OnMouseEnter;

// 鼠标滑出事件

public event UIEventProxy OnMouseExit;

public void OnPointerClick(PointerEventData eventData)

{

if (OnClick != null)

OnClick(this.gameObject);

}

public void OnPointerEnter(PointerEventData eventData)

{

if (OnMouseEnter != null)

OnMouseEnter(this.gameObject);

}

public void OnPointerExit(PointerEventData eventData)

{

if (OnMouseExit != null)

OnMouseExit(this.gameObject);

}

}

2.定义btn的操作移动的基本属性:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class btn : MonoBehaviour {

public float HSpeed;

public float VSpeed;

public int  btnName;

public Transform Objects;

bool IsWalk=false;

void Start () {

Button btn = this.GetComponent<Button> ();

NewBehaviourScript btnListener = btn.gameObject.AddComponent<NewBehaviourScript>();

btnListener.OnClick += delegate(GameObject gb) {

Debug.Log(gb.name + " OnClick");

IsWalk = true;

};

btnListener.OnMouseEnter += delegate(GameObject gb) {

// Debug.Log(gb.name + " OnMouseEnter");

};

btnListener.OnMouseExit += delegate(GameObject gb) {

Debug.Log(gb.name + " OnMOuseExit");

IsWalk = false;

};

}

void Update()

{

if(IsWalk)

{

switch (btnName)

{

case 1: Objects.Translate(Vector3.forward * -VSpeed * Time.deltaTime);

break;

case 2: Objects.Translate(Vector3.forward * VSpeed * Time.deltaTime);

break;

case 3: Objects.Rotate(Vector3.up * -HSpeed * Time.deltaTime);

break;

case 4: Objects.Rotate(Vector3.up * HSpeed * Time.deltaTime);

break;

default:

break;

}

}

//定义A D W S键盘控制

float h = Input.GetAxis("Horizontal");

float v = Input.GetAxis("Vertical");

//控制旋转左右

Objects.Rotate(Vector3.up * HSpeed * h * Time.deltaTime);

//控制前后移动

Objects.Translate(Vector3.forward * VSpeed * v * Time.deltaTime);

}

}

注:此代码1为委托事件定义,2是添加在btn上的,按钮持续按下的一种写法,根据事件与监听修改而来,如有雷同或更赞的代码,请评论下方....

btn按钮事件的更多相关文章

  1. DuiLib逆向分析の按钮事件定位

    目录 DuiLib逆向分析の按钮事件定位 0x00 前言 DuiLib介绍 DuiLib安装 DuiLib Hello,World! Duilib逆向分析之定位按钮事件 碎碎念 第一步:获取xml布局 ...

  2. asp.net中父子页面通过gridview中的按钮事件进行回传值的问题

    这两天写BS程序,遇到父子页面传值的问题,以前没写过web系统,用了几天时间才将问题解决,总结下记录下来: 问题描述: 父页面A中有一个gridview,每行6个列,有5列中均有一个按钮,单击按钮,会 ...

  3. 一个事半功倍的c#方法 动态注册按钮事件

    前几天在网上看见一个制作计算器的c#程序,其中有一个动态注册按钮事件,觉的很有用.于是实际操作了一哈, 确实比较好. 言归正传,下面就来讲讲怎样动态注册按钮事件. 首先,我们需要设置变量来获取点击一个 ...

  4. ngui中 代码调用按钮事件(后来改成了按钮绑定键盘..)

    ngui中 代码调用按钮事件 好烦人啊这个问题, 我弄完发上来 这个问题解决了一半 发现可以用 按钮绑定来解决这个问题,并且更安全方便快速 直接在按钮上添加一个 key binding 指定按键 搞定 ...

  5. MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

    网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#l ...

  6. Java Hello World例子和添加按钮事件与功能

    新建android工程,然后默认“下一步”即可完成创建: 2.添加Button 3.在src的MainActivity.java添加以下红色代码 import android.support.v7.a ...

  7. JS调用水晶报表打印翻页按钮事件

    默认的水晶报表打印按钮.翻页按钮太小,并且样式不好调整,考虑自己做一个按钮,然后调用水晶报表的按钮事件. 在实际操作中发现可以在.net按钮的服务器端事件中调用翻页方法: CrystalReportV ...

  8. ASP.NET多个Button的页面,回车执行按钮事件(转)

    主要有两种实现方法分别是:JavaScript的方法与Panel的方法 一.JavaScript的方法 ①单输入框(文本框)单按钮的实现方法 以下功能实现:在输入框中输入内容之后,按回车键就执行按钮事 ...

  9. asp.net中用回车代替按钮事件

    第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了.当然,还有按钮事件. <html> <head> <title>测试绑定enter</title ...

随机推荐

  1. 跟我学习css3之transition

    HTML5和css3已经是将来的发展趋势,现在有很多移动端还有一些游戏公司已然使用它们开 发了比较成功的产品.我在2011年的时候也跟着技术潮流初浅的学习了html5+css3.毕竟那 时候我没有把学 ...

  2. mysql 查询条件

    1简单查询   select* from 表名 select name as“姓名”fromstu     (把name改为名字) 2条件查询 where 后面跟条件  条件要写清楚 3模糊查询  l ...

  3. jmeter- 性能测试3:聚合报告(Aggregate Report )

    jmeter-监听器-聚合报告样例: 字段说明: label:请求名称,自己定义的 #Samples:这次测试中一共发出了多少个请求,如果模拟20个用户,每个用户迭代20次,那么就是400(未设置持续 ...

  4. MVC4 Filter (筛选器)

    Filter,在MVC中我们通常将Filter定义成Attribute特性 来供Controller 或者Action 方法调用. FilterAttribute 是所有Filter 的基类. 而 F ...

  5. redis 映射数据结构粗略

    [字符串] sds结构,simple dynamic string.是redis底层字符串实现,结构为: typedef char *sds; struct sdshdr { // buf 已占用长度 ...

  6. 【转】Android - 线程同步

    什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题. 实现同步机制有两个方法: 1.同步代码块 ...

  7. C#和JAVA 访问修饰符

    JAVA ----------------------------------------------- 访问修饰符        描述 ------------------------------- ...

  8. ref和out params

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. ref 类似于 PH ...

  9. [HNOI2004]宠物收养所

    题目链接:戳我 其实也就是一个splay而已了. 但是一定要注意这种需要计算的,刚开始insert的时候插入极大值极小值的时候不要让它爆掉int.......(比如我刚开始就写了一个214748364 ...

  10. Sublime text3!行首,行尾,批量编辑!

    1.Windows下的操作操作步骤 1.Ctrl + H 2.打开正则,输入^,然后Find All,查找所有的行首 3.打开正则,输入$,然后Find All,查找所有的行尾 4.光标闪动,就可以进 ...