北京 营销型网站,备案的网站建设书是什么,深圳网络营销推广公司,wordpress 抓取文章首先我们打开一个项目 在这个初始界面我们需要做一些准备工作
创建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色
#xff08;个人喜好#xff09;调节渐变色 可更改同种颜色的色调 #xff08;个人喜好#xff09; 调节天空盒 准备工作做完后 接下我们做【…首先我们打开一个项目 在这个初始界面我们需要做一些准备工作
创建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色
个人喜好调节渐变色 可更改同种颜色的色调 个人喜好 调节天空盒 准备工作做完后 接下我们做【包装器模式】
现在我对包装器模式说一下自己的理解
包装器模式 又称 适配者模式 不管是哪个名字都是这个模式下的一个扮演角色
我更喜欢称这个模式为包装器模式 。
包装器模式是一种 结构型 设计模式它能使接口不兼容的对象能够相互合作。
使接口不兼容的对象能够相互合作 就是这个模式最大的特点
我举个例子 圆孔耳机 插不进去 方口手机 但是只需要一个 圆口转方口的转换器 就可以听音乐了
所以说包装器 一共有三个类
【适配者类】 相当于 圆孔耳机
【可抽象包装器类】 相当于 转换器
【目标类】 相当于 方口手机
最后我们通过Main继承MoNo挂载在脚本上调用即可
任务按Q键实现 红色方块下落 到黑色木板上 黑色木板数值减少 红色模板数值增加
解释不同颜色代表不同接口 红色方块 通过 黑色转换器 将数值传递给 没接触的红色木板
说一下完成任务的整体思路
1.Main类 2.包装器类 3.适配者类 4.目标类 即完成了红色方块 落在黑色模板上 也可以使红色模板数值增加
在实现代码前我们需要在unity场景中做几个预制体方便我们运行后自动生成 给小方块添加一个重力 使其掉落在黑色木板上 测试一下 接下来我们改名字为
红色方块 适配者 Adaptor
黑色木板 包装器 Wrapper 红色木板 目标类 Target 创建UI-Text显示数值 将Canvas下的Text改成AdaptorText 调Canvas的世界坐标方便我们调节他的长度和高度 调整后随便输入个数值 如果发现数值看不清就需要调节Canvas的清晰度 ctrl d复制一个Canvas 将另一个的子类改名TargetText 将子类是AdaptorText的Canvas放在Wrapper包装器类作为Wrapper的子类
将子类是TargetText的Canvas放在Target目标类作为Target的子类 做好后将这个三物体放进预制体包 并在场景中删除
实现
1.【适配者Adaptor类】 using UnityEngine; public class Adaptor { //1.封装 适配者类 public float StoneNum { get; set; } 100000f;//总体能量 public float CurrentStoneNum { get; set; }//储存能量 public string Energy { get; set; } 魔法能量; private GameObject _modelObj;//模型 public GameObject PrefabObj;//预制体引用 public Adaptor(float energy){ StoneNum energy; CurrentStoneNum energy; if (_modelObj null) _modelObj Resources.Load(Prefabs/Adaptor) as GameObject; if (PrefabObj null) PrefabObj GameObject.Instantiate(_modelObj, new Vector3(0f, 20f, 0f), Quaternion.identity); } //2.减少能量函数 //减少目标能量 public float Reduce(float num){ if (CurrentStoneNum num) CurrentStoneNum - num; else CurrentStoneNum 0; return StoneNum - CurrentStoneNum;//已经抽取的能量数量 } } 2.【包装器类】 using UnityEngine; using UnityEngine.UI; public class Wrapper{ //1.封装 包装器 private Adaptor _adaptor;//魔法能量晶石引用 private Target _target;//能量水晶版引用 private const float convert 10f;//能量转换比率 private GameObject _modelObj;//模型 public GameObject PrefabObj;//预制体引用 private Text _TargetText;//显示能量文本 public Wrapper(Adaptor adaptor, Target target){ _adaptor adaptor; _target target; _modelObj Resources.Load(Prefabs/Wrapper) as GameObject; if (_modelObj ! null){ PrefabObj GameObject.Instantiate(_modelObj, new Vector3(0f, 5f, 0f), Quaternion.identity); if (PrefabObj ! null){ _TargetText PrefabObj.transform.Find(Canvas/AdaptorText).GetComponentText(); Debug.Log(_TargetText); _TargetText.text adaptor.CurrentStoneNum.ToString(); } } } //2.显示当前适配者数值 public void ShowAdaptorlCurrentNum(){ //显示能量石存储的能量值 if (_TargetText ! null) _TargetText.text _adaptor.CurrentStoneNum.ToString(); } //3.转换函数接收主函数协程函数每0.2秒传递的数值 //并且通过每0.2接收的数值让适配者逐渐减少 //再通过将减少的数值传递给目标类使其增加 //转换方法 public void ConvertEnergy(float num){ //抽取魔法能量 float extractedMagicenergy _adaptor.Reduce(num); //转换成电力能量 float convertElectricEnergy extractedMagicenergy * convert; //存储到水晶板中 _target.Increase(convertElectricEnergy); ShowAdaptorlCurrentNum(); } } 3.【目标类】 using UnityEngine; using UnityEngine.UI; public class Target { //1.封装 目标类 public float Stone1Num { get; set; } 100000f;//总体能量 public float CurrentStone1Num { get; set; }//储存能量 //能量属性 public string Energy1 { get; set; } 电力能量; private GameObject _modelObj;//模型 public GameObject PrefabObj;//预制体引用 private Text _TargetText;//显示能量文本 public Target(float energy1, float energy){ Stone1Num energy1; CurrentStone1Num energy; _modelObj Resources.Load(Prefabs/Target) as GameObject; if (_modelObj ! null){ PrefabObj GameObject.Instantiate(_modelObj, new Vector3(20f, 5f, 0f), Quaternion.identity); //查找UI文本 if (PrefabObj ! null){ _TargetText PrefabObj.transform.Find(Canvas/TargetText).GetComponentText(); Debug.Log(_TargetText); } if (_TargetText ! null) _TargetText.text CurrentStone1Num.ToString(); } } //2.增加能量函数 //增加目标能量 public void Increase(float num){ //存储没能量的计算逻辑 CurrentStone1Num num; if (CurrentStone1Num Stone1Num) CurrentStone1Num Stone1Num;//确保不超过最大值 //显示电力值文本 _TargetText.text CurrentStone1Num.ToString(); } } 4.【控制挂载类】 using System.Collections; using UnityEngine; public class Main : MonoBehaviour{ Wrapper _wrapper; Adaptor _adaptor; Target _target; void Start(){ //实例化运行即创建三个物体 //【适配者】黑色方块 【包装器】转换器 【目标类】红色方块 _adaptor new Adaptor(500f); //能量水晶板 _target new Target(5000000f, 50f); //能量水晶板 _wrapper new Wrapper(_adaptor, _target); //_wrapper.ConvertEnergy(30f); } //协程函数通过协程完成每0.2秒钟 传递给 包装器类一个数值 private IEnumerator ConverEnergyRoutine() { while (_adaptor.CurrentStoneNum 0) { _wrapper.ConvertEnergy(1f); yield return new WaitForSeconds(0.2f); } } void Update(){ //按Q键开启协程函数 if (Input.GetKeyDown(KeyCode.Q)) StartCoroutine(ConverEnergyRoutine()); } } 最后回到unity场景中创建一个空物体起名为Obj 运行后 按Q键