Unity 3D RPG游戏的设计与实现

文章详细描述了在Unity游戏开发中如何使用PlayerInput类实现鼠标点击交互,以及状态机设计来管理角色的正常、攻击状态切换,包括玩家和敌人的攻击动画、移动逻辑和特效的触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现鼠标点击的交互

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;

    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值