-
Notifications
You must be signed in to change notification settings - Fork 2
develop KnockBack
Yoo Hyeokjin edited this page Jun 27, 2023
·
8 revisions
- Enemy가 Player 무기에 피격시 뒤로 넉백이 되도록 하는 Script
Enemy 체력에 직접적으로 접근해야 하기 때문에 Enemy.cs에 생성한다.
- 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수를 증가시킨다.
}
}
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로 힘을 준다.
}