unity周学习总结

、发现状态机、了解状态机

实现人物受伤后会被击退

isHurt用于标记人物是否受到伤害:

详详细解释:

但是在实际测试中我们发现了这个isHurt一旦被设置成了true,在角色被击退后就无法再回到false状态,从而导致角色一直被击退直到碰到墙体或掉出地图

isHurt解除true状态的办法

首先找到animator,找到我们受伤的动画的状态:

在右侧的Inspector中选择Add Behaviour,自定义类名HurtAnimation

然后他会自动生成一个代码,打开此代码:

在动画退出时刻,将isHurt设置为false就可以解决此问题(注意,打开代码后,里面的东西都是被注释掉的,想用的话取消注释即可)

状态机:

单次播放动画设置

如果你连接到了any state中的话想进行单词播放动画的设置就这么操作,没有连接到any state的不用这么操作

取消勾选就行

通过代码订阅事件的方式

想为一个事件添加一个监听器使用+=符号,移除监听器使用-=

inputControl.GamePlay.Attack.started += PlayerAttack;

inputControl.GamePlay.Attack.started -= PlayerAttack;

问:你再详细讲讲通过代码订阅了事件,还是拿上面给的进行说明,就是我那这个GetHurt函数订阅了OnTakeDamage,那OnTakeDamage发生的时候就会调用我的GetHurt吗?那订阅是在哪里进行订阅呢?在哪里取消?

在Unity中,通过代码订阅事件是一种常见的做法,它允许你在运行时动态绑定事件处理器。这给了你更多的灵活性,因为你可以根据需要添加或移除事件监听器。以下是如何在代码中进行订阅和取消订阅的详细步骤:

订阅事件

通常,你会在组件的生命周期方法中订阅事件,如 Awake, Start, 或者 OnEnable。这些方法是在组件初始化的时候被调用的,因此它们是绑定事件监听器的好地方。

void OnEnable() { // 假设你已经获取了Character组件的引用 character.OnTakeDamage.AddListener(GetHurt); }

在上述代码中,OnTakeDamage 是一个 UnityEvent 类型的事件。使用 AddListener 方法,你可以将 GetHurt 方法添加为这个事件的监听器。当 OnTakeDamage 事件被触发时,GetHurt 方法会被调用。

一个事件是可以被多个函数订阅的

要注意的是,当事件被触发时,订阅的方法将按照它们被添加到事件的顺序依次被调用。如果其中一个方法在执行时抛出了异常,它将阻止后续的方法被调用,所以建议在事件处理方法中进行适当的异常处理。

协程Coroutine

协程(Coroutine)是一种特殊的方法,它允许执行能够暂停和继续的代码,而不会阻塞游戏的主线程。协程对于实现延迟操作、时间控制行为或执行需要跨多个帧的任务非常有用。

协程的工作原理是通过 IEnumerator 接口,这允许函数在某一点“暂停”,并在下一个帧或指定的时间后“继续”执行。在 Unity 中,协程通常与 yield 语句一起使用,它指示何时暂停协程的执行。

定义协程:协程是一个返回 IEnumerator 类型的方法。

在 Unity 中,Update 方法和协程是并行执行的,它们各自独立于 Unity 的游戏循环中。

Update 方法:它是 Unity 生命周期的一部分,每一帧都会调用一次。它主要用于处理帧依赖的逻辑,如玩家输入和快速更新。

协程不是多线程。它们在 Unity 的主线程上“异步”运行。

image.png

image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值