Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )

上期链接:Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)-CSDN博客

上期我们聊了人物的受伤和死亡的逻辑和动画,我们主要学习了事件的执行,即我们在人物受伤时可能会触发很多的事件,比如触发人物受伤的动画以及播放音乐等(可以是人物受伤时发出的声音),然后我们要使用了覆盖和叠层的概念,关键是多重事件的注册。这期我们来看看人物的三段攻击动画的执行。下方代码:

c# 复制代码
//Player_control.cs
//只是更新加入的代码,具体更多代码请看前边的内容
    private PlayerAnimations playeranimation;
	public bool isAttack;
...
    private void Awake()
    {inputControl.GamePlayer.Attack.started += PlayerAttack;//按J键进行人物的攻击
    }
...
    private void PlayerAttack(InputAction.CallbackContext obj)
    {
        playeranimation.PlayerAttack();
        isAttack = true;
    }
c# 复制代码
//PlayerAnimations.cs

	public void SetAnimatons()//需要做很多动画的切换,我们用这个函数来执行所有的动画切换。
    {
        ...
        anim.SetBool("isAttack",playercon.isAttack);
    }
	public void PlayerAttack()
    {
        anim.SetTrigger("attack");

正文:

​ 为了实现我们的人物攻击,我们需要先看看人物动作的guid。有两端攻击,前六张为第一段攻击,第二段有两张,其实在人物第二张素材中还要一个第三段的攻击那是暴击。

​ 我们在管理人物动画的文件下创建三段攻击的动画buleAttack1、2、3,根据之前的操作,快速添加动画的素材。

​ 我们先在Animator中删除我们刚刚创建的三段动画,然后我又需要创建的图层动画。我们记得把我们的权重也设置为1。

​ 我们创建一个新的空的state,然后把刚刚创建好的三段攻击的动画添加进去,那么我们想进行三段的攻击,我们就必须要一个进入攻击状态的标志,所有我们需要创建一个bool值,取名为isAttack。

​ 然后我们还需要添加一个触发的判断,就是说我们每次点按后都触发下一次的攻击状态,所以还需要创建新的判断为isTrrigger。然后攻击1到2,2到3的右侧条件都是一样的,按键要按下才能触发。

​ 然后如果在攻击1的动画播放90%后还没按下我们就会退出攻击的状态,即我们会刷新我们的攻击,那么我们下一次攻击时就会重新开始,下面的三条箭头表示,我们在该状态下如果不按下攻击切换到下一的攻击状态我们就需要退出我们的攻击动画了。这就相当于我们攻击时要连续按键,不然在某阶段的攻击状态下我们就需要退出攻击状态,其实这也很符合我们的直觉。

​ 然后我们需要去到我们按键的地方去添加新的攻击的按键,我们添加新的按键J键即可。

​ 我们现在就可以通过代码对按键进行一个链接了。打开人物控制的代码(组件),然后我们在Jump按键绑定事件下添加新的函数人物攻击

c# 复制代码
inputControl.GamePlayer.Attack.started += PlayerAttack;//这条是在Awake函数中初始化的
.....
private void PlayerAttack(InputAction.CallbackContext obj)
    {

    }

​ 我们还需要再人物动画创建新的动画切换功能的函数:

c# 复制代码
public void PlayerAttack()
    {
        anim.SetTrigger("attack");
    }

​ 然后我们在人物控制的代码中,我们获取人物动画的组件权限,当我们按下攻击的按键时,我们就执行触发上面的代码,即让attack触发启动。==因为我们刚刚还添加别的触发的条件,所以还需要在人物控制代码的上头创建新的变量为bool类型isAttack。==所以代码最后变成了:

c# 复制代码
private void PlayerAttack(InputAction.CallbackContext obj)
    {
        playeranimation.PlayerAttack();
        isAttack = true;
    }

​ 接下来我们进行攻击测试,如果你的人物攻击第一下比较有延迟,记得在人物攻击的图层触发的动画的State进入Attack1时直接改为不用等待直接播放即可,就是说没有等待只要满足条件我们直接进入。然后我们需要每次在退出攻击状态后,不管你是在那个阶段退出的攻击动画,我们都需要改变人物isAttack的状态,就是我们需要更新人物的攻击状态。所以我们只需在攻击的状态下创建代码,在该动画播放完成后我们就进行一个状态的更新即可。

c# 复制代码
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        animator.GetComponent<Player_control>().isAttack = false;
    }

总结:

​ 我们这期聊了如何实现人物的三段攻击。这期的话就是一个动画的创建,然后设定进入和退出的条件设置,然后创建参数,再在代码中链接起来即可,因为按键绑定了攻击,所以按下攻击按键我们使用注册事件的方式进行触发器的启动和改变人物的攻击状态为true,再在人物攻击动漫播放完毕后我们再次人物的攻击状态。

未尽事宜以后可能会补充。

---------------------结束线

相关推荐
齐 飞3 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
丫头,冲鸭!!!36 分钟前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
听忆.1 小时前
手机屏幕上进行OCR识别方案
笔记
Selina K2 小时前
shell脚本知识点记录
笔记·shell
2 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
霍格沃兹测试开发学社测试人社区2 小时前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
幸运超级加倍~3 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
charon87783 小时前
UE ARPG | 虚幻引擎战斗系统
游戏引擎
王俊山IT3 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Yawesh_best4 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作