Unity 메서드 및 기타 표현 정리

Captainjack·2022년 5월 16일
0

TIL

목록 보기
188/258

메서드 파트

GetComponent() : 오브젝트로부터 원하는 타입의 컴포넌트의 타입을 찾아옵니다.

public Rigidbody playerRigidbody;

playerRigidbody = GetComponent<Rigidbody>();
Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
playerRigidbody.velocity = newVelocity;

GetAxis() : 메서드로 입력축에 대응하는 버튼의 입력을 감지하여 -1.0에서 +1.0 사이의 숫자로 반환합니다.

float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");

입력축(Axis) : 입력 매니저에서 입력축을 관리

Destory() : 주어진 오브젝트를 파괴한다.

Destroy(gameObject, 3f); // 3초 

Instantiate() : 원본 오브렉트를 주면 해당 오브젝트를 복제한 오브젝트 생성

GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);

Random.Range() : 입력으로 최소, 최댓값을 받고, 그 사이에 랜덤한 숫자를 출력 (유니티 내장 메서드)

 public float min = 0.5f;
 public float max = 3f;
 
 spawnRate = Random.Range(min, max);

FindObjectOfType() : 꺾쇠(<<>>)에 어떤 타입을 명시하면 씬에 있는 모든 오브젝트를 검색해서 해당 타입의 오브젝트를 가져 옴. (dom에 queryselector랑 똑같네)

target = FindObjectOfType<PlayerController>().transform;

FindObjectOfType()는 모든 오브젝트를 검색하는 만큼 처리 비용이 크기 떄문에 Start() 메서드 처럼 한 두번 실행되는 메서드에서만 사용할 것

FindObjectsOfType()는 해당 타입의 오브젝트를 모두 찾아서 배열로 반환 함. (dom이랑 똑같네)


Time.deltaTime : 직전 Update()실행과 현재 Update() 실행 사이의 시간

void Update()
    {
        timeAfterSpawn += Time.deltaTime;
        
        if(timeAfterSpawn >= spawnRate) {
            timeAfterSpawn = 0f;
            GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
            bullet.transform.LookAt(target);

            spawnRate = Random.Range(spawnRateMin, spawnRateMax);
        }
    }
    

LookAt() : 해당 오브젝트가 바라보는 방향 결정

bullet.transform.LookAt(target);

bullet의 트랜스폼 컴포넌트의 LookAt() 메서드를 사용하여 복제 생성된 탄알이 target을 바라보도록 회전.


충돌 파트

  1. OnCollision 계열 : 일반 충돌

    • 일반적인 콜라이더를 가진 두 게임 오브젝트가 충돌할 때 발생.
      * 충돌한 두 콜라이더는 서로 통과하지 않고 밀어냄.

    • OnCollisionEnter(Collision collision): 충돌한 순간

    • OnCollisionStay(Collision collision): 충돌하는 동안

    • OnCollisionExit(Collision collision): 충돌했다가 분리되는 순간

OnCollision 계열 메서드가 실행될 때는 메서드 입력으로 충돌 관련 정보가 Collision 타입으로 들어온다.
Collsion 타입은 충돌 관련 정보를 담아두는 단순한 정보 컨테이너.
따라서 입력으로 들어온 Collision을 통해 충돌한 상대방 게임 오브젝트, 충돌 지점, 충돌 표면의 방향 등을 알 수 있다.

  1. OnTrigger 계열 : 트리거 충돌

    • 충돌한 두 게임 오브젝트의 콜라이더 중 최소 하나가 트리거 콜라이더라면 자동으로 실행됩니다.
      * 이 경우 두 게임 오브젝트가 충돌했을 때 서로 그대로 통과합니다.

    • OnTriggerEnter(Collider other): 충돌한 순간

    • OnTriggerStay(Collider other): 충돌하는 동안

    • OnTriggerExit(Collider other): 충돌했다가 분리되는 순간

OnTrigger 계열의 메서드가 실행 될 때는 메서드 입력으로 충돌한 상대방 게임 오브젝트의 콜라이더 컴포넌트가 Collider 타입으로 들어옵니다. 여기서 Collision이 아닌 Collider 타입을 입력받는 이유는 트리거 충돌에는 상세한 충돌 정보가 필요 없기 때문.
트러기 충돌은 일반적인 충돌과 달리 서로를 밀어내지 않고 그대로 통과.
따라서 물리적인 반발력이나 정확한 충돌 지점. 충격량 등이 존재하지 않으므로 충돌한 상대방 게임 오브젝트(의 콜라이더 컴포넌트)를 곧장 받습니다.

OnTrigger 계열의 메서드는 자신이 트리거 콜라이더가 아니어도 실행 됨.

  • 충돌한 두 콜라이더 중 하나 이상이 트리거 콜라이더일 때 양쪽 모두에서 OnTrigger 계열의 메서드가 실행됩니다. 따라서 자신의 콜라이더가 일반 콜라이더라고 해도 충돌한 상대방 게임 오브젝트의 콜라이더가 트리거 콜라이더면 자신과 상대방 모두 OnCollision이 아닌 OnTrigger계열의 충돌 이벤트 메서드가 실행됩니다.
profile
til' CTF WIN

0개의 댓글