从官网下载工程项目:
https://assetstore.unity.com/packages/essentials/tutorial-projects/survival-shooter-tutorial-40756

新建Sense:Level01
把prefabs文件夹中的Environment和Lights拖到Hierarchy里。
我们需要Camera来观察Sense,由于地面有各种物体,camera到地面的射线并不一致,为方便处理,我们新建一个Quad平面:floor

我们只需要Floor的轮廓,所以把它设为不可见的:删除Mesh Renderer


把Layer设置为Floor:

添加音乐效果
Create empty GameObject


选择background music

设置音量大小和循环播放:

添加Player
在Models/Characters文件夹
并设置Player的Tag


可以看到,Player有三个状态,对应三个Animation:Move,Idle,Death
我们要创建Animator Controller来建立状态机,命名为PlayerAC,并把PlayerAC拖到Hierarchy的Player里


打开PlayerAC,并把三种状态拖进PlayerAC,把Idle设为默认状态:

添加Parameter来控制状态转换:
1.bool IsWalking
2.Trigger Die
(Trigger 类型同样有true和false两个值,不同的是Trigger只触发一次,Trigger变为true后马上变回false)

Make transition:
设置转换条件(Condition):

任何状态都可能死亡,所以我们把Any State 转向Death

给Player添加一个Rigidbody,使其能够进行物理碰撞Physics.


固定y轴,使Player只在xz平面运动,同时固定x和z的旋转,只能绕y轴转(注意y轴朝上!)
为Player添加Capsule,进行碰撞检测

为Player添加Script:PlayerMovement.cs
public class PlayerMovement : MonoBehaviour
{
public float speed=6f;
private Rigidbody PlayerRigidbody;
Animator anim;
int floorMask;//
float camRayLength;
void Awake()//与Start类似,但Awake无论Script是否禁用都可以被调用
{
floorMask = LayerMask.GetMask("Floor");
anim = GetComponent<Animator>();
PlayerRigidbody = GetComponent<Rigidbody>();
}
void FixedUpdate()//每次物理更新时调用
{
float moveHorizontal = Input.GetAxisRaw("Horizontal");//GetAxis范围从-1~1, GetAxisRaw只取-1,0,1
float moveVertical = Input.GetAxisRaw("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
PlayerRigidbody.AddForce(speed * movement);
}
}
float moveHorizontal = Input.GetAxisRaw("Horizontal");//GetAxis范围从-1~1, GetAxisRaw只取-1,0,1
float moveVertical = Input.GetAxisRaw("Vertical");
注意:
"Horizontal","Vertical"都是Unity默认设置的
可以在Unity中查看:


Vertical对应S,W按键,Horizontal对应A,D按键
本文详细介绍了如何使用Unity从官方网站下载工程项目,并逐步设置游戏环境,包括层级、光照、音乐、玩家角色及其动画状态机,以及如何添加物理碰撞和编写玩家移动脚本。
1万+

被折叠的 条评论
为什么被折叠?



