subshader语义块
Tags
subshader语义块
Tags
unity属性类型
Int
float
Range(x,y):范围值
Color
Vector (x,y,z,w)
2D
Cube
3D
应用阶段-几何阶段-光栅化阶段
cpu应用阶段:
GameManager(单例)
PlayerManager 作为GameManager中的成员变量,记录玩家信息。作为Gamemanager中的成员变量
AudioSourceManager 记录音效、音乐的信息
FactoryManager 有很多游戏
下面有个根据已有的任务创建新任务的选项
单个数值的变化,用委托的方式更加合适。比如,金币,分数,等级等。
颗粒度较大的用事件比较合适。比如从服务器拉取了一个任务列表数据,任务数据列表存到了model,此时model的任务列表发生了变更,这个时候向view发送事件
Model和View是自底向上的关系
很神奇,Application.dataPath + "/../Version"最后还要加个斜杠才能正确打开目标目录
直接看代码效率还高些,听老师讲太犯困了,没有图示啥的就不停地敲代码
缺乏一个判定值会导致报错但不会有影响。
应该在判断X跟Y在正常范围值那段里再加上判断i与j是否在正常范围值,要不然在边缘的数字元素上按下鼠标中键会提示错误。
实在没理解啊,好难
交互逻辑:View->Model
表现逻辑:Model->View
子节点通知父节点用委托或者事件
父节点调用子节点可以直接方法调用
跨模块通信 用事件
耦合就是双向引用或者循环引用
静态类不能继承
protobuf 把对象转换成数据,数据来做传输
可以用于客户端和服务端数据传输。
加个目标类型的枚举好理解一些
敌人攻击掉血方法:
1、看向目标
2、如果敌人血量下降少于0,则调用角色死亡方法
1、默认持续生成新的敌人:在Start中调用InvokeRepeating方法
2、在Update中检查敌人数量是否达到上限:
如果isSpawning为true,且敌人数量达到上限,达到则CancelInvoke(); 并将isSpawning= false;
随机生成敌人,并赋值位置
生成特效并生成位置
1、攻击方法优化:目标移动追赶判定,意思是攻击过程中目标位置可能再次移动超出角色攻击范围,需要停止攻击并重启导航方法
如果攻击目标不为建筑,判断currentTarget是否为空。如果不为空,则将目标位置设置为当前目标位置。
- 如果目标位置和角色位置距离大于攻击距离,重启导航系统,meshAgent. isStopped = false,停止攻击动画。
如果目标超出跟踪范围(约为攻击范围2倍),则目标丢失,重置状态ResetState
- 如果在攻击范围内,持续攻击
1、补充寻找目标的方法
如果目标不是角色,也不是塔,则默认设置目标为塔。
如果目标不是角色,但是是塔,则同时搜索附近的角色,如果有则将目标更新为角色
如果目标是角色:
判断目标是否为空(安全校验),如果不为空,将目标赋值为Target位置。
如果目标不存在,否则判定目标已死,重置状态。
1、搜索敌人方法
在GameManager中创建所有敌人的列表List<Character> playerCharacters和List<Enemy> enemyCharacters的列表
GameManager中创建Character时,同时将角色添加到列表:
playerCharacters.Add(go.GetComponent<Character>());
遍历角色,看是否在攻击范围之内
Vector3.Distance()