转眼回来半个月了,
以前感觉吃了睡,醒了趴,趴了饿,饿了吃的猪一般的生活挺容易的,现在自己体会了三十和初一,刚体验了两天,感觉自己坚持不住了,他丫的,突然感觉猪也挺不容易的啊,无所事事的生活真心难受.
我还是努力工作吧,起码能找到自我!实现自己的价值!还有钱赚,多好!
不多说,上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 事件类
/// </summary>
public class DelegateEvent
{
//定义委托函数
public delegate void EventHandler(EventData data);
//定义基于委托函数的事件
public event EventHandler eventHandler;
//触发监听事件,处理和分发
public void Handle(EventData data)
{
if (eventHandler != null)
{
eventHandler(data);
}
}
//删除
public void DelListener(EventHandler delHandler)
{
if (eventHandler != null)
{
eventHandler -= delHandler;
}
}
//添加
public void AddListener(EventHandler addHandler)
{
eventHandler += addHandler;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GameEvent;
/// <summary>
/// 事件数据
/// </summary>
public class EventData
{
public GameEvent.EventType type;
public object data;
}
using System.Collections.Generic;
using GameEvent;
/// <summary>
/// 事件管理
/// </summary>
public class EventManager
{
private static Dictionary<EventType, DelegateEvent> eventListenerPool = new Dictionary<EventType, DelegateEvent>();
//添加
public static void AddEventListner(EventType type, DelegateEvent.EventHandler handler)
{
DelegateEvent delegateEvent;
if (eventListenerPool.ContainsKey(type))
{
delegateEvent = eventListenerPool[type];
}
else
{
delegateEvent = new DelegateEvent();
eventListenerPool[type] = delegateEvent;
}
delegateEvent.AddListener(handler);
}
//删除
public static void DelEventListener(EventType type, DelegateEvent.EventHandler handler)
{
if (handler == null)
{
return;
}
if (eventListenerPool.ContainsKey(type))
{
return;
}
DelegateEvent delegateEvent = eventListenerPool[type];
delegateEvent.DelListener(handler);
}
//发送消息
public static void SendEvent(EventType type, object data)
{
if (!eventListenerPool.ContainsKey(type))
{
return;
}
//创建数据包
EventData eventData = new EventData();
eventData.type = type;
eventData.data = data;
DelegateEvent delegateEvent = eventListenerPool[type];
//传递
delegateEvent.Handle(eventData);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 游戏事件行为
/// </summary>
namespace GameEvent
{
//UI消息号
public enum UI_MsgCode
{
STARTUI,
CLOSEUI,
}
//玩家行为
public enum Player_MsgCode
{
PLAYER_BEHAVIOR,
}
//玩家事件类型
public enum EventType
{
MOVE,
ATTACK,
LOGIN,
ATTACKANIM,
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GameEvent;
/// <summary>
/// 消息体
/// </summary>
public class MoveBsehaviorProcess
{
public GameEvent.EventType eventType;
public Player_MsgCode playermsg;
}
目前为止,只写了一些基本的方法,用来创建数据和发送消息,然后简单的做了个登录界面
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LoginUI : MonoBehaviour
{
InputField username, password;
Button LoginBtn;
// Start is called before the first frame update
void Start()
{
EventManager.AddEventListner(GameEvent.EventType.LOGIN, LoginToMain);
username = transform.Find("username").GetComponent<InputField>();
password = transform.Find("password").GetComponent<InputField>();
LoginBtn = transform.Find("LoginBtn").GetComponent<Button>();
LoginBtn.onClick.AddListener(ClickToLogin);
}
//登录行为
private void LoginToMain(EventData data)
{
string strr = (string)data.data;
switch (data.type)
{
case GameEvent.EventType.MOVE:
break;
case GameEvent.EventType.ATTACK:
break;
case GameEvent.EventType.LOGIN:
//这里应该是本地读取到的用户名和密码,然后发送给服务器验证是否匹配,正确进入主界面
if (strr == "a|a")
{
Destroy(this.gameObject);
}
else
{
Debug.Log("用户名或密码错误");
}
break;
default:
break;
}
}
//点击登录按钮,删除本UI,进入游戏
private void ClickToLogin()
{
string s1 = username.text;
string s2 = password.text;
string str = s1 + "|" + s2;
EventManager.SendEvent(GameEvent.EventType.LOGIN, str);
}
// Update is called once per frame
void Update()
{
}
}
还有个模型控制的
using System;
using UnityEngine;
using UnityEngine.UI;
using GameEvent;
/// <summary>
/// CubeBoss渲染类
/// </summary>
public class CubeBossCtrl : MonoBehaviour
{
GameObject Bear;
Animator CubeBossAnim;
Slider CubeBossSlider;
// Start is called before the first frame update
void Start()
{
EventManager.AddEventListner(GameEvent.EventType.MOVE, MoveBsehavior);
EventManager.AddEventListner(GameEvent.EventType.ATTACK, AttackBsehavior);
Bear = GameObject.Find("Bear");
CubeBossAnim = GetComponent<Animator>();
CubeBossSlider = GameObject.Find("CubeBossSlider").GetComponent<Slider>();
}
/// <summary>
/// 攻击行为
/// </summary>
/// <param name="data"></param>
private void AttackBsehavior(EventData data)
{
string str = (string)data.data;
switch (data.type)
{
case GameEvent.EventType.MOVE:
break;
case GameEvent.EventType.ATTACK:
CubeBossAnim.SetBool("attack", true);
break;
case GameEvent.EventType.LOGIN:
break;
default:
Debug.Log("无行为");
break;
}
}
/// <summary>
/// 移动行为
/// </summary>
/// <param name="data"></param>
private void MoveBsehavior(EventData data)
{
Vector3 vec = (Vector3)data.data;
switch (data.type)
{
case GameEvent.EventType.MOVE:
transform.LookAt(vec + transform.position);
transform.Translate(Vector3.forward * 0.05f);
CubeBossAnim.SetBool("walk", true);
break;
case GameEvent.EventType.ATTACK:
break;
case GameEvent.EventType.LOGIN:
break;
default:
Debug.Log("无行为");
break;
}
}
// Update is called once per frame
void Update()
{
CubeBossSlider.transform.position = Camera.main.WorldToScreenPoint(transform.position + Vector3.up * 2);
if (Input.GetKey(KeyCode.Space))
{
string str = "attack";
EventManager.SendEvent(GameEvent.EventType.ATTACK, str);
}
}
private void FixedUpdate()
{
int num = 0;
if (Input.anyKey)
{
if (Input.GetKey(KeyCode.W))
{
num += 1;
}
//2
if (Input.GetKey(KeyCode.S))
{
num += 2;
}
//4
if (Input.GetKey(KeyCode.A))
{
num += 4;
}
//8
if (Input.GetKey(KeyCode.D))
{
num += 8;
}
}
else
{
CubeBossAnim.SetBool("walk", false);
CubeBossAnim.SetBool("attack", false);
}
switch (num)
{
//前
case 1:
Vector3 W = new Vector3(0, 0, 1);
EventManager.SendEvent(GameEvent.EventType.MOVE, W);
break;
//后
case 2:
Vector3 S = new Vector3(0, 0, -1);
EventManager.SendEvent(GameEvent.EventType.MOVE, S);
break;
//左
case 4:
Vector3 A = new Vector3(-1, 0, 0);
EventManager.SendEvent(GameEvent.EventType.MOVE, A);
break;
//右
case 8:
Vector3 D = new Vector3(1, 0, 0);
EventManager.SendEvent(GameEvent.EventType.MOVE, D);
break;
//左前
case 5:
Vector3 WA = new Vector3(-1, 0, 1);
EventManager.SendEvent(GameEvent.EventType.MOVE, WA);
break;
//右前
case 9:
Vector3 WD = new Vector3(1, 0, 1);
EventManager.SendEvent(GameEvent.EventType.MOVE, WD);
break;
//左后
case 6:
Vector3 SA = new Vector3(-1, 0, -1);
EventManager.SendEvent(GameEvent.EventType.MOVE, SA);
break;
//右后
case 10:
Vector3 SD = new Vector3(1, 0, -1);
EventManager.SendEvent(GameEvent.EventType.MOVE, SD);
break;
default:
break;
}
}
}
唉,暂时就这样吧,去买口罩了,虽然我没赶上SARS的重灾区,身在北京算是捡着了吧,是个运气,哈哈哈,刚刚买了一百个口罩,给爷爷奶奶分点去,走咯