게임개발/언데드서바이벌_골드메탈_클론코딩

[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 9 (타격감🌟있는 몬스터 처치 만들기)

2023. 5. 6. 19:47

https://www.youtube.com/watch?v=JRaIlTEmvHY&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=12&t=46s 


1. 피격 리액션

 Enemy.cs > OnTriggerEnter2D

몬스터 애니메이터의 피격 상태는 Hit Trigger로 제어되고 있음

피격 부분에 애니메이터의 SetTrigger 함수를 호출하여 상태 변경

    private void OnTriggerEnter2D(Collider2D collision)
    {
        //...
        if (health > 0)
        {
            anim.SetTrigger("Hit");
        }
        //...
    }

 

코루틴 Coroutine : 생명 주기와 비동기처럼 실행되는 함수

IEnumerator : 코루틴만의 반환형 인터페이스

yield : 코루틴의 반환 키워드

- yield return 을 통해 다양한 쉬는 시간을 지정

	private void OnTriggerEnter2D(Collider2D collision)
    {
		//...
        //StartCoroutine("KnockBack");
        StartCoroutine(KnockBack());
		//...
    }

	IEnumerator KnockBack()
    {
        //yield return null;  // 1프레임 쉬기
        //yield return new WaitForSeconds(2f);    // 2초 쉬기
        yield return wait;//하나의 물리 프레임을 딜레이 주기
        Vector3 playerPos = GameManager.instance.player.transform.position;
        Vector3 dirVec = transform.position - playerPos;
        rigid.AddForce(dirVec.normalized * 3,ForceMode2D.Impulse);
    }

플레이어 기준의 반대 방향 : 현재 위치 -플레이어 위치

리지드바디2D의 AddForce 함수로 힘 가하기

순간적인 힘이므로 ForceMode2D.Impulse 속성 추가

 

하나의 물리 프레임을 딜레이 하는 

WaitForFixedUpdate 변수 선언 및 초기화

public class Enemy : MonoBehaviour
{
	//...
    WaitForFixedUpdate wait;
    

    void Awake()
    {
        //...
        spriter = GetComponent<SpriteRenderer>();
        wait = new WaitForFixedUpdate();
    }

 

 

FixedUpdate 수정

 

    private void FixedUpdate()
    {
    	//...
        if (!isLive || anim.GetCurrentAnimatorStateInfo(0).IsName("Hit"))
            return;
    	//...
    }

GetCurrentAnimatorStateInfo : 현재 상태 정보를 가져오는 함수

- 살아있으며 Hit 상태일때 이동로직 비활성화

GetCurrentAnimatorStateInfo(0) : 현재 상태 정보를 가져오는 함수 ,레이어의 인덱스를 매개변수로 사용한다.

IsName : 해당 상태의 이름이 지정된 것과 같은지 확인하는 함수


2. 사망 리액션

 

여러 로직을 제어하는 isLive 변수를 false로 변경

Collider2D 변수를 생성 및 초기화

public class Enemy : MonoBehaviour
{
	//...
    Rigidbody2D rigid;
    Collider2D coll;
	//...
    void Awake()
    {
        rigid = GetComponent<Rigidbody2D>();
        coll = GetComponent<Collider2D>();
		//...
    }
}

컴포넌트의 비활성화는 .enabled = false

리지드바디의 물리적 비활성화는 .simulated = false

SetBool 함수를 통해 죽는 애니메이션 상태로 전환

spriter.sorting

스프라이트 랜더러의 Sorting Order 감소

 

재활용을 위해 OnEnable 함수에서 되돌리기

 

애니메이터에서 몬스터 데드 선택

키프레임 선택 후 Ctrl + C 로 복사 Ctrl + v 로 붙여넣기 (Alt + 휠 = 프레임당 간격줄이기)

Add Event 버튼을 통해 애니메이션 이벤트 추가

 

몬스터 프리펩을 더블클릭하여 들어가기

애니메이션 이벤트 선택 후, 인스펙터에서 연결할 함수 선택

애니메이터 컴포넌트의 컨트롤러를 교체하면서 다른 애니메이션도 작업


3. 처치 데이터 얻기

게임 매니저에 레벨, 킬수, 경험치 변수 선언

각 레벨의 필요경험치를 보관할 배열 변수 선언 및 초기화

public class GameManager : MonoBehaviour
{
	public int level;
    public int kill;
    public int exp;
    public int[] nextExp = { 10, 30, 60, 100, 150, 210, 280, 360, 450, 600 };

 

Header : 인스펙터의 속성들을 이쁘게 구분시켜주는 타이틀

    [Header("# Game Control")]
    public float gameTime;
    public float maxGameTime = 2 * 10f;
    [Header("# Player Info")]
    public int level;
    public int kill;
    public int exp;
    public int[] nextExp = { 10, 30, 60, 100, 150, 210, 280, 360, 450, 600 };

    [Header("# Game Object")]
    public Player player;
    public PoolManager pool;

 

경험치 증가 함수 새로 작성

    public void GetExp()
    {
        exp++;
        if (exp == nextExp[level])
        {
            level++;
            exp = 0;
        }
    }

if 조건으로 필요 경험치에 도달하면 레벨 업하도록 작성

 

몬스터 사망시 킬수 증가와 함께 경험치 함수 호출(Enmey.cs -> 사망)

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!collision.CompareTag("Bullet")||isLive)
            return;
		//...
        else
        {
            isLive = false;
            coll.enabled = false;
            rigid.simulated = false;
            spriter.sortingOrder = 1;
            anim.SetBool("Dead",true);
            GameManager.instance.kill++;
            GameManager.instance.GetExp();
            
        }
    }

- 사망 로직이 연달아 실행되는 것을 방지하기 위해 조건(isLive) 추가


깃허브 올리기

Commit : ver 1.9
Description : Add Monster animation

 

https://github.com/mekain80/CloneCode_Undead_Survivor

 

GitHub - mekain80/CloneCode_Undead_Survivor: https://www.youtube.com/watch?v=MmW166cHj54&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x

https://www.youtube.com/watch?v=MmW166cHj54&list=PLO-mt5Iu5TeZF8xMHqtT_DhAPKmjF6i3x&index=1 - GitHub - mekain80/CloneCode_Undead_Survivor: https://www.youtube.com/watch?v=MmW166cHj54&li...

github.com

 

'게임개발 > 언데드서바이벌_골드메탈_클론코딩' 카테고리의 다른 글

[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 11 (능력 업그레이드💪구현)  (0) 2023.05.10
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 10 (HUD📐제작하기)  (0) 2023.05.06
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 8 (자동🎯원거리 공격 구현)  (0) 2023.04.10
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 7 (회전하는🪓근접무기 구현)  (0) 2023.04.10
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 6+ (소환 레벨⏳적용하기)  (0) 2023.04.09
'게임개발/언데드서바이벌_골드메탈_클론코딩' 카테고리의 다른 글
  • [클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 11 (능력 업그레이드💪구현)
  • [클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 10 (HUD📐제작하기)
  • [클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 8 (자동🎯원거리 공격 구현)
  • [클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 7 (회전하는🪓근접무기 구현)
메카인
메카인
메카인의 지식창고메카인 님의 블로그입니다.
메카인
메카인의 지식창고
메카인
전체
오늘
어제
  • 분류 전체보기
    • 코딩 공부
      • TIL(Today I Learn)
      • TIL
      • 백준(C++)
      • Python
      • 알고리즘
      • 프로젝트 회고
    • C++
      • C++
      • C++ STL
      • C,C++ mCoding yotube
    • 게임개발
      • 언데드서바이벌_골드메탈_클론코딩
      • 3D_골드메탈_클론코딩
      • 유니티_문제해결
      • 게임 수학
    • Unreal 공부
      • UE5 GameDev
      • Unreal Engine 4 C++ The Ult..
    • 교재 문제 풀이
      • 운영체제
    • 정보처리기사
      • 정처기 요약
      • 정처기 오답노트
    • 학교수업
      • 데이터베이스
      • 프로그래밍 언어론
      • 리눅스 시스템
      • 네트워크
    • 일상
      • 주식
      • 독서
    • (비공개 전용)
      • memory
      • Build
      • OOP
      • Smart Pointer
      • lamda
      • 게임 수학
      • 모던 C++
      • 모던 C++ STL
      • 모던 C++ Concurrency, Paralle..

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 블로그 관리

공지사항

  • 공지사항 - 인생과 블로그의 목표

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
메카인
[클론코딩_유니티_골드메탈] 뱀서라이크 따라만들기 9 (타격감🌟있는 몬스터 처치 만들기)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.