玩家被攻击后的后退躲避行为,比较简单就没有特别详细解释了
基础配置
敌人或者其他物体能对人物进行攻击的(记得挂载下面的Enemy脚本,没有截图上来
人物的配置(记得挂载rigid body和collider组件
PlayerKnockBack脚本在下面展示
代码展示
PlayerKnockBack脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerKnockBack : MonoBehaviour
{
public static PlayerKnockBack instance; //单例模式
public float knockBackTimeLength = 0.5f; //后退时间长度
public float knockBackCounter = 0; //后退时间计时器
public float knockBackForce = 3f; //后退力度
public Rigidbody2D rbody;
public SpriteRenderer spriteRenderer;
private float moveX;
private void Awake()
{
instance = this;
}
private void Start()
{
rbody = GetComponent<Rigidbody2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
private void Update()
{
// 当人物不处于后退时间才可以进行左右移动的操作
if (knockBackCounter <= 0)
{
// 玩家左右移动
moveX = Input.GetAxisRaw("Horizontal");
rbody.velocity = new Vector2(moveX, 0);
//控制玩家的面向方向
if (moveX < 0)
{
spriteRenderer.flipX = true;
}
else if (moveX > 0)
{
spriteRenderer.flipX = false;
}
}
else
{
knockBackCounter -= Time.deltaTime;
if (spriteRenderer.flipX)
{
//玩家面向左边的话
rbody.velocity = new Vector2(knockBackForce, rbody.velocity.y);//给向右的速度
}
else
{
rbody.velocity = new Vector2(-knockBackForce, rbody.velocity.y);//人物面向右边,那么就给向左的速度
}
}
}
public void KnockBack()
{
knockBackCounter = knockBackTimeLength;
rbody.velocity = new Vector2(0, knockBackForce); // 这个是为了防止原来的水平速度的影响,而且给玩家一个垂直方向速度
}
}
Enemy脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Player"))
{
PlayerKnockBack.instance.KnockBack(); //playerKnockBack脚本单例模式的用处在这,可以直接调用
}
}
}