주말 푹 쉬었다.
다시 열심히 달리기!
고박사님의 유니티 강의를 들으며, 복습을 할 예정!
// 오른쪽 방향으로 1의 속도만큼 이동.
transform.position = transform.position + new Vector3(1, 0, 0) * 1;
// 축약형, 같은 의미.
transform.position += Vector3.right * 1;
2D/3D 공간에서 이동, 회전, 크기를 표현하기 위해 (x, y) or (x, y, z)의 좌표 체계를 나타내는 단위, Unity에서 제작한 Struct
방향, 각도, 두 점 사이의 거리 등 연산을 위한 다양한 메소드 제공.
Update는 컴퓨터의 사양에 따라 호출되는 횟수가 달라진다.
즉 같은 Update 코드 중 이동거리에 대한 코드를 작성하면
좋은 컴퓨터는 더 멀리갈 수 있다.(FPS 높기 때문)
이를 방지하기 위해 Time.deltaTime을 설정하면,
이전 Update( ) 종료부터 다음 Update( ) 시작까지의 시간, 업데이트 사이의 시간.
즉, Time.deltaTime을 넣어 이동거리가 달라짐을 방지한다.
e.g.,
1. 성능 좋음 -> FPS 60에 Update( ) 120번 호출
2. 성능 낮음 -> FPS 60에 Update( ) 60번 호출
이동거리 표현 가능!
이동 거리 = 방향(Direction) X 속도(Speed) X Time.deltaTime
e.g.,
Update 함수가 한번 호출될 때, 5만큼 이동한다 가정,
이동 거리 = 5m X FPS 120 X 0.5 = 300m
-> Time.deltaTime = 0.5
이동 거리 = 5m X FPS 60 X 1 = 300m
-> Time.deltaTime = 1
Input은 키보드, 마우스, 터치, 자이로센서, 가속도센서 등
입력 메소드, 마우스 좌표와 같은 각종 프로퍼티 정보를 제공한다.
매개변수 (Collision2D collision)
Inspector View에서 변수의 옵션을 조절할 수 있게 해준다.
[SerializeField]
private Color color;
// Color의 변수의 옵션을 조절할 수 있다.
rivate SpriteRenderer spriteRenderer;
컬러에서 투명도 설정을 해주지 않으면, 색상이 투명하게 나온다!
original 게임 오브젝트(Prefab) 복제, 생성
(복제되는 오브젝트의 모든 컴포넌트 정보는 원본과 동일)
Instantiate(GameObject original);
e.g.,
private GameObject boxPrefabs;
private void Awake()
{
Instantiate(boxPrefabs);
}
3차원의 3개 각도를 표현하기 위해 사용하는 3X3 크기의 행렬.
회전 순서에 따라 결과가 달라지므로 회전 순서에 주의.(유니티에서는 따로 계산할 일 없음 -> 걱정X)
짐벌락 : 세 개의 축이 서로 종속적인 관계를 가지고 있기 때문에 회전 연산 도중 축이 하나 사라져 3차원 오브젝트가 일그러지는 현상
사원수(x, y, z, w) -> 3개의 벡터 요소 (x, y, z) + 1개의 스칼라 요소 (w, 0~1)
q = w + ix + jy + kz
-> q = (w,x,y,z)
-> q = (w,v) // (v = (x, y, z))
transform.rotation
쿼터니온 회전 정보
transform.localScale
오일러 회전 정보
Inspector View에 보이는 Transform의 rotation 은 사용자 편의를 위해 오일러
Quaternion q = Quaternion.Euler(0, 0, 0); // 오일러 회전 정보를 입력해 쿼터니온 회전 값으로 변경
-> 쿼터니온은 임의의 축을 기준으로 회전을 표현할 수 있다. (오일러는 각 축에 대한 회전을 따짐)
따라서 축 의존성이 없기에, 짐벌락 현상이 발생하지 않는다.
e.g.,
transform.Roate(new vector3(1, 0, 0); // x축으로 계속 회전
original 게임오브젝트를 복제해서 생성, 생성된 복제 오브젝트의 정보를 클론에 저장.
(아래 코드에서 clone과 방금 생성된 박스 오브젝트는 동일)
(지역변수이기 때문에, 함수 종료되는 시점에 데이터 삭제)
GameObject clone = Instantiate(GameObject original, Vector3 position, Quaternion rotation);
e.g.,
GameObject clone = Instantiate(boxPrefab, Vector3.zero, rotation);
clone.name = "Box001"; // 이름 변경
clone.GetComponent<SpriteRenderer>().color = Color.black; // 색상 변경
clone.transform.position = new Vector3(2, 1, 0); // 위치 변경
clone.transform.localScale = new Vector3(3, 2, 1); // 크기 변경
for( int y = 0; y < 10; ++y)
{
// 내부 반복문 -> 격자의 x축 계산용
for (int x = 0; x < 10; ++x)
{
Vector3 position = new Vector3(-4.5f + x, 4.5f - y, 0);
Instantiate(boxPrefabs, position, Quaternion.identity);
}
}
for (int y = 0; y < 10; ++y)
{
for (int x = 0; x < 10; ++x)
{
if (x == y)
{
continue;
}
Vector3 position = new Vector3(-4.5f + x, 4.5f - y, 0f);
Instantiate(boxPrefabs, position, Quaternion.identity);
}
}