上期链接:Unity2D游戏制作入门 | 10 (之人物跳跃动画制作)-优快云博客
上期我们学习了如何让人物在空中可以播放跳跃动画,先是用混合树(Blend Tree)的方式将跳跃的四个阶段合并成一体,然后根据y轴传回速度参数来切换人物动画,不仅如此我们还使用了Any State在任何状态下我们都能进行人物动画的打断,比如我在攻击敌人但是这个时候我要跳跃来躲避敌人的攻击等。我们还修复了一点bug,如果我们下落到最低位置了一般都要完整的播放完着陆的动画才会继续播放idle(闲置)的动画,但是如果一落地我们就立马跑步,就会出现蹲着跑的情况,所以我们规定了如果X轴的速度大于了0.1我们又立马打断着陆的动画进而播放跑步的动画(就我们打断着陆动画它会立马进入idle状态,然后又因为我们速度X轴大于0.1所以我们立马进入跑步,这个瞬间还是很短的)。这期我们来制作人物的属性及伤害的计算。这部份可能没你想象的那么好理解,希望能够反复观看。
public class Character : MonoBehaviour
{
[Header("基本属性")]
public float maxHp;//最大血量
public float currentHp;//当前血量
[Header("受伤无敌")]
public float invincibleTime;//无敌时间
private float invincibleCounter;//一个计数器,内部计算即可,不需要在窗口可以看得到
public bool invincible;//为了能看见无敌,我们创建一个布尔值
private void Start()//开始游戏时,要满血
{
currentHp = maxHp;
}
private void Update()
{
if(invincible)
{
invincibleCounter-=Time.deltaTime;
if(invincibleCounter <= 0)
{
invincible = false;
}
}
}
//受到伤害
public void TakeDamage(Attack attcker)
{
if (invincible)
return;
//Debug.Log(attcker.damage);
if (currentHp - attcker.damage > 0)//血量健康才能减血
{
currentHp -= attcker.damage;//如果学过python,你会知道这行代码等于currentHp = currentHp - attcker.damage;
TriggerInvincible();
}
else
{
currentHp=0;
//触发死亡
}
}
//受伤触发无敌
private void TriggerInvincible()
{
if(!invincible)
{
invincible= true;
invincibleCounter = invincibleTime;
}
}
}
public class Attack : MonoBehaviour
{
public int damage;//攻击力
public float attackRange;//攻击范围,仅限Bee蜜蜂
public float attackRate;//攻击频率仅限Bee蜜蜂
private void OnTriggerStay2D(Collider2D other)
{
other.GetComponent<Character>()?.TakeDamage(this);//加问号处为语法唐,意思是对面身上有对应函数我才执行。
}
}
正文:
如果我们的人物只会来回跑没有互动也不行,然后我们也学习一下碰撞检测有关的内容。
首先我们先整理我们的Boar(野猪),找到野猪idle状态(还有其他状态,我们现在用不到,如run、walk)的褐色的款式(还有别的颜色),然后右边提示调节一些参数,和之前一样,漏的那一项是无压缩(把下面的Compression改为None),然后用count的方式去切割,锚点在底部。

拖拽一张到场景中,如果野猪被场景遮挡住,去到Boar下的组件的Sprite Renderer进行sorting Layer的调整即可。

现在的野猪就是一个纸片,我们需要给它添加刚体组件,将collision detection(碰撞检测)改为持续检测,然后记得冻结

最低0.47元/天 解锁文章
1636

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



