쿠키런 프로젝트하면서 공부한 내용

김도익·2023년 4월 25일
0

Unity

목록 보기
18/23

자석 아이템을 먹었을 때 3초간 자력이 발생하도록 만들기

  • PlayerController : 플레이어 객체한테 상속하는 부모 클래스

  • magnet 센서가 3초간 실행 되도록 만들었다.

  • 젤리가 플레이어한테 이동하도록 만들었다.

Layer 비트

  • 비트로 layer 값 확인하기

         layer는 32비트로 되어ㅣ 있다.
         0000 0000 0000 0001 < 0번 인덱스 : Default
         0000 0000 0000 0010 < 1번 인덱스 : TransparentFX
         0000 0000 0000 0100 < 2번 인덱스 : Ignore RayCast
         0000 0000 0000 1000 < 3번 인덱스 : Magnet
         0000 0000 0001 0000 < 4번 인덱스 : ~~~~
         0000 0000 0010 0000 < 5번 인덱스 : ~~~~
         0000 0000 0100 0000 < 6번 인덱스 : Player
    
         충돌한 오브젝트에 layer 인덱스 만큼 1을 옮겨준다.
         예를 들어 Magent와 충돌했다면 1을 3만큼 옮겨준다.
         그렇다면 0000 0000 0000 0001-> 0000 0000 0000 1000이 된다.
          int collisionObject = 1 << collision.gameObject.layer;

위 방법을 CompareTag 방법으로 바꾼다면 아래와 같다.

코루틴이 2번만 실행되고, 3번째 부터 실행 안된다면?

이 코드에서는 IEnumerator 인터페이스를 구현하여 코루틴을 작성하고 있습니다.

해당 코루틴은 GameManager 클래스의 _dashSpeed 필드가 true인 동안, 지정된 방향(leftMove)과 속도(speedUP)로 이동합니다. 이동 후 waitForSeconds만큼 대기한 후 _dashSpeed 필드를 false로 변경하고, StopCoroutine을 호출하여 코루틴을 중지합니다. 마지막으로 null을 반환하고 코루틴을 종료합니다.

하지만 이 코드에서 StopCoroutine() 메서드가 코루틴 자신을 인자로 받고 있기 때문에, 코루틴이 실행되면 바로 StopCoroutine() 메서드를 호출하여 코루틴이 종료되므로, 코루틴은 두 번 실행되고 그 후 실행되지 않게 됩니다.

StopCoroutine() 메서드는 현재 실행중인 코루틴을 중지하기 위해 사용됩니다. 하지만, 현재 실행중인 코루틴의 참조를 인자로 전달하는 것이 아니라, 코루틴이 반환하는 IEnumerator 객체를 저장한 후, 그 객체를 StopCoroutine() 메서드의 인자로 전달해야 합니다.

따라서, StopCoroutine() 메서드 호출 부분을 아래와 같이 수정해야 합니다.

DashItemCooltime을 StopCoroutine에 넣으니까 제대로 작동하게 된다.

오브젝트 풀링

  • 오브젝트 풀링할 때 Hierachy창에 CamelPattern이 있으면 오브젝트 풀링이 안된다. 이유는 Pooler가 pool을 할 것이 없기 때문에 null이 발생한다.

  • Jelly

  • pattern

  • spawnManager

  • Hierarchy

  • Inspector

  • jelly

profile
고급 개발자가 되고 싶어요!

0개의 댓글