1 minute read

참고 링크들 북마크에 정리



Ray 를 쏘는 방법

Transform mainCam = Camera.main.transform;
Ray ray = new Ray(mainCam.position, mainCam.forward);
RaycastHit rcHit = new RaycastHit();
int mask = ~(1 << LayerMask.NameToLayer("Ignore"));

// 처음 닿는 1개만 저장
if (Physics.Raycast(ray, out rcHit, Mathf.Infinity, mask))
{
    GameObject go = rcHit.transform.GameObject;
    string name = rcHit.transform.name;
    Vector3 hitPoint = rcHit.point;
    Vector3 hitNormal = rcHit.normal;
}

// 관통하여 닿는 모든 오브젝트를 반환
RaycastHit[] rcHits;
rcHits = Physics.RaycastAll(ray, Math.Infinity, mask)

// 라인 캐스트 (선에 걸리는지 확인)
if (Physics.Linecast(transform.position, target.position, out rcHit, mask)

// 구에 겹친 충돌체를 반환
Collider[] cols = Physics.OverlapSphere(transform.position, radius, mask);

- 참고
https://makerejoicegames.tistory.com/129


RaycastHit 구조체의 값들

Transform transform : 부딪힌 Transform

Collider colider : 부딪힌 충돌체

Rigidbody rigidbody : 부딪힌 Rigidbody

float distance : Ray 발사 지점으로부터의 거리

Vector3 normal : 부딪힌 지점의 법선 벡터

Vector3 point : 부딪힌 지점의 월드 좌표


Skybox 스크립트로 움직이기

// 스카이박스는 보통 16비트 색상 이상의 HDR 텍스쳐이다.

degree = (degree + Time.deltaTime * speed) % 360;

RenderSettings.skybox.SetFloat("_Rotation", degree);

- 참고
https://blog.naver.com/skdndxo/221418890558


구조체와 클래스

구조체 : 스택에 저장되며 값 자체를 갖는다.
선언과 동시에 사용할 수 있다.

Vector
Color
Quaternion
RaycastHit
...

클래스 : 실제 값은 힙에 저장되며 사용자는 레퍼런스(메모리 주소)를 갖는다.
선언 후 new Class(); 를 통해 생성 후 사용해야 한다.

GameObject
Component
...

C++ 과 다르게 C# 은 구조체와 클래스 모두 new 키워드로 생성할 수 있지만,
구조체를 new 로 생성하여도 스택에 저장된다.

// 이것은 값 복사이다.
SomeStruct st1 = new SomeStruct();
SomeStruct st2 = st1;

// cls2 는 cls1 의 참조만 저정한다.
SomeClass cls1 = new SomeClass();
SomeClass cls2 = cls1;

- 참고
https://fiftiesstudy.tistory.com/209

유니티의 애니메이션 기능

유니티의 애니메이션 시스템 : 메카님
애니메이터 컨트롤러를 이용해 비주얼 스크립팅이 가능

블렌딩 : 다른 두 모션을 선형보간을 이용해 부드럽게 연결해줌

리타겟팅 : 리깅 정보를 자동으로 매칭해 다른 모델에서도 애니메이션을 사용할 수 있게 해줌 (휴머노이드의 필수 본 정보가 필요하다.)

애니메이션 타입
- 레거시 : 해당 모델에 종속적으로 만들어졌다, 메카님 시스템 사용 불가
- 제네릭 : 리타겟팅 불가능, 비주얼 스크립팅은 가능
- 휴머노이드 : 이 형태만 리타겟팅을 지원, 모든 메카님 시스템 사용 가능

제네릭을 휴머노이드로 변경하여 사용할 수도 있지만, 모델과 애니메이션 둘 다 변경해줘야 하고
재생될수록 위치가 이상해지는 문제가 발생할 수 있다.

※ 애니메이션 이벤트 함수가 작성된 스크립트는 게임 오브젝트가 아닌,
애니메이터가 장착된 모델에 등록해야 한다.


Categories:

Updated: