콜라이더 2D일걸로 보이는데
여기서 보통은 어떤 설정은 한지 모르겠지만
수박게임은 기본적으로 구조가
게임 매니저
드롭퍼
프루츠
3구조로된 간단한 게임이다.
게임 매니저는 점수 판단, 줄 넘어섰느냐, 수박 합쳐지는거 관련
드롭퍼가 보통은 아이템 드랍 관련
과일은 과일정보인데
보통은
게임 오브젝트끼리 콜라이더 충돌할때 게임매니저에서
과일의 인스턴스 아이디가 있을거 아니냐
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 과일 충돌 여부 감지 void OnCollisionEnter2D(Collision2D collision) { // 충돌한 다른 게임 오브젝트에서 과일 컴포넌트 가져옴 Fruit otherFruit = collision.gameObject.GetComponent<Fruit>(); // 다른 과일 존재하고, 두 과일 ID 확인, 인스턴스 ID가 다를 경우 체크, 과일이 같은 종류고,동일한 과일 2번합치는거 방지 if (otherFruit != null && otherFruit.id == this.id && this.gameObject.GetInstanceID() < collision.gameObject.GetInstanceID()) { game.InstantiateFruit(this.transform.position, this.id + 1); game.addScore(this.id); StartCoroutine(DestroyFruits(this.gameObject, collision.gameObject)); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | /// <summary> /// 과일 프리펩 인스턴스 /// </summary> public GameObject InstantiateFruit(Vector3 position, int id) { GameObject combinedFruit = Instantiate(fruitPrefabs[id], position, Quaternion.identity); combinedFruit.GetComponent<Fruit>().id = id; return combinedFruit; } | cs |
콜라이더에서 게임 오브젝트의 컴포넌트를 받아온다(여기서는 콜라이더에 연결된 프루츠를 참조한다)
그럼 충돌감지-> 다른 과일일때는 무시
동일 과일일시(ID가 동일할 시)-> 합쳐짐
game.InstantiateFruit(this.transform.position, this.id + 1): 현재 과일의 위치에 ID를 1 증가시킨 새로운 과일을 생성
하는 매커니즘이야
따라서 너의 경우에도 비슷하게 합쳐질 경우 그에 대한 식별하는 코드를 짜야겠지
그리고 합쳐질 경우 동일 생성될 프리펩을 구현하는 논리가 추가되어야하고
한 번에 같은 과일 3개가 충돌할 시엔 어떻게 처리함
유니티 논리상 순차적용임 동시에 같은 위치서 생성되지 않는한 게임내에서 그렇게 동시에 부딪힐 일 없음
만약 그렇게 해야한다면 프레임단위로 받아온 후, 충돌 이벤트 처리에 대해서 스택 처리를 해야함
윗놈 대답이 맞긴한데 그렇다고 동시충돌을 배제하면안되지 물리엔진 특성이나 프레임레이트,네트워크 등 워낙 변수가많아서 안전장치는 해둬야지
그렇다면 기본적으로 충돌 스택처리후, 더 가까운거 콜라이더에서 더 가까운거 위주로 계산해야함
그냥 충돌이벤트 큐에 처박아놓고 한 프레임에 일괄처리는 어떰?
나는 큐 잘 안씀. 큐 써도 되긴하겠지 내가 스택에 익숙함
ㅇㅇ ㄳ..
운 나쁘게 미키마우스 처럼 될 가능성이 아에 없?
하려면 가능은 함. 기본적으로 충돌을 스택처리해야겠지. 그리고 3개 부딪혔을때 예외 처리하고
https://gall.dcinside.com/board/view/?id=programming&no=2759131&page=1
선생님
전체 코드를 동봉하여 다시 질문글 올렸습니다 제가 이 글만 봐서는 저의 문제점을 파악하기 좀 어렵다고 느껴집니다 선생님이 보시기에 뭔가 이상하다 싶은게 있으면 도움 주세요