叉乘结果相当于三阶行列式结果:如下
i, j, k
x1,y1,z1
x2,y2,z2
叉乘结果相当于三阶行列式结果:如下
i, j, k
x1,y1,z1
x2,y2,z2
变换物体和变换坐标系来旋转物体的区别
叉乘意义,判断三角面片的朝向;
每多一个pass通道DrawCall就会多一次
将模型坐标转换到齐次裁剪坐标的函数:
unityobjectToClipPos(v.vertex);
设相机size = x,则 2x/图片的单位宽 = 屏高 / 屏宽
lightmap 灯光烘焙 , 静态场景的lightmap settings 下面的 scale in lightmap 就是烘焙的权重, 0-1, 次要选择0.2
light设置下,
light resolution 是光的分辨率 烘焙影响很大
lightmap resolution 是形成的贴图的分辨率, 烘焙 影响很大
final gether 是贴图连接处的平滑度,
directional mode 是光作用于贴图的法线, 决定立体感。
开启全局光照烘焙, 设置减性substractive , 就是动态用实时光照, 其他全部烘焙。
fog雾的效果, 不在场景内, 是摄像机 , 参数为距离摄像机的 开始距离结束距离。
烘焙出来的文件就是在当前场景的文件夹
AudioListener 只需要一个 并且不能销毁, 放在管理物体,
血条: 作为UI ,血条子物体包括 伤害,闪避暴击等,
伤害跳跃框, 不需要tips那样的队列取出 , 因为可能伤害吸收很快, 动画结束了还在跳伤害就很奇怪, 所以新受到伤害, 直接停止旧的动画,重新播放新的。
关闭动画, animation.stop(); 播放 .play();
血条管理, Camera.main.WorldToScreenpoint( vec 3); 获取的是一个点,怪物头顶的HPROOT,可以解决偏移 。 血条是RectTrans 还需要按点变换 rect, 再修改一个比例适配, 标准比例 和屏幕高度的比例 ,
灰条: 血条缓冲 , 红条实时计算, 灰条不计算,只根据是否等于红条来update 填充, 根据time.deltatime +-,
技能CD: 按下A,{如果技能非CD则使用技能且变CD状态, 如果技能在CD则输出正在冷却} , 然后每秒判断,如果正在冷却且冷却倒数大于eltatime, 则-=deltatime, 如果小等于deltatime,则判断冷却完毕变非CD,
封装成一个方法, 后续要添加新的技能按键就直接加一个方法, 很简单 。
if(input.A) {
if(A非冷却) 释放A,变冷却;
else
输出A在冷却;
if(A在冷却&&倒数大于0.02)
倒数-=0.02
else
A改为非冷却
}
封装成一个方法 参数为按键和UI图片, 后续要添加新的技能按键就直接加一个方法, 不需要在内部添加 ,
刚学完灯光与渲染,然后跳过来学设计模式,学到54课时,感觉学的好吃力。
里氏替换原则:所有引用基类(父类)的地方必须能透明地使用其自雷的
依赖倒转原则
高层模块不应该依赖低层模块,它们都应该依赖抽象(接口或抽象类),抽象不应该依赖于细节,细节应该依赖于抽象。
要针对接口编程,而不针对于实现编程。
代码中使用抽象类,而将具体类放在配置文件中
类之间的耦合:1零耦合关系2具体耦合关系3抽象耦合关系
依赖倒转原则要求客户端依赖于抽象耦合,以抽象模式耦合是依赖倒转原则的关键。
面向对象设计中原则:
单一职责原则
开-闭原则
里氏替换原则
依赖倒置原则
接口倒置原则
最少知识原则(迪米特法则)
少用继承多用组合(合成复用)
IBaseRescrousFactory
IBaseFactory
BaseFactory
GameFactory
UIFactory
UIPanelFactory
AudioClipFactory
Runtime AnimatorControllerFactory
FactoryType
SpriteFactory
normalModeSceneState
BossModeSceneState
MonsterNestSceneState
IBaseSceneState
EnterScene();
ExitScene();
BaseSceneState
StartLoadScene
ManiSceneState
BossGameOptionSceneState
NormalGameOptionSceneState
lambda 表达式 =()=>{ } 转为符号, 不需要添加一个新的方法名, 直接转为新内容
=() 内为参数, =>{ } 为转为的方法内容, 对应参数如何使用
UI自适应, canvas 设置根据screen size 调整, 而不是pixel像素调整, 然后1280*720作为基础, 然后设置匹配长宽各0.5, 不会出现所有UI 同行或同列 , 如是1则会同行
为了适应各种不同的屏幕 game视角应该作为free aspect 或者1280,720也行因为常用 ,然后根据free aspect 来调整UI的锚点, 注意是父物体, 左下角的锚点设置为左下角, 右上角就对准右上角锚点, 如果是中心的则对准中心锚点, 这样做的好处是, UI不会超出屏幕, 都会显示,
异步加载场景: UI 根节点调用如下, 1加载页面true , 2异步加载, 3. 获得progress进度, 赋值百分比
进度条右边的闪光动画位置,为进度条总长度乘进度比例,从最左端开始要减去长度一半 。需在update 调用 。
progress进度: AsyncOperation ao=SceneManager.LoadSceneAsync('');
float value=ao.progress;
UI管理: 需要一个UI根节点,下设UI分节点,下设各个分节点管理的功能, 层次明显,功能独立
异步加载场景: UI 根节点调用如下, 1加载页面true , 2异步加载,