GameObject타입에 내장되어 있는 메소드
1. gameObject를 사용해 자신의 게임 오브젝트에 접근
2. 접근한 게임 오브젝트의 SetActive(false)실행
public void Die()
{
// 자신의 게임 오브젝트를 비활성화
gameObject.SetActive(false);
}
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
Vertor3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
playerRigidbody.velocity = newVelocity;
Rigidbody는 Vector3 타입의 velocity변수를 제공
velocity로 현재 속도 알 수 있음
AddForce() 와 velocity 차이
Horizontal 축과 Vertical축은 xbox같은 콘솔 게임기에도 적용 가능
입력을 숫자로 받는 이유는 아날로그 스틱의 경우 살짝미는 경우도 있기 때문에다
// 게임 오브젝트에서 Rigidbody 컴포넌트를 찾아 bulletRigidbody에 할당
bulletRigidbody = GetComponent<Rigidbody>();
// 리지드바디의 속도 = 앞쪽 방향 * 이동 속력
bulletRigidbody.velocity = transform.forward*speed;
//3초 뒤에 자신의 게임 오브젝트 파괴
Destory(gameobject, 3f);
충돌 메시지를 발생시키는 것은 Rigidbody이므로 최소 하나의 게임 오브젝트는 Rigidbody 컴포넌트를 가지고 있어야 한다.
충돌한 두 콜라이더는 서로 통과하지 않고 밀어낸다
충돌 관련 정보를 담아두는 단순한 정보 컨테이너
따라서 입력으로 들어온 collision을 통해 상대방 게임 오브젝트, 충돌 지점, 충돌 표면의 방향 등을 알 수 있다.
충돌한 두 게임 오브젝트의 콜라이더 중 최소 하나가 트리거 콜라이더면 자동 실행 충돌한 오브젝트는 서로 통과
충돌 정보 상세할 필요 없기에 Collision이 아닌 Collider타입을 사용
void OnTriggerEnter(Collider other) {
// 충돌한 상대방 게임 오브젝트가 Player 태그를 가진경우
if(other.tag == "player")
{
//상대방 게임 오브젝트에서 PlayerController 컴포넌트 가져오기
PlayerController playerController = other.GetComponent<PlayerController>();
//상대방으로부터 PlayerController 컴포넌트를 가져오는 데 성공했다면
if(playerController != null)
{
//상대방 playerController 컴포넌트의 Die()메서드 실행
playerController.Die();
}
}
float을 입력받을 때와 int를 입력받을 떄의 동작이 다르다
void Start(){
// 최근 생성 이후의 누적 시간을 0으로 초기화
timeAfterSpawn = 0f;
// 탄알 생성 간격을 spawnRateMin과 spawnRateMax사이에서 랜덤 지정
spawnRate = Random.Range(spawnRateMin, spawnRateMax);
// playerController 컴포넌트를 가진 게임 오브젝트를 찾아 조준 대상으로 설정
target = FindObjectOfType<PlayerController>().transform;
Instantaite(원본, 위치, 회전);
void Update()
{
//timeAfterSpawn 갱신
timeAfterSpawn += Time.deltaTime;
//최근 생성 시점에서부터 누적된 시간이 생성 주기보다 크거나 같다면
if(timeAfterSpawn >= spawnRate)
{
// 누적된 시간을 리셋
timeAfterSpawn = 0f;
// bulletPrefab의 복제본을
// transform.position 위치와 transform.rotation 생성
GameObject bullet
= Instatntiate(bulletPrefab, transform.position, transform.rotation);
// 생성된 bullet 게임 오브젝트의 정면 방향이 target을 향하도록 회전
bullet.transform.LookAt(target);
// 다음번 생성 간격을 spawnRateMin, spawnRateMax사이에 랜덤 지정