本日目标

导入相关资源,把第一关的场景初步搭建起来
角色移动相关
摄像机跟随
使模型带有碰撞

实现

1 .先用上一个场景中的桥,复制一个连接起来,使其变成一个更长的桥,编为预制体。

2.拖入角色,由于游戏中默认应该是奔跑动画,导入之前要重新设置一下animation,在walking之后添加一个running动画,在整个动画中找到对应的跑步动画帧截取下来。点击apply。

unity3d 跑酷游戏 unity3d跑酷游戏教程视频_划水


3.然后需要让角色能往前跑,这个大家应该都很熟悉了

public float FloRunningSpeed=1f;//奔跑速度定义
//update
this.transform.Translate(Vector3.forward * FloRunningSpeed);

定义变量尽量用匈牙利命名,这样比较清楚一个变量的信息
4.我们再给角色增加左右移动的功能,用rotate来实现

public float FloRotateSpeed = 1f;
//转向速度定义
 if(Input.GetKey(KeyCode.A))
 {
        this.transform.Rotate(Vector3.down * FloRotateSpeed);
 }
 else if(Input.GetKey(KeyCode.D))
 {
        this.transform.Rotate(Vector3.up * FloRotateSpeed);
 }
 //注意down和up都是指局部坐标系

这样角色就可以左右移动了,接下来来设置跟随主角移动的摄像机。老版本的unity标准库中附带了javascript的脚本smooth follow来控制摄像机平滑跟随,但新版本早已不支持javascript,只能将其翻译为c#来实现。这里选择自己来写一次
定义部分:

public Transform target;//获得跟随目标
    public float distance = 10.0f;//离目标的距离
    public float height = 5.0f;//高度
    public float heightDamping = 2.0f;//高度平滑下降
    public float rotationDamping = 3.0f;//一个小转角变化

实现部分:

float wantedRotationAngle = target.eulerAngles.y;
float wantedHeight = target.position.y + height;
float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;
//计算出目前的rotation对应角度
 
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
//高度,角度调整

Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
//转换回rotation

transform.position = target.position;
transform.position -= currentRotation * Vector3.forward * distance;
transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
transform.LookAt(target);
//定位摄像机,使其一直指向目标

如此,摄像机的设置就完成了

接下来导入一些其他的资源,如障碍物,可捡起的奖励物等…

注意建好对应的文件夹,设置好比例尺

unity3d 跑酷游戏 unity3d跑酷游戏教程视频_Unity3D_02


然后为障碍物,地面和人物添加碰撞体。直接将大桥全部设为碰撞体会非常消耗运行时的内存,选择创建一个plane,调整其位置使其与桥的路面平齐,把plane的mesh renderer组件的勾去掉,使其不进行材质渲染。然后为障碍物添加box collider组件,调整好box的大小,使其大约能刚好包含整个模型,对人物的设置亦是如此。这样场景就带有物理效果了。今天又要约饭,溜了溜了,明天来添加开始游戏时的协程以及碰撞检测。附上一些脚本代码:

unity3d 跑酷游戏 unity3d跑酷游戏教程视频_游戏制作_03

unity3d 跑酷游戏 unity3d跑酷游戏教程视频_Unity3D_04