Unity3D数学基础(6)_简单的MVC
来源:互联网 发布:淘宝盗图怎么修改 编辑:程序博客网 时间:2024/06/11 11:00
简单的MVC
(之前在做JavaWeb作业的学过了一下MVC,知道原理却不知道怎么使用,刚刚了解一下,做一下总结,只是一个很简单的例子而已)
大神参考(简单易懂)
简书:http://www.jianshu.com/p/acc689be52f9
1.MVC构成
2.MVC业务流程
3.例子
效果图:
主要代码:
Model(M)
using UnityEngine;using System.Collections;/*玩家模型委托*//*当用户信息改变的时候执行*/public delegate void OnValueChange(int value);public class PlayerMsgModel { #region 数据定义 /*属性*/ private int level; /*等级*/ private int expValue; /*经验值*/ private int fullExp; /*升级经验*/ private int attack; /*攻击力*/ private int defense; /*防御力*/ /*委托事件*/ public OnValueChange OnLevelChange; /*等级变化触发事件*/ public OnValueChange OnExpValueChange; /*经验值变化触发事件*/ public OnValueChange OnFullExpChange; /*升级经验变化触发事件*/ public OnValueChange OnAttackChange; /*攻击力变化触发事件*/ public OnValueChange OnDefenseChange; /*防御力变化触发事件*/ #endregion /*单例*/ private static PlayerMsgModel instance; public static PlayerMsgModel Instance { get { if (instance == null) { instance = new PlayerMsgModel(); } return instance; } } /*私有构造函数*/ private PlayerMsgModel() { } /*等级*/ public int Level { get { return level; } set { level = value; if (OnLevelChange != null) { OnLevelChange(level); } } } /*经验值*/ public int ExpValue { get { return expValue; } set { expValue = value; if (OnExpValueChange != null) { OnExpValueChange(expValue); } } } /*升级经验*/ public int FullExp { get { return fullExp; } set { fullExp = value; if (OnFullExpChange != null) { OnFullExpChange(fullExp); } } } /*攻击力*/ public int Attack { get { return attack; } set { attack = value; if (OnAttackChange != null) { OnAttackChange(attack); } } } /*防御力*/ public int Defense { get { return defense; } set { defense = value; if (OnDefenseChange != null) { OnDefenseChange(defense); } } }}View(V)
using UnityEngine;using System.Collections;using UnityEngine.UI;using System;/*V:视图*/public class PlayerMsgView : MonoBehaviour { #region 定义变量 /*这里的UI直接赋值了,不查找了*/ public Button[] buttons; /*按钮*/ public Slider slider; /*经验条*/ public Text levelText; /*等级*/ public Text attackText; /*攻击力*/ public Text defenseText; /*防御力*/ #endregion private void Start() { /*按钮处理*/ for (int i = 0; i < buttons.Length; i++) { switch (buttons[i].name) { case "Exit": /*退出*/ break; case "Exp": buttons[i].onClick.AddListener(PlayerMsgControl.Instance.OnExpUp); break; } } /*委托事件绑定*/ PlayerMsgModel.Instance.OnLevelChange += OnLevelChange; PlayerMsgModel.Instance.OnExpValueChange += OnExpValueChange; PlayerMsgModel.Instance.OnFullExpChange += OnFullExpChange; PlayerMsgModel.Instance.OnAttackChange += OnAttackChange; PlayerMsgModel.Instance.OnDefenseChange += OnDefenseChange; } /*防御力改变*/ private void OnDefenseChange(int value) { defenseText.text = value.ToString(); } /*攻击力改变*/ private void OnAttackChange(int value) { attackText.text = value.ToString(); } /*升级经验改变*/ private void OnFullExpChange(int value) { slider.value = (float)PlayerMsgModel.Instance.ExpValue / value; } /*经验值改变*/ private void OnExpValueChange(int value) { slider.value = value / (float)PlayerMsgModel.Instance.FullExp; } /*等级改变*/ private void OnLevelChange(int value) { levelText.text = value.ToString(); }}Controller(C)
using UnityEngine;using System.Collections;/*C:控制器*/public class PlayerMsgControl : MonoBehaviour{ #region 数据定义 private int expUpValue = 20; /*每次点击增加的经验值*/ #endregion /*单例*/ public static PlayerMsgControl Instance; private void Awake() { Instance = this; } private void Start() { Init(); } /*初始化数据*/ private void Init() { PlayerMsgModel.Instance.Level = 1; PlayerMsgModel.Instance.ExpValue = 0; PlayerMsgModel.Instance.FullExp = 100; PlayerMsgModel.Instance.Attack = 0; PlayerMsgModel.Instance.Defense = 0; } /*增加经验*/ public void OnExpUp() { PlayerMsgModel.Instance.ExpValue += expUpValue; /*增加经验*/ /*经验值 >= 升级经验.....可以升级了*/ if (PlayerMsgModel.Instance.ExpValue >= PlayerMsgModel.Instance.FullExp) { PlayerMsgModel.Instance.Level += 1; /*等级 + 1*/ PlayerMsgModel.Instance.ExpValue = 0; /*现有经验清零*/ PlayerMsgModel.Instance.FullExp += 200 * PlayerMsgModel.Instance.Level; /*升级经验幅度增长*/ expUpValue += 20; /*升级经验增加*/ } } /*改变攻击力*/ public void OnAttackChange(int value) { int tempValue = PlayerMsgModel.Instance.Attack + value; PlayerMsgModel.Instance.Attack = tempValue; } /*改变防御力*/ public void OnDefenseChange(int value) { int tempValue = PlayerMsgModel.Instance.Defense + value; PlayerMsgModel.Instance.Defense = tempValue; }}
GoodDrag.cs (将脚本挂在物体上面,使得物体可拖拽,在这个脚本里面实现逻辑)
using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;/*拖拽物品,脚本挂在到物品上面*/public class GoodDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{ private Transform parent; /*开始拖拽*/ public void OnBeginDrag(PointerEventData eventData) { parent = transform.parent; transform.localScale = Vector3.one; /*设置动画*/ gameObject.GetComponent<Image>().raycastTarget = false; /*关闭射线检测*/ } /*拖拽中*/ public void OnDrag(PointerEventData eventData) { transform.position = Input.mousePosition; } /*停止拖拽*/ public void OnEndDrag(PointerEventData eventData) { transform.localScale = Vector3.one * 0.8f; /*动画*/ GameObject go = eventData.pointerCurrentRaycast.gameObject; /*检测放置背景*/ if (go.tag == "K") /*放置背包空格子*/ { if (parent.tag == "E") /*装备栏 -> 背包,解除装备*/ { /*设置数据*/ int attack = 0 - GetAttack(gameObject); int defense = 0 - GetDefense(gameObject); PlayerMsgControl.Instance.OnAttackChange(attack); PlayerMsgControl.Instance.OnDefenseChange(defense); } transform.SetParent(go.transform); /*设置新的父物体*/ transform.localPosition = Vector3.zero; /*设置新位置*/ } else if (go.tag == "E") /*装备栏*/ { transform.SetParent(go.transform); transform.localPosition = Vector3.zero; if (parent.tag == "K") { /*设置攻击防御力变化*/ PlayerMsgControl.Instance.OnAttackChange(GetAttack(gameObject)); PlayerMsgControl.Instance.OnDefenseChange(GetDefense(gameObject)); } transform.SetParent(go.transform); /*设置新的父物体*/ transform.localPosition = Vector3.zero; /*设置新位置*/ } else if (go.tag == "Good") { if (parent.tag == "K") /*当前物体的父物体为背包*/ { if (go.transform.parent.tag == "K") /*背包物体 -> 背包物体*/ { /*无*/ } else if (go.transform.parent.tag == "E") /*背包物体 -> 背包物体*/ { int attackValue = GetAttack(gameObject) - GetAttack(go); int defenseValue = GetDefense(gameObject) - GetDefense(go); PlayerMsgControl.Instance.OnAttackChange(attackValue); PlayerMsgControl.Instance.OnDefenseChange(defenseValue); } } else if (parent.tag == "E") /*当前物体的父物体为装备栏*/ { if (go.transform.parent.tag == "E") /*装备栏物体 -> 装备栏物体*/ { } else if (go.transform.parent.tag == "K") /*装备栏 -> 背包物体*/ { int attackValue = GetAttack(go) - GetAttack(gameObject); int defenseValue = GetDefense(go) - GetDefense(gameObject); PlayerMsgControl.Instance.OnAttackChange(attackValue); PlayerMsgControl.Instance.OnDefenseChange(defenseValue); } } /*交换位置*/ SwapWith(go); } gameObject.GetComponent<Image>().raycastTarget = true; /*最后开启射线检测*/ } /*开始拖拽时的操作*/ private void BeginDrag() { } /*获取物体的攻击力*/ private int GetAttack(GameObject go) { string[] array = go.GetComponentInChildren<Text>().text.Split('+', '\n'); return int.Parse(array[1]); } /*获取物体的防御力*/ private int GetDefense(GameObject go) { string[] array = go.GetComponentInChildren<Text>().text.Split('+', '\n'); return int.Parse(array[3]); } /*和go交换位置*/ private void SwapWith(GameObject go) { transform.SetParent(go.transform.parent); transform.localPosition = Vector3.zero; go.transform.SetParent(parent); go.transform.localPosition = Vector3.zero; }}
阅读全文
0 0
- Unity3D数学基础(6)_简单的MVC
- Unity3D数学基础(5)_ 简单的FSM
- Unity3D数学基础(4)_ 简单的排序算法总结
- Unity3D数学基础(3)_ A*寻路算法
- Unity3D数学基础(1)
- Unity3D数学基础(2)
- Unity3D数学之向量基础
- unity3d 数学基础与数学辅助类
- unity3d 数学基础与数学辅助类
- unity3d 数学基础与数学辅助类
- unity3d 数学基础与数学辅助类
- unity3d 数学基础与数学辅助类
- unity3d 数学基础与数学辅助类
- IOS基础_ UICollectionView的简单使用
- python笔记一_简单的基础
- 【Unity3d开发基础】Mathf中的数学运算
- Unity3d 游戏数学基础 未完结
- [unity3D基础篇02]必备的3D数学基础1
- (noip 模拟 化简)<惊天大模拟>
- apache-comnons系列之commons-vfs2 学习笔记
- Apache配置文件httpd.conf详解
- KMP算法
- mysql入门(三)
- Unity3D数学基础(6)_简单的MVC
- Java多线程学习
- HashTable,位图,BloomFilter分析(简单粗暴)
- SQL之分组函数
- 啥是Storm
- Map接口详解
- Unity之UGUI脚本自动生成
- pwntools 无法在deepin 下gdb.attach的问题
- easyui-textbox设置不可用