Unity - 2nd Week

<학습목표>
Local과 Global 구별하기.
Object 회전시키기.
Vector에 대해 알아보기.
마우스 입력 받아보기.

Naming convention

함수명, 클래스명은 PascalCase
ex) Start() Update() Input KeyCode

변수명은 camelCase
ex) transform gameObject

Local과 Global 좌표계
부모 Object를 기준으로 계산되는 상대적인 위치를 Local Position이라고 한다.
부모 Object가 없다면 로컬과 글로벌값이 같다.
Object의 전체 월드 좌표를 Global Position이라고 한다.

ex) 부모가 (1,1,1)에 있고 자식이 부모로부터 (-1,-1.-1)에 있다면 
     자식의 Global Position은 (0,0,0)이다.

Inspector의 Transform에 표시되는 건 전부 Local값이다.
Local값들은 부모값에 상관없이 변하지 않는다.
Global값은 부모값에 따라 바뀐다.

또한 Local Position은 부모를 Rotate시켜도 변하지 않는다.
자식 Object의 Local정보는 부모 오브젝트가 만들어낸 좌표계를 기준으로 하기 때문에
부모 오브젝트를 회전해도, 자식 오브젝트의 Local입장에서 보면
아무 일도 일어나지 않은 것이다.

ex) 우리가 가만히 서있어도 지구의 자전 때문에 우주적 관점으로는 이동중이지만,
     우리의 Local좌표계인 지구를 기준으로는 우리는 가만히 있다.

오브젝트의 회전
transform.Rotate();
파라미터로 float형 변수 3개를 받는다.
각각 x,y,z값이며 회전축을 의미한다.
0,1,0의 경우 x로 0, y로 1, z로 0인 벡터, 
즉 양의 y축 방향으로 길이가 1인 회전축을 의미한다.
방향을 기준으로 돌고, 회전축 벡터의 길이가 클수록 빠르게 돈다.
음수를 넣어서 회전축을 뒤집으면 반대로 돈다.

Self회전과 World회전
transform.Rotate(0,1,0,Space.Self);와 
transform.Rotate(0,1,0,Space.World); 의 차이를 알아보자.

 


World회전은 World의 절대적인 y축을 기준으로 회전하고
Self회전은 나 자신의 기울어진 y축을 기준으로 회전한다.

마우스 키 입력
GetMouseButton
마우스가 눌린상태면 항상 true

GetMouseButtonDown
누를 때 한번만 true

GetMouseButtonUp
땔 떄 한번만 true

마우스의 위치 알기
마우스의 위치는 Input.mousePosition으로 알 수 있다.
이를 이용해서 FPS시점의 카메라 워크를 만들어보자.

<실습하기>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mousegetkey : MonoBehaviour {

// Use this for initialization
void Start () {
}
Vector3 recentPosition = new Vector3(0,0,0);
Vector3 deltaPosition;
// Update is called once per frame
void Update () {

deltaPosition = Input.mousePosition - recentPosition;

transform.Rotate (-0.1f * deltaPosition.y, 0, 0, Space.Self);
transform.Rotate (0, 0.1f *deltaPosition.x, 0, Space.World);
recentPosition = Input.mousePosition;
}
}

댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random