임시 정리 4 / Blah blah 4
참고 링크들 북마크에 정리
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
유니티의 애니메이션 기능
유니티의 애니메이션 시스템 : 메카님
애니메이터 컨트롤러를 이용해 비주얼 스크립팅이 가능
블렌딩 : 다른 두 모션을 선형보간을 이용해 부드럽게 연결해줌
리타겟팅 : 리깅 정보를 자동으로 매칭해 다른 모델에서도 애니메이션을 사용할 수 있게 해줌 (휴머노이드의 필수 본 정보가 필요하다.)
애니메이션 타입
- 레거시 : 해당 모델에 종속적으로 만들어졌다, 메카님 시스템 사용 불가
- 제네릭 : 리타겟팅 불가능, 비주얼 스크립팅은 가능
- 휴머노이드 : 이 형태만 리타겟팅을 지원, 모든 메카님 시스템 사용 가능
제네릭을 휴머노이드로 변경하여 사용할 수도 있지만, 모델과 애니메이션 둘 다 변경해줘야 하고
재생될수록 위치가 이상해지는 문제가 발생할 수 있다.
※ 애니메이션 이벤트 함수가 작성된 스크립트는 게임 오브젝트가 아닌,
애니메이터가 장착된 모델에 등록해야 한다.