实现鼠标点击的交互
public class PlayerInput : MonoBehaviour
{
public float horizontalInput;
public float verticalInput;
public bool mouseDown;
// Update is called once per frame
void Update()
{ ///在游戏运行且鼠标当前未被按下的情况下,检测鼠标左键是否被用户按下,并记录这一交互状态。
if(!mouseDown&&Time.timeScale!=0 //游戏运行中,Time.timeScale等于0时,游戏时间会停止更新,此时不应该响应玩家输入
){
mouseDown=Input.GetMouseButtonDown(0);
}
horizontalInput=Input.GetAxis("Horizontal");
verticalInput=Input.GetAxis("Vertical");
//检测水平输入和垂直输入
}
/// <summary>
/// 当角色死亡(禁用)是调用OnDisable方法,关闭输入
/// </summary>
private void OnDisable() {
mouseDown=false;//清除鼠标输入
horizontalInput=0;
verticalInput=0;
}
}
状态机的初步设计
private void StateSwitchTo(CharacterState newState)
{
if(isPlayer){
playerInput.mouseDown=false;//清除鼠标输入,因为Enemy是由ai控制的,所以不需要mouseDown
}
//对于当前状态的处理
switch(currentState){
case CharacterState.Normal:
break;
case CharacterState.Attacking:
animator.SetTrigger("Attack");
break;
}
//对于新状态的处理
switch(newState){
case CharacterState.Normal:
break;
case CharacterState.Attacking:
animator.SetTrigger("Attack");
if(isPlayer)
attackStartTime=Time.time;//记录角色攻击开始时间的时间点
if(!isPlayer){
Quaternion newRotition=Quaternion.LookRotation(playerTarget.transform.position-transform.position);//计算角色的朝向
transform.rotation=newRotition;
}
break;
}