Unity之一天一个技术点(十九)--初学委托

委托这个对于C#初学者比较头疼,我也是看了半天资料才稍微弄懂一点,下面的代码还是挺简单的,也算用了委托这么逼格高的技术了。

using UnityEngine;
using System.Collections;

//三个军衔级别的命令类型//
public enum TypeOfCommands
{
    General,
    Captain,
    Soldier
}

public class EventManager : MonoBehaviour
{

    //定义一个通用代理,根据传递类型,发送消息
    public delegate void CommonUse(TypeOfCommands cmd);
    //定义一个事件发送三个军衔的命定
    public static event CommonUse whenStep_CommonUse;

    //通用指令传递事件类型//
    public static void sendMessage_Common(TypeOfCommands toc)
    {
        whenStep_CommonUse(toc);
    }
}
using UnityEngine;
using System.Collections;

public class MainLogic : MonoBehaviour
{

    public GUIText myGuiText;//用于显示消息的ui文字  

    void Start()
    {
        EventManager.whenStep_CommonUse += whenStep;
    }

    //根据命令类型,执行
    void whenStep(TypeOfCommands toc)
    {
        switch (toc)
        {
            case TypeOfCommands.General:
                myGuiText.text = "i'm General,the captain should hear from me";
                break;
            case TypeOfCommands.Captain:
                myGuiText.text = "i'm Captain,every soldier need to obey to me";
                break;
            case TypeOfCommands.Soldier:
                myGuiText.text = "i'm soldier,i need to receive commands";
                break;

        }
    }

    void OnGUI()
    {
        if(GUI.Button(new Rect(0,0,100,30),"General"))
        {
            EventManager.sendMessage_Common(TypeOfCommands.General);
        }
        if(GUI.Button(new Rect(0,50,100,30),"Captain"))
        {
            EventManager.sendMessage_Common(TypeOfCommands.Captain);
        }
        if(GUI.Button(new Rect(0,100,100,30),"Soldier"))
        {
            EventManager.sendMessage_Common(TypeOfCommands.Soldier);
        }  

    }  

}
时间: 2024-10-23 21:09:09

Unity之一天一个技术点(十九)--初学委托的相关文章

Unity之一天一个技术点(九)---EasyTouch 旋转镜头

EasyTouch 旋转镜头 从EasyTouch的官方例子上看,它的左摇杆 并不是控制整体的旋转镜头,而且左摇杆控制上下旋转,右摇杆控制左右旋转,十分不方便. 假如只用一个摇杆实现上下左右旋转镜头的时候,自身的坐标系就会歪,也就是会出现镜头歪的情况 在我经过多次测试之后,发现只要在camera上层创建一个父物体CameraAxis ,参数不同,就不会出现镜头歪的情况.如图

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

Unity之一天一个技术点(十)---UI添加粒子特效

最近给UI添加粒子特效时,总是被UI遮挡, 解决方法是: 因为粒子系统的渲染顺序列默认为3000,而NGUI的渲染顺序默认也是从3000开始,当有嵌套的panel时或者Depth更高的panel时,GUI的渲染顺序会高于3000, 解决办法是, 1.修改Ngui中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了,当有的窗口需要显示在特效上面时,在检视面板中把该窗口的Renderer Q选项调整为Start At,值为3000以上,就可以解决,

Unity之一天一个技术点(十二)---指南针的实现

指南针的实现(可据镜头旋转改变) 代码如下: 变量简述: compassGUISkin皮肤用来显示指南针贴图 标签Label贴图用来作为指南针背景  Box贴图用来作为箭头贴图 把脚本赋予给主镜头即可 GUI.skin = compassGUISkin; var compassAngle : float = transform.rotation.eulerAngles.y;//得到镜头的y轴旋转角度 var compassDiameter : float = 128; var compassWi

Unity之一天一个技术点(十四)

using UnityEngine; using System.Collections; /** * 备注:本脚本必须赋予主镜头 */ public class CameraRotateAround : MonoBehaviour { public Transform target;//主相机要围绕其旋转的物体 public float distance = 7.0f;//主相机与目标物体之间的距离 private float eulerAngles_x; private float euler

Unity之一天一个技术点(十六)---狙击镜呼吸效果

我们正在做一个狙击游戏,然后要模仿一个狙击镜打开时候呼吸效果,也就是狙击镜会上下左右平缓位移,我参考网上的脚本又更改了一下,你可以直接挂在你的镜头上,然后屏幕中间放一个瞄准镜,就能看到很酷的效果~ public void Noise() { noisedeltaX += ((((Mathf.Cos(Time.time) * Random.Range(-nosieMaxRange, nosieMaxRange) / 5f) * nosieMaxSpeed) - noisedeltaX) / 100

Unity之一天一个技术点(十八)---让敌人缓慢转向,并且跟踪玩家

哦也,公司年会开完就放假,年前不会再更新了~ 提前恭祝大家新年快乐,心想事成~ public Transform target public int moveSpeed public int rotateSpeed private Transform mytransform; void awake (){ mytransform=this.transform; } void Start() { GameObject go=GameObject.FindGameObjectWithTag("Pla

Unity之一天一个技术点(十五)

给unity3d的老版动画中,添加事件的方法(测试通过): AnimationEvent event0 = new AnimationEvent(); event0.time =this.animation["run"].length * 0.2f; event0.functionName ="xxx"; event0.stringParameter="哈哈!"; animation["run"].clip.AddEvent(

Unity之一天一个技术点(十三)

var target : Transform; var distance = 10.0; var xSpeed = 250.0; var ySpeed = 120.0; var yMinLimit = -20; var yMaxLimit = 80; private var x = 0.0; private var y = 0.0; @AddComponentMenu("Camera-Control/Mouse Orbit") partial class MouseOrbit { }