一、角色控制器
角色控制器与碰撞器相似,选择角色控制器,要先移除碰撞器。
Sloope limit:爬坡角度
Step Offset:台阶高度
Skin Width:皮肤厚度
Min Move Distance:最小移动距离
Center/Radius/height:胶囊的中心点,半径,高度值
角色控制器移动
注:角色控制器组件所在的游戏物体身上,不需要”碰撞器“和”刚体“
常用属性:isGrounded:是否在地面上
常用方法:
1->Move(Vector3 dir * Time.deltaTime) 和Transform.TransLate雷同,没有重力,需要传递的是一个方向,数值的大小影响移动,所以需要乘上”Time.deltaTime“
使用move方法时如果物体会上坡,但是物体下坡时降不到地面上。SimpleMove方法可以实现落地功能
2->SimpleMove(Vector3 dir) 会应用重力,需要传递一个速度,并且本身就是按照事件来计算的,数值大小虽然也会影响移动速度,但是不会被帧率影响,它是每秒速度,不需要乘Time.deltaTime。通常用在fixedupdate()中调用(这个方法是固定频率的帧更新)
二.射线
定义射线:Ray ray = new Ray(Vector3.zero,new Vector3(0,1,0))
定义射线检测
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){
Debug.Log(hit.controller.gameObject.name);
}
RaycastHit:射线接触碰撞体组件后,得到的碰撞信息都保存在这种类型的变量中
常用属性:hit.point:接触坐标;hit.collider:接触到的碰撞体组件;hit.distance:接触点到起点的距离
通过摄像机生成射线:从相机或者理解成屏幕中心发射一个射线,方向为鼠标的位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
案例:
这个门对象有一个关门和开门动画,而左门和右门没有动画,当点击左门或右门时需要调用父对象的动画
定义Boolean IsDoorOpen为false
三、触发器
刚体的触发(碰撞器,属性,触发属性):
工作原理:碰撞器->(碰撞选项)->触发器
游戏物体打上触发选项后,不可再加刚体组件,加上也不起作用
触发设置:
(1)两个物体都必须有”碰撞组件“
(2)被碰撞的物体的碰撞器的IsTrigger属性必须打勾
(3)施碰物体必须有刚体组件
触发方法: OnTriggerEnter(Collider other):触发进入
OnTriggerStay(Collider other):接触中
OntriggerExit(Collider other):接触结束
四、Unity动画
Unity动画的制作可以采用两种格式:
(1)使用外部软件制作动画,以FBX格式导入到Unity3d中。例如:采用3ds max制作动画并导出FBX,再导入unity中,外部动画导入U3d中后,需要剪切成片段动画,然后执行播放。
在Unity中需要进行下面设置
1->在Rig面板中
2->在Animation面板中
3->在Materials面板中
(2)作用unity自带Animation组件,制作动画。
Unity动画的控制采用”状态机“控制,在Animator中进行操作
(1)Unity中在Animation中制关键帧动画。
(2)什么是”状态机“,状态机的基本参数设置
(3)”状态“的切换,状态连线,连线切换的条件设置
步骤:
1->首先在一个文件夹中创建动画控制器和动画
2->将动画控制器加载到物体上
3->将动画拖入到Animator中
4->在Animation中编写动画