ComputerScience/Unity3D 2015. 5. 22. 03:09

유니티의 기본 스크립트

Function


Awake, Start

Awake나 Start는 Update가 실행되기 전에 한번만 실행됩니다.

또한 Awake가 Start보다 먼저 실행됩니다.

리셋, 초기화가 필요할 경우 여기에 작성하시면 됩니다.


Update

매 프레임마다 실행됩니다.


FixedUpdate

물리기반(rigidbody, AddForce)를 사용할 때 사용합니다.


OnGUI

매 프레임마다실행됩니다.

UI(글자, 그림, 버튼)을 표시합니다.


스크립트로 GUI를 만들 수 있습니다.

GUI와 GUILayout이 있습니다.(GUILayout은 크기, 위치지정을 한 번만 하면 됨)

간단한 게임이면 GUILayout으로, 정확도가 필요하다면GUI로 만드시면 됩니다.


Label : 텍스트를 출력해줍니다.

Box : 기본 틀 안에 텍스트를 출력해줍니다.(라벨과 별차이는 없음)

Button : 버튼을 만들어 줍니다.(버튼을 텍스처로 교체 가능함)

Toggle : On/Off 토글을 만들어줍니다.(boolean)

Slider : 최대와 최소값 사이의 정해진 슬라이더 버튼을 만듭니다.

Group : GUI를 그룹으로 묶어 줍니다.( 내부 생성되는 GUI는 상대좌표 )

Group자체는 화면을 기준으로 하는 좌표지만

내부에 생성되는 GUI는 상대좌표로 바 뀌게 됩니다.




OnTriggerEnter

충돌을 감지하여 명령을 실행합니다.

오브젝트에는 rigidbody, IsTriigger가 있어야 합니다.


OnCollisionEnter

충돌을 감지하여 명령을 실행합니다.

OnTriiggerEnter와의 차이점은 오브젝트를 통과되느냐 안되느냐 입니다.

OnCollisionEnter를 사용하면 오브젝트가 통과 되지 않습니다.


OnMouse

자주 쓰게 될 것 중에 하나가 OnMouse가 될 것 입니다.


Enter : 마우스가 오브젝트 위에 올라 왔을 때 한 번 작동합니다.

Over : 오브젝트 위에 올라 왔을때 매 프레임마다 작동합니다.

Exit : 오브젝트 위에서 벗어 났을 때 한 번 작동합니다.

Down : 오브젝트 위에서 "눌렀을 떄" 작동합니다.

Up : 오브젝트 위에서 눌렀다가 임으의 위치에서 "땟을 때" 작동합니다.

UpAsButton : 오브젝트 위에서 눌렀다가 오브젝트 위에서 "땠을 때 " 작동합니다.

Drag : 오브젝트를 계속 누르고 있을 때 작동합니다.


Mathf


Sin, Cos, Tan, Asin, Acons, Atan, Atan2는 모두 삼각함수입니다.


Sqrt : 제곱근을 계산해줍니다.

Abs : 절대값으로 나타내 줍니다.

Min, Max  : 최대값과 최소값을 선택해 줍니다.

Pow : 승을 나타 냅니다.(a^b)

Exp, Log : 자연로그와 일반로그, 상용로그값을 계산해 줍니다.


Ceil : 올림

Floor : 버림

Round : 반올림

Sign : -값이면 -1, +값이면 1로 표시함(0은 1로)

Clamp : 시작 값에서 시작하여 도착 값에 도착하면 정지됨

Lerp : 두 숫자를 더해 보정계수를 곱함(보정계수 0 ~ 1)

Repeat : 도착 값에 도착하면 처음부터 다시 시작함

PingPong : 시작 값과 도착 값 사이를 왕복하며 출력함


아무래도 그냥 계산용으로 사용 하시는 분은 없을 껍니다.

물체의 반복적인 움직임을 나타낼 때 사용하지 않을 까 합니다.

(아케이드 게임의 발판이나 불빛의 깜빡임, 스무스한 움직임 등..)


Mathf는 자체가 하나의 숫자로 결과값을 나타내기 때문에...

여러 개를 겹쳐서 사용하셔도 무방하며 그 자체로 변수가 됩니다.


Mathf.Sin(Mathf.Cos(Mathf.Tan) + 1) - 2 )


이런 식으로 사용 할수 있습니다.( 단 어떻게 될지 예측은 해야 겠죠)

많이 사용 하는 것만 추려서 설명하였습니다.(자세한 건 레퍼런스에)

대부분 Time.time을 사용하여 값을 얻게 될 겁니다.


Mathf.Sin(Time.time)


이런 식으로 사용 하면 Time.time 부분이 X의 값이 되어 싸인 곡선대로 출력

하게됩니다.(3.14초 주기로 반복적으로 값이 출력됨)




transform


transform.Translate


transform.Translate는 오브젝트를 이동 시키는 명령입니다.

transform.Translate(X, Y, Z); or transform.Translate(Vector3(X, Y, Z)); 로 표현합니다.


프레임이 기준이 되기 때문에 그냥 사용한다면 엄청난 속도로 이동하게 됩니다.

(초당 프레임이 100이면 100배의 속도로 이동하게 됩니다.)


속도를 리얼타임으로 제어하기 위해서 TIme.deltaTime을 사용해야 합니다.

(Time.deltaTime은 Awake나 Start에서는 사용할 수 없습니다.)


transform.Translate(X * Time.deltaTime, 0, 0); 

transform.Translate(Vector3(X, 0, 0) * Time.deltaTime);


이제 속도를 조절 할 수 있게 되었습니다.

방향을 조절하려면 X, Y, Z를 변경하시면 됩니다.


transform.Translate(Vector3(X, Y, Z)); 를 이용하여 방향을 조절합니다.

(Vector3는 3차원 단위좌표로 생각하시면 됩니다.(기준이 되는 크기를 말함))



    

각 좌표 벡터를 합친 방향을 나타냅니다.

Vector3(1, 0, 0)의 경우 X방향을 뜻하며

Vector3(1, 1, 0)의 경우 X, Y의 중간방향을 뜻합니다.


Vector3(1, 0, 0)은 다른 명령으로 대신 사용 할 수 있습니다.


Vector3(1, 0, 0) = Vector3.right

Vector3(-1, 0, 0) = Vector3.left

Vector3(0, 1, 0) = Vector3.up

Vector3(0, -1, 0) = Vector3.down

Vector3(0, 0, 1) = Vector3.forward

Vector3(0, 0, -1) = Vector3.back



transform.Rotate


transform.Rotate는 오브젝트를 회전 시키는 명령입니다.

transform.Rotate(X, Y, Z); or transform.Rotate(Vector3(X, Y, Z));로 표현합니다.


여기서 좌표는 축의 기준이 됩니다.

만약 (1, 0, 0)으로 값을 주게 된다면 X축을 기준으로 회전하게 됩니다.


X의 값을 준다면 X방향으로 회전하는 것이 나이라 Z방향으로 히전하게 될 것입니다.

X의 값은 회전하는 속도를 나타냅니다.

속도는 '각' 속도입니다.(1을 주면 초당 1도씩 회전)

리얼타임으로 변경하려면 Time.deltaTime을 사용합니다.


transform.Rotate(X * Time.deltaTime, 0, 0);

transform.Rotate(Vector3(X, 0, 0) * Time.deltaTime);


transform.Position


transform.Position는 오브젝트의 위치를 부여하는 명령입니다.

transform.Position = Vector3(1, 0, 0); or transform.position.x = 0;로 표현합니다.


오브젝트의 위치 값을 얻고 싶다면..

print(transform.position);명령을 사용 하시면 됩니다.

(명령 자체에 위치 자표가 포함 되어 있습니다.)


특정 좌표만 고정 하고 싶다면 tranform.position.x = X;를 사용하시면 됩니다.

X좌표로는 이동이 불가능하게 됩니다.


또한 부여된 위치는 고정 불변은 아닙니다. Time.time을 사용하면

transform.Translate처럼 움직일 수 있습니다.


transform.position = Vector3(1, 0, 0) * Time.time;

transform.position.x = 1* Time.time;