magnet 센서가 3초간 실행 되도록 만들었다.
젤리가 플레이어한테 이동하도록 만들었다.
비트로 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;
이 코드에서는 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