Unity2d 人物受到攻击后退

玩家被攻击后的后退躲避行为,比较简单就没有特别详细解释了

基础配置

敌人或者其他物体能对人物进行攻击的(记得挂载下面的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脚本单例模式的用处在这,可以直接调用
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值