본문 바로가기
게임 개발(유니티)/멋쟁이 사자처럼 3기_회고록

[멋쟁이사자처럼 유니티 TIL] 2024_12_12(목) 강의 요약 및 정리(2)

by goraku97 2024. 12. 12.

대포 오브젝트 제어 스크립트

public float downSpeed = 5f;

// 게이지가 내려갈때의 속도를 나타내는 코드. 초기값은 5초이며

   Inspector 창에서 수정가능

 

private bool isFilling = true;

// 슬라이더가 채워지고 있는지 여부를 나타내는 플래그 변수

  true일 경우 슬라이더가 충전 중이고, false일 경우 충전이 멈춤.

 

slider.value = currentPower / maxPower;

// 슬라이더의 현재 값을 업데이트.

  currentPower를 maxPower로 나눈 값은 0에서 1 사이의 비율로 나타냄

스페이스에서 키를 때었을때 코드가 실행됨

Vector3 forward = Quaternion.Euler(-90, 0, 0) * transform.forward;

- Quaternion.Euler(-90, 0, 0)

  // 현재 방향에서 X축을 -90도 회전한 방향을 계산하고

     대포가 위로 발사되도록 방향을 보정

- transform.forward

  이 값은 객체의 로컬좌표 정면 방향을 나타냄.

  (월드좌표는 Vector3.forward)

 

AddForce(forward * currentPower, ForceMode.Impulse)

- ForceMode.Impulse

// 즉각적인 속도를 부여(현 코드에서는 순간적으로 대포알이 발사되도록 함)\

   해당 코드가 없으면, 대포알이 정상적으로 발사대지 않음.

 

currentPower = 0.0f;

// 발사력이 초기화

   다음 발사를 위해 충전이 다시 시작

  (해당 코드가 없으면, 스페이스를 떼어도 값이 초기화되지 않음.

   약하게 발사하고싶으면, 다시 스페이스바를 눌러서 게이지가 되돌아가야하는거를

     기다려야함.)

slider.value = 0.0f;

// UI 슬라이더를 초기 상태로 되돌림.

  플레이어에게 발사력이 0임을 표시

  (해당 코드가 없으면, 스페이스 바를 때도 슬라이더 값이 초기화되지 않음.

    약하게 발사하고싶으면, 다시 스페이스바를 눌러서 게이지가 되돌아가야하는거를

     기다려야함.)

 

private void OnTriggerEnter(Collider other)

// 현재 오브젝트에 트리거로 설정된 콜라이더(isTrigger = true)가 있어야 해당 함수를 실행

 

Vector3 hitDirection = GetComponent<Rigidbody>().velocity * -1;

- GetComponent<Rigidbody>().velocity

  // 이 오브젝트의 현재 속도 벡터를 가져옴.

-1

  // 현재 속도 방향의 반대 방향(즉, 충돌 방향)을 계산

( 만약 오브젝트가 오른쪽으로 이동 중이라면(velocity가 (1, 0, 0)), hitDirection은 왼쪽 방향이 됨(-1, 0, 0)).

(해당 코드가 없다면 오브젝트가 이동하는 방향으로 파편이 더 집중적으로 생성되거나 흩어질 수 있음)

 

int count = Random.Range(MinPiaceCount, MaxPiaceCount + 1);

// 지정된 최소값(MinPiaceCount)과 최대값(MaxPiaceCount) 사이의 정수형 난수를 생성

   그 값을 count ( 생성할 파편의 개수 ) 에 할당.

 

Vector3 randomDiretion = Random.insideUnitSphere;

- Random.insideUnitSphere

  // 반지름이 1인 단위 구(unit sphere) 내부에서 무작위 위치반환하는 함수.

    반환 값은 Vector3 타입이며, 각 구성 요소는 -1과 1 사이의 값을 가짐

   결과로 나온 벡터는 원점(0, 0, 0)을 중심으로 한 단위 구의 내부 어딘가에 위치하는

    백터로 변환됨( 현재 스크립트에서는 무작위 방향을 생성하기 위해 사용됨)

 

Vector3 lastDiretion = Quaternion.LookRotation(randomDiretion) * hitDirection;

- Quaternion.LookRotation(randomDiretion)

   randomDiretion 방향으로 향하도록 오브젝트를 회전시키는 회전 값을 만듬.

 

- * hitDirection

    Rigidbody의 속도(velocity)를 반전시킨 값.

    Quaternion.LookRotation(randomDiretion) hitDirection 을 곱함으로서

    hitDirection을 randomDiretion 방향으로 회전시킴.

   

Destroy(this.gameObject);

// 충돌한 현재 오브젝트를 제거

  파편만 남고 원래 오브젝트는 사라지게 됨.

 

IEnumerator Start()

- IEnumerator

 코루틴을 정의할 때 사용하는 반환 타입.

 일시적인 중단을 허용하는 함수로, 시간이 걸리는 작업을 처리할 때 유용.

( IEnumerator를 사용하면, yield return 을 통해 코드 실행을 중단하거나,

  일정 시간이 지난 후에 계속 실행할 수 있음.)

 

yield return new WaitForSeconds(3f);

- yield return

  코루틴에서 지연을 설정하는 명령어.

  이 구문이 실행되면, 코루틴은 잠시 멈추고 주어진 조건이 완료될 때까지 기다림.

- WaitForSeconds(3f)

    3초 동안 기다리는 명령어.

 

Destroy(this.gameObject)   

// 3초 후에 해당 오브젝트를 파괴함.