自学Unity3D系列-Hoshi酱的森林大冒险?(第二天)
前言
打算做一个场景,把常用的游戏功能都加进来。名字就叫《Hoshi酱的森林大冒险吧》...取这名字是因为游戏人物模型就叫Hoshi
游戏采用2.5D固定视角,规划是在森林打怪,最后打boss这样。没有什么情节,就是为了练手。
由于后续都会在此项目添加功能,以后标题就不添加天数了。毕竟业余且断断续续在做,时间也不好统计。
今日内容及问题点
- 新建项目:人物模型导入,地形资源导入、天空盒导入
- 新建地形:用山围起来可活动区域、加点树、给山上个岩石纹理。加点花/草什么的,这是个大工程,这边先随便搞搞......
地图太大了,一般画边缘我用top视图,种树或者细节,把人拖到视角内,根据渲染窗口来画。
-
人物动画
导入模型时,可能因为模型是早期的,动画需要修改配置后才会生效。方法:项目列表选中动画,检查器切换到页签Rig,动画类型切换为旧版,点击应用。
-
人物动作
新建脚本:HeroMove,编写代码。支持响应按键:WSAD:走路,QE:旋转视角,左Shift:切换走路/跑步 空格:跳跃。在做不同动作时,播放不同的动画。
HeroMove
using UnityEngine;
public class HeroMove : MonoBehaviour {
public float WalkSpeed = 3f;//行走速度
public float RunSpeed=9f;//奔跑速度
public float RotateSpeed = 35f;//旋转速度
private bool _isRun = false;//是否正在奔跑
void Update() {
var anim = GetComponent<Animation>();
if (Input.GetKeyDown(KeyCode.Space)) {//跳跃
GetComponent<Rigidbody>().velocity = Vector3.up * 3f;
anim.Play("Jump");
}
else {
bool isBack = false;//是否人物后退
bool isMove = false;//人物是否移动
if (Input.GetKey(KeyCode.W)) {//前进:根据是否奔跑切换不同速度
if (Input.GetKeyDown(KeyCode.LeftShift)) _isRun = !_isRun;
transform.Translate(Vector3.forward * Time.deltaTime * (_isRun ? RunSpeed : WalkSpeed));
isMove = true;
}
else if (Input.GetKey(KeyCode.S)) {//后退:不允许奔跑
transform.Translate(Vector3.back * Time.deltaTime * WalkSpeed);
isBack = true;
isMove = true;
_isRun = false;
}
if (Input.GetKey(KeyCode.A)) {//向左
transform.Translate(Vector3.left * Time.deltaTime * WalkSpeed);
isMove = true;
}
else if (Input.GetKey(KeyCode.D)) {//向右
transform.Translate(Vector3.right * Time.deltaTime * WalkSpeed);
isMove = true;
}
if (Input.GetKey(KeyCode.E)) {//右转视角
transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed);
}
else if (Input.GetKey(KeyCode.Q)) {//左转视角
transform.Rotate(Vector3.down * Time.deltaTime * RotateSpeed);
}
if (isMove && _isRun) {//移动中且跑,播放奔跑动画
anim.Play("Run");
}
else if (isMove) {//根据是否后退,播放走路或后退走路动画
anim.Play(isBack ? "Walk_back" : "Walk");
}
else {//播放闲置动画
anim.Play("Idle_A");
_isRun = false;
}
}
}
}
使用技术点
移动/旋转对象、按键检测、添加力、播放动画
经验总结
-
天空盒子要挂载在摄像机上。
-
2.5D原理:主摄像头添加到人物模型内。这样人物移动时,摄像头也会跟着移动。就是2.5D固定视角的效果。
-
导入模型时要检测动画检查器信息是否有误,存在错误,动画不会生效的。
-
UI的Canvas画布渲染模式改为:屏幕空间-覆盖,层级拉到摄像机的子级。
现有问题点
-
跳跃时,如果按着WSAD,则跳跃的动作被行走替换掉,就没有跳跃效果了。
-
地形的树貌似没有碰撞体积,人可以直接穿过。
Demo
录个动图留个念想...