Play Movement
1、视角:鼠标左键。按住+wasd第一视角移动。QE垂直上下
2、素材按f定位
3、选中素材按alt +右键 以小汽车为中心观看素材
4、放素材的方法:拖到Hierachy中或者拖到场景中
5、Transform组件:position三维位置,可以按reset重置为0,0,0
6、移动素材,快捷键w,拖动坐标轴。按住ctrl可以按均值移动,默认是0.25,可以修改
7、Edit->grid and shap->move
8、物体移动
函数类设置公有变量如果是public可以在unity界面中修改,private不行
9、发生碰撞需要给物体添加刚体组件Rigidbody
10、摄像机跟随
设置一个GameObject指定为小汽车,然后添加一个固定的位移,摄像机移动就是汽车当前的坐标加上位移
这样会出现摄像机抖动可以将代码写在LateUpdate中
11、play的状态中修改的所有参数在play结束会恢复为原来的数值。
Basic Gameplay
1、拖拽素材时尽量拖到Hierarchy中,不要直接拖到scene中,可能会出现悬浮的问题
2、通过调整transform中的scale可以缩放物品
3、用GetAxis获取的移动存在一个小加速的效果,它获取的数值为-1到1;GetAxisRaw只获取-1 0 1 三个值,可以快速响应
4、边界问题 先拖动任务判断一下边界值是多少,在代码中如果超过了这个边界值就给他一个新的坐标。边界值可以通过变量给出方便在unity界面中修改
5、销毁物体使用 Destroy(gameObject);先判断是否超过边界,超过了就销毁
6、发射披萨:首先将披萨设置为预设体,在任务的控制脚本中添加披萨的引用。获取键盘的输入。
通过Instantiate创建对象,需要三个参数创建的对象,起始位置,偏移量
7、碰撞消失,需要添加刚体和碰撞体,碰撞体是全都需要的,刚体只需给披萨添加。根据物品的大小调整好碰撞体的大小。给披萨添加刚体是去掉重力作用不然飞不起来。两个物品碰撞只要其中一个有刚体就行
碰撞代码
8、随机生成动物,先将创建一个空的物品,给该物品添加一个脚本。将所有动物变为预设体。通过一个GameObject的数值将这些动物引用存起来,确定位置的随机范围和随机动物种类,通过Instantiate生成。在start方法中调用InvokeRepeating方法调用随机生成方法,该方法需要三个参数调用的方法名,开始后多少秒执行,每个多少秒执行一次。相当于一个循环任务
Challenge2
主要是调bug,狗和球的引用弄反了。生成球是没有用随机数。狗的碰撞体体积过大。球和狗不会自动消失,给地方添加一个mesh Collider和tag标签。当球碰到地面时就用Degbug.log输出game over
Animation, Sound & Effects
1、背景图片 可以通过Sprite Renderer de sprite修改
2、跳跃动作
需要物理引擎刚体 ,在代码中需要创建rigidbody。调用他的api addForce。给物品一个里,这里需要添加两个参数,一个是力的大小和方向通过向量来控制,另一个力的类型使用ForceMole.Impulse相当于一个冲击力。如果不添加第二个参数,人物会跳不起来,因为只有一帧有这个力。但现在还存在降落过慢和连续按空格人物会不停往上升的问题。
3、碰撞方法
Oncollisionenter :碰撞时
OnCollisionExit:碰撞后
OnCollisionStay:碰撞中
4、解决下降慢的问题
1、可以通过exit中编辑重力的大小,但这样不方便不好调整
2、在脚本中设计一个重力的量,在运行时将重力乘以该值,但这个值不能太大,不然会跳不起来
5、解决多次跳跃的问题
在脚本中设置一个bool变量检测是否与地面发生了碰撞,如果发生了碰撞则为true,否者为false。在挑起来的一瞬间将bool变量置为false。
6、背景移动,背景到达一半时候就回到原点,这里可以通过box collider来获取背景长度的一半
7、判断碰撞的物品是什么可以通过给物品添加tag标签,然后在碰撞代码中检测碰撞体的tag标签
8、gameover后背景和障碍物停下来,在脚本中可以获取其它脚本的public变量值
9、人物动画:animator组件。在window->animator可以查看,需要跑的动作,先将run动作设为默认的动作。该动作有速度条件为0.5,所以将默认速度改为1
10、人物碰到障碍物倒下
是因为人物添加了刚体组件,所以有真实的物理作用。可以在刚体组件的constraints属性中将人物xyz轴的旋转锁定。
11、场景的移动与人物不匹配,人物的跑步动作太慢了,可以在动作界面中调整动画播放的速度
12、人物的死亡,在layers中查看death的条件,在代码中通过ani,ator去设置这些状态值
13、解决跳跃动作的位移,可以通过锁定Rigidbody中Constraints的x轴位移
14、粒子动画ParticleSystem
挂载到人物下面,组成父子关系,人物移动的时候就可以带着粒子一起移动。在任务控制类中维护两个粒子的引用,在需要的地方play或者stop。
15、背景音乐和跳跃音乐,结束音乐
监听音乐,摄像机自带一个Audio Listener。
添加音乐需要Audio Source
背景音乐添加在摄像机上,记得勾选play on Awake(开始时就播放)
Volume可以调节声音大小
动作音乐添加在任务上,先维护两个音频片段的引用。AudioClip
使用audioSource的PlayOneShot方法可以播放指定的音频同时调节声音大小
Gameplay Mechanics
1、摄像机镜头围绕中心点旋转
如果单独去调摄像机的xyz轴无法达到预期的效果。可以通过改变锚点??的方法去实现。在场景中添加一个空的物体,位置是场景的中心,将摄像机作为它的子物体,调节该物体的y轴即可。
2、球的移动
添加一个刚体组件,通过加力的形式让他滚动起来。但存在滚动过程中方向不断的改变,如果镜头移动过,不会向视角中的前方运动。
移动方向采用focal point的方向即可。通过GameObject的find通过名字获取focal point的引用。
3、获取playery引用
4、敌人球追踪
通过两个球的三维向量相减,再通过normalized进行单位化只要方向不要大小,不然会出现距离越远力越大的情况。
然后添加力
5、添加物理材质 需求弹力叠加
6、吃buff
因为buff需要碰撞,所以添加一个碰撞体,但有不能有实际的形态像一堵墙,所以需要勾选is trigger
在碰撞方法中使用
7、撞飞别人
8、buff时间问题
用协程来处理,添加一个协程,在true后开始协程,等待时间结束后置为false;
9、吃到buff后添加效果,添加一个素材调节好位置和大小,设置为不可见,但吃到buff时再显示出来。不能将该素材变为球的子物体,不然当球运动的时候,该素材会一起滚起来。所以单独来出来改变postion的值,但注意不是完全相等的有一定的差值,所以加上一个vector3
SetActive(t/f)
10、设计关卡
如果敌人掉下去,y值小于-10就销毁。然后在spawn Manager中实时监测有多少敌人,没有就生成一波新的,同时也生成一个buff。
Challenge4
1、寻找龙门 通过gamObject的find方法根据名字寻找
User Interface
1、界面是平面可以选择以2d的视角观看
2、获取组件的rigidBody
3、物体扭动
Rigidbody的AddTorque函数,需要三个参数,分别为xyz轴的扭动大小
4、物体的随机生成
首先在所有的预设体中挂一个随机位置的脚本。然后创建一个Game Manager脚本,维护所有预设体的引用,可以用数组或者列表。通过协程的方式规定等待时间生成随机的物品。
5、点击有粒子效果
用生成的方式,之前是挂载在player上用play stop。这里是挂载在预设提上所有需要生成一些粒子效果。注意先生成粒子效果再销毁物体,虽然视角是上没差别,但还是得注意顺序,以免出现问题。
6、UI
创建一个ui的canvas,在创建一个字体,将锚点设计在左上角,无论怎么样文字都会和锚点保持相对距离。
7、分数字体太短,会自动换行,可以在设置为不自动换行
不换行
换行
8、场景名和场景编号
场景名就scene,场景编号自己在set中添加然后系统会自动编号
9、游戏重新开始
首先需要创建一个button,创建在game over的字体组件下。需要在GameManager脚本中编写重新加载场景的方法,需要头文件。然后调用方法。
将脚本拖到button的指定位置,选择方法。
10、场景中的文字实时修改
需要添加头文件,Game Mange维护文字UI的引用
11、字体自动缩放