Skip to content

develop KnockBack

Yoo Hyeokjin edited this page Jun 27, 2023 · 8 revisions

KnockBack

목차

설명

  • Enemy가 Player 무기에 피격시 뒤로 넉백이 되도록 하는 Script

Script

Enemy 체력에 직접적으로 접근해야 하기 때문에 Enemy.cs에 생성한다.

TakeDamage Method

  • Enemy가 Damage를 입는 함수
  • Coroutine 사용
public void TakeDamage(float damage, int weaponIndex) // 적이 damage를 입는 함수
{
    mHealth -= damage; // Enemy의 체력에서 damage를 뺀다.
    GameManager.instance.WeaponDamage[weaponIndex] += damage; // GameManager에 저장된 Weapon당 Damage를 저장하는 변수에 해당 Damage를 저장한다.

    if (mHealth > 0) // 체력이 남았다면
    {
        StartCoroutine(KnockBack()); // 넉백을 실행시킨다.
        mAnim.SetTrigger("Hit"); // Hit Animation을 Set한다.
        Debug.Log("Hit");
        if(weaponIndex == 6) // 맞는 무기가 Gralic이라면 넉백 수치를 증가시킨다.
        {
            if(mKnockbackpower < 3) // 넉백 수치가 3이하면
            {
                mKnockbackpower++; // 넉백 수치를 증가시킨다.
            }
        }
    }
    else // 체력이 없다. 즉 죽었다면
    {
        mbLive = false;
        mColl.enabled = false;
        mRb.simulated = false;
        mSpriter.sortingOrder = 1;
        mAnim.SetBool("Dead", true);
        GameManager.instance.Kill++; // GameManager에 저장된 Kill수를 증가시킨다.
        Dead();
        GameManager.instance.KillCount[weaponIndex]++; // GameManager에 저장된 Wepaon당 Kill수를 증가시킨다.
    }
}

KnockBack Method

  • Player의 반대 방향으로 넉백되는 함수
  • Coroutine 사용
  • GameManager에 저장된 변수를 Update한다.
  • Rigidbody2D에 Addforce 사용
private IEnumerator KnockBack() // 피격시 Enemy가 살아있다면 KnockBack 하라.
{
    yield return mWait; // mWait는 new WaitForFixedUpdate()이기에 FixedUpdate() 이후에 다음에 밑에 함수를 실행한다.
    Vector3 playerPos = GameManager.instance.Player.transform.position; // Player의 현재 위치를 저장
    Vector3 dirVec = transform.position - playerPos; // Enemy의 위치에서 Player의 위치를 빼서 Player 반대 방향으로 Vector3를 저장한다.
    mRb.AddForce(dirVec.normalized * (3 + mKnockbackpower), ForceMode2D.Impulse); // Rigidbody2D에서 AddForce로 힘을 준다.
}
Clone this wiki locally