총알이 Wall에 충돌했을 때 Wall의 관점에서 생각해 보면 Collider 컴포넌트를 가진 어떤 게임오브젝트가 날아와서 충돌이 일어났는지 알 필요가 있다. 물론 충돌한 오브젝트의 이름으로 판단할 수도 있지만 인스턴트의 경우 번호가 붙으므로 프리팹에 Tag를 지정하고  Tag명식별하는 법이 있다. 

Tag는 기본적으로는 Untagged이지만 디폴트로 생성된 이름을 선택할 수도 있고 Tag 콤보박스를 클릭한다음 Add Tag로 만들수 있다.  대소문자를 식별한다.

 

Tags의 +를 누르면 이름을 추가할 수 있다.

Inspector의 루트로 빠져나오면 Tab에 Bullet이 추가되어 있고 선택하면 Untagged에서 Bullet로 변경된다.

총알이 벽에 충돌할때 발생되는 이벤트함수가 호출되는지 확인해보자 Wall prefab에 스크립트를 추가한후 RemoveBullet라고 이름바꾼다. 이러면 하이라키의 4개의 wall에 다 적용된다.

코드를 보면 총알이 벽에 부딪치면 다음같은 이벤트가 발생되고 Collision 객체가 전달된다.

이 Collision은 충돌 객체및 Tag이름, 충돌위치, 충돌속도가 들어 있다

 

코드는 이중 tag를 식별해 충돌된 Bullet 오브젝트를 제거한다.
    private void OnCollisionEnter(Collision coll) {
        if(coll.collider.tag == "Bullet") {
            Destroy(coll.gameObject);
        }
    }

 

collision.CompareTag()

 if(coll.collider.tag == "Bullet")  와 같이 게임오브젝트의 문자속성을 가져오는 코드는 실행시 문자열의 복사본을 생성한다. 따라서 가지비컬렉션이 발생하지 않는 coll.collider.comapreTag("bullet")를 추천한다.

 

Bullet의 Prefab 전환

총을을 발사해보면 벽과 충돌하면 Destroy()되면서 하이라키뷰에서 사라지기 때문에 한발이상 쏠수가 없다 이걸 해결해야한다.

Bullet을 끌어다 Prefab 폴더에 넣는다.

 

❤️Collision 설명 - Collider가 아닙니다. 충돌이 발생하면 리턴되는 인자입니다.

모든 충돌체의 기본 클래스입니다.

참조: BoxCollider , SphereCollider , CapsuleCollider , MeshCollider , PhysicMaterial , Rigidbody .

Collider가 있는 개체를 게임 플레이 중에 이동해야 하는 경우 개체에 Rigidbody 구성 요소도 연결해야 합니다. 개체가 다른 개체와 물리적 상호 작용을 하지 않도록 하려면 Rigidbody를 운동학적으로 설정할 수 있습니다 .

속성

attachedArticulationBody 콜라이더가 부착된 관절 본체입니다.
attachedRigidbody 콜라이더가 부착된 리지드바디 .
bounds 콜라이더의 세계 공간 경계 볼륨(읽기 전용).
contactOffset 이 콜라이더의 접촉 오프셋 값입니다.
enabled 활성화된 Collider는 다른 Collider와 충돌하지만 비활성화된 Collider는 충돌하지 않습니다.
hasModifiableContacts 이 Collider의 연락처를 수정할 수 있는지 여부를 지정합니다.
isTrigger 이 콜라이더가 트리거로 구성되었는지 지정합니다.
material 충돌체에서 사용되는 재료입니다.
sharedMaterial 이 충돌체의 공유 물리 물질입니다.

공개 방법

ClosestPoint 주어진 위치에 가장 가까운 충돌체의 지점을 반환합니다.
ClosestPointOnBounds 부착된 콜라이더의 경계 상자에 가장 가까운 지점입니다.
레이캐스트 이 충돌체를 제외한 모든 충돌체를 무시하는 광선을 던집니다.

메시지

OnCollisionEnter OnCollisionEnter는 이 collider/ rigidbody가 다른 rigidbody /collider 에 닿기 시작 했을 때 호출됩니다 .
OnCollisionExit OnCollisionExit는 이 collider/ rigidbody가 다른 rigidbody /collider와 접촉하는 것을 멈췄을 때 호출됩니다.
OnCollisionStay OnCollisionStay는 다른 Collider 또는 Rigidbody 에 닿는 모든 Collider 또는 Rigidbody 에 대해 프레임당 한 번씩 호출됩니다 .
OnTriggerEnter GameObject가 다른 GameObject와 충돌 하면 Unity는 OnTriggerEnter를 호출합니다 .
OnTriggerExit OnTriggerExit는 다른 Collider가 트리거 터치를 중지했을 때 호출됩니다.
OnTriggerStay OnTriggerStay는 트리거에 닿는 모든 Collider 다른 프레임에 대해 거의 모든 프레임이라고 합니다. 이 함수는 물리 타이머에 있으므로 모든 프레임에서 반드시 실행되는 것은 아닙니다.

상속된 구성원

속성

gameObject 이 구성 요소가 연결된 게임 개체입니다. 구성 요소는 항상 게임 개체에 연결됩니다.
tag 이 게임 오브젝트의 태그입니다.
transform GameObject 에 첨부된 Transform입니다 .
hideFlags 개체를 숨겨야 합니까, 장면과 함께 저장해야 합니까, 아니면 사용자가 수정할 수 있어야 합니까?
이름 개체의 이름입니다.

공개 방법

BroadcastMessage 이 게임 개체 또는 그 자식의 모든 MonoBehaviour 에서 methodName 이라는 메서드를 호출합니다 .
CompareTag 정의된 태그에 대해 GameObject의 태그를 확인합니다 .
GetComponent GameObject 에서 유형 T의 구성 요소에 대한 참조를 가져옵니다 .
GetComponentInChildren GameObject 의 자식과 동일한 GameObject 에서 유형 T의 구성 요소에 대한 참조를 가져옵니다 .
GetComponentInParent GameObject 의 부모와 동일한 GameObject 에 있는 T 유형의 구성 요소에 대한 참조를 가져옵니다 .
GetComponents GameObject 에서 유형 T의 모든 구성 요소에 대한 참조를 가져옵니다 .
GetComponentsInChildren GameObject 의 자식과 동일한 GameObject 에 있는 T 유형의 모든 구성 요소에 대한 참조를 가져옵니다 .
GetComponentsInParent GameObject 의 부모와 동일한 GameObject 에 있는 T 유형의 모든 구성 요소에 대한 참조를 가져옵니다 .
SendMessage 이 게임 개체의 모든 MonoBehaviour 에서 methodName 이라는 메서드를 호출합니다 .
SendMessageUpwards 이 게임 개체의 모든 MonoBehaviour 와 동작 의 모든 조상에 대해 methodName 이라는 메서드를 호출합니다 .
TryGetComponent 존재하는 경우 지정된 유형의 구성 요소를 가져옵니다.
GetInstanceID 개체의 인스턴스 ID를 가져옵니다.
ToString 객체의 이름을 반환합니다.

정적 메서드

Destroy GameObject , 구성 요소 또는 자산을 제거합니다 .
DestroyImmediate 개체 obj를 즉시 파괴합니다. 대신 Destroy를 사용하는 것이 좋습니다.
DontDestroyOnLoad 새 장면을 로드할 때 대상 개체를 파괴하지 마십시오.
FindAnyObjectByType 유형 의 활성 로드된 개체를 검색합니다 .
FindFirstObjectByType type 의 첫 번째 활성 로드된 개체를 검색합니다 .
FindObjectOfType 유형 의 첫 번째 활성 로드된 개체를 반환합니다 .
FindObjectsByType type 의 모든 로드된 객체 목록을 검색합니다 .
FindObjectsOfType type 의 모든 로드된 개체 목록을 가져옵니다 .
Instantiate 개체 원본을 복제하고 복제본을 반환합니다.

연산자

bool 개체가 존재합니까?
operator != 두 개체가 다른 개체를 참조하는지 비교합니다.
operator == 두 개체 참조를 비교하여 동일한 개체를 참조하는지 확인합니다.

+ Recent posts