新API示例
我们在Test文件夹中新建一个场景,命名为NewAPITest。
Global事件在同文件夹内新建一个脚本,命名为GlobalEventExample
直接使用TypeEventSystem.Global获取实例
使用IOnEvent<T>泛型接口,指定监听类型,此接口会自动使用Global注册监听
使用IOnEvent<T>泛型接口,监听多个类型时,需要在<>内单独指定
可以在QFramework的OnGlobalEventExtension静态拓展声明里添加Send Event方法,不过要注意不要和CanSendEventExtension重名了
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859using UnityEngine;namespace QFrameWork.Example{ public class GlobalEventExample : Mo ...
API优化
架构提取将积累的架构合并为一个文件
打开ShootingEditor2D工程,在Assets目录下新建一个脚本,命名为QFrameWork
我们将之前积累的代码全部放进里面,(下面的代码已经修改过BindableProperty和TypeEventSystem)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815 ...
v0.0.5归档和篇章小结
归档内容v0.0.5 关卡设计初步实现
绘制地形实现
橡皮擦实现
主角绘制
关卡信息搜集、序列化
关卡存储与解析
打开之前归档用的TXT文件,将此归档内容放在里面即可
篇章小结到目前为止的编辑器开发阶段,并没有使用到架构。
什么时候用架构:
摸索阶段,等到一定规模之后或者有集成到游戏里的需求之后再使用。
边做边用,可以先进行一整个模块或者游戏的纸上设计
在平常的开发工作中,至少一半的工作量都在表现层,比如角色动画、角色控制、子弹轨迹等,这些都是表现层的逻辑和工作量,架构的重点在于数据的管理和交互上。
在实践应用篇中我们引入了Query。架构也多了些改进
关卡信息搜集、序列化及存储和解析
添加保存按钮直接在LevelEditor脚本的OnGUI代码块中添加下列代码
12345var saveButtonRect = new Rect(Screen.width - 110,Screen.height - 60, 100, 50);if (GUI.Button(saveButtonRect, "Save", mRightButtonStyle.Value)){}
我们需要保存的信息是当前场景物品的位置和名称,首先在LevelEidtor脚本内部新建一个需要保存序列化信息的类
123456class LevelItemInfo{ public string Name; public float X; public float Y;}
添加保存逻辑将保存逻辑都写入之前OnGUI代码块中
1234567891011121314151617181920212223242526272829303132333435363738394041424344var saveButtonRect = new Rec ...
绘制主角
在这一节,实现绘制主角的功能。
笔刷显示逻辑修改LevelEditor脚本,在其中新建一个枚举,用于存储笔刷类型
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556using System;using UnityEngine;namespace ShootingEditor2D{ public class LevelEditor : MonoBehaviour { //... public enum BrushType { Ground, Player } BrushType mCurrentBrushType = BrushType.Ground; //... Lazy<GUIStyle> mRightButtonStyle = ...
各种快捷键
腹灵FL980快捷键Fn组合键功能
组合键
功能
Fn+Esc
长按2秒恢复出厂
Fn+Win键
同锁住左Win和APP(IOS、MAC系统下自动解锁)
Fn+右Ctrl
切换灯光模式
Fn+右Shift
切换灯光颜色
Fn+Del
直接进入关灯模式
Fn+上下方向键
调整背光亮度,最大档最小档三个指示灯白光闪烁提示,最小档是关闭。(IOS、MAC下按F5、F6调节背光亮度)
Fn+左右方向键
调节背光变化速率
Fn+1
短按切换到蓝牙设备1,长按3s进入配对
Fn+2
短按切换到蓝牙设备2,长按3s进入配对
Fn+3
短按切换到蓝牙设备3,长按3s进入配对
Fn+4
长按3s进入2.4G配对接收器模式
Fn+Backspace
查询当前电量。只能在电池供电的模式下查询
Fn + 组合键功能(Windows、Android系统)
组合键
功能
Fn+F1
亮度-
Fn+F2
亮度+
Fn+F3
相当于Win+Tab快捷键(任务控制),使用时请注意Win键不要锁住
Fn+F4
相当于Win+E快捷键(打开我的 ...
橡皮擦实现和拖拽绘制
我们需要让我们的编辑器支持两种模式,一种是Draw模式,一种是Erase模式
添加编辑模式我们使用枚举来指定模式
修改LevelEditor脚本
123456789101112131415161718192021222324252627282930using System;using UnityEngine;namespace ShootingEditor2D{ public class LevelEditor : MonoBehaviour { public enum OperateMode { Draw, Erase } OperateMode mCurrentOperateMode; //... Lazy<GUIStyle> mModeLableStyle = new Lazy<GUIStyle>(() => { retur ...
单击绘制地块、重复检测
编辑器功能的初步实现就是要达到一个基本的使用循环,编辑——运行——编辑——运行…编辑功能就是拖拽加上一些摆放的功能,能够保存在一个文本文件里。运行功能就是将文本文件里的内容进行解析,然后运行。
鼠标高亮编辑功能拆分实现如下
摆放关卡对象
绘制地形或关卡对象
重复检测
橡皮擦
拖拽绘制
保存生成关卡文件
关卡信息搜集、序列化
我们在v0.0.5版本中只做一件事情,就是绘制地形实现。
首先新建一个场景命名为LevelEditor,然后打开这个场景,在其中新建一个空对象命名为LevelEditor,将其Transform重置一下。
然后新建一个2D Object——Sprite——Square,将其命名为EmptyHighlight,代表着高亮块,用来提示鼠标位置,将sprite的透明度设为128
然后在Scripts——ViewController——LevelEditor内部新建LevelEditor脚本
1234567891011121314151617181920using UnityEngine;namespace ShootingEditor2D{ p ...
v0.0.4归档与v0.0.5版本规划
归档内容v0.0.4 枪械系统的系统层实现
开枪
填弹
捡枪
换枪
弹药补给
补给站补给
打开之前归档用的TXT文件,将此归档内容放在里面即可
之前的v0.0.4版本规划
枪械系统:
手枪
冲锋枪
步枪
狙击枪
火箭筒
霰弹枪
不同的枪配有不同的子弹,不同的子弹有不同的射击轨迹、范围、攻击力
主角能力:
二段跳
攀墙
冲刺
主角数值:
血量
弹药量
敌人:
生命值
开枪的远程敌人
掉落弹药补给、回血
关卡:
可破坏物
陷阱
机关
回血道具
最大生命+1
终点
起始点
补给站
对话系统
角色设置剧情
系统
存档系统
关卡编辑系统
对话系统
统计系统
成就系统
背包系统
主角的Model
之前的规划过于丰富,所以暂不完全实现了。接下来我们实现关卡编辑系统,我们在v0.0.3版本中,已经确定好了关卡存储格式和解析
XML关卡制定和解析
最起码需要能够做到编辑——运行——编辑——运行。。。这样一个步骤
v0.0.5规划v0.0.5 关卡设计初步实现
绘制地形实现
橡皮擦实现
主角绘制
关卡信息搜集、序列化
关卡存储与解析
编辑器开发基础知识
编辑器工具的编写编辑器工具大致可分为脚本Inspector拓展和独立窗口两大部分,这两大部分又涉及SceneView绘制和Preview窗口绘制等。
Inspector面板拓展
参考
Unity游戏开发拓展编辑器1拓展Inspector面板
Unity游戏开发拓展编辑器2
脚本序列化 编辑器拓展
新建一个MonoBehaviour脚本,命名为Enemy_Type1
12345678using UnityEngine;public class Enemy_Type1 : MonoBehaviour{ public int hp = 100; public float speed = 300; public GameObject go;}
我们在Project窗口中按“Assets——Scripts——AG——Chapter2——EditorExtensions——Editor”结构创建一系列文件夹
在Editor文件夹内新建Enemy_Type1Inspector文件
12345678910111213141516171819202122usin ...