유니티 5 자바스크립트 코딩 팁:
#pragma strict : 선언하지 않는 변수의 사용을 금지시키기.
이동: 오브젝트.transform.Translate(방향 * 속도)
회전: 오브젝트.transform.Rotate(방향 * 속도)
크기: localScale = Vector3(x, y, z)
힘 가하기: 오브젝트.GetComponent.<Rigidbody>().AddForce(방향
* 힘)
목표물 주시: transform.LookAt(Transform)
일정시간 대기하기:
yield WaitForSeconds(<대기할 시간(초)>): 지정 시간 동안 CPU를 다른 프로세스에
양보하기. 지정 시간이 지나면 그 이후 문장 처리
ex) yield WaitForSeconds(0.5); //0.5초 대기
프리팹 생성: Instantiate(<프리팹>,<생성 위치>,<생성
각도>);
Input.GetAxis("Horizontal") 좌우 이동키 눌렀을 때 이동방향
Input.GetAxis("Vertical") 상하 이동키 눌렀을 때 이동방향
Input.GetKeyDown() 특정 키를 눌렀는지 여부
Input.GetButtonDown() 특정 키를 눌렀는지 여부
Input.GetMouseButtonDown() 마우스 버튼을 눌렀는지 여부
Input.GetTouch() 스마트폰의 화면을 터치 했는지 여부
ex)
var hor: float = Input.GetAxis("Horizontal"); //좌우 (a,
d)
var ver: float = Input.GetAxis("Vertical"); //상하 (w,
s)
충돌판정:
OnCollisionEnter(Collision) 충돌 후 반사 등의 수학적 계산 수행
OnTriggerEnter(Collider) 충돌 후 반사 등의 수학적 계산 수행 안함.
목표물 탐색(Raycast):
가장 가까운 물체 탐색: Physics.Raycast(<기준점>,<방향>,<hitinfo>,<거리>)
전체탐색: Physics.RaycastAll(<기준점>,<방향>,<hitinfo[]>,<거리>)
지정한 범위 탐색: Physics.Linecast(<시작점>,<끝점>,<hitinfo>)
탐색결과는 RaycastHit Class로 구해짐. 정보 중 중요한 것:
distance: 탐지한 물체까지의 거리
collider: 탐지한 물체의 충돌체
rigidbody: 탐지한 물체의 리지드 바디
transform: 탐지한 물체의 위치 정보
<충돌체>.transform.parent 충돌체의 부모 오브젝트
<충돌체>.transform.root 충돌체의 최상위 오브젝트
물체 제거하기:
Destroy(<충돌체>.gameOobject);
소리 내기:
AudioSource.PlayClipAtPoint(낼 소리, 위치);
ex) AudioSource.PlayClipAtPoint(explosionSnd, transform.position);
//폭파 사운드 출력
메시지 보내 다른 오브젝트 함수 실행하기:
Object.SendMessage(<"실행할 함수명">, [<파라미터 리스트>],
[<옵션>]); - 파라미터 리스트와 옵션은 생략 가능.
ex) col.SendMessage("SetAsteroid", SendMessageOptions.DontRequireReceiver);
//충돌체의 SetAsteroid 함수 실행시키기. SendMessageOptions.DontRequireReceiver은
함수 실행 후 반환 값이 필요치 않을 때 처리 결과 반환 받지 않도록 함으로써 시스템 지연 방지.
범위 확인 처리:
Mathf.Clamp(<조사할 값>,<최소값>,<최대값>) 조사 값이 최소 값과
최대 값 사이이면 원래 값이 구해지고 벗어날 경우 각각 최소, 최대값을 얻는다.
ex) transform.position.x = Mathf.Clamp(transform.position.x, -29,
29); 이것은
if(transform.position.x < -29) transform.position.x = -29;
if(transform.position.x > 29) transform.position.x = 29; 와
같은 내용.
로컬 좌표를 글로벌 좌표로 바꾸기:
transform.TransformDirection(Vector3)
ex) var fwd = Vector3.forward; //로컬 좌표
var fwd = transform.TransformDirection(Vector3.forward); //글로벌
좌표
자신 중심, 월드 좌표 중심:
Space.Self 자신을 기준으로 한 로컬좌표
Space.World 게임뷰를 기준으로 한 월드좌표
ex) transform.Rotate(Vector3(amtRotX,amtRotY,amtRotZ),Space.Self);
//자신 중심 회전
transform.Translate(Vector3(-amtX, amtY, 0),Space.World); //게임뷰
중심 이동
원을 그리며 이동하기:
RotateAround(<중심점>,<회전축>,<회전각도/sec>);
ex) transform.RotateAround(Vector3.zero, Vector3.up, amtRot);
화면에 표시하기:
function OnGUI(){ GUI.Label(Rect(x,y,width,height), "표시내용"+<점수>);
}
ex) function OnGUI(){
//Rect(x, y, 넓이, 높이)
GUI.Label(Rect(10,10,120,20), "명중: "+hit);
GUI.Label(Rect(10,30,120,20), "피격: "+hited);
}
Debug 출력:
Debug.Log(<디버그 정보>); 콘솔창에 문자열 출력
print(<디버그 정보>); 콘솔창에 문자열 출력
Debug.DrawRay(<위치>,<길이>,<컬러>); 화면에 직선 표시
Debug.DrawLine(<시작점>,<끝점>,<컬러>); 화면에 직선 표시
속도 = 거리 / 시간
거리 = 속도 * 시간
매 프레임 이동 거리 = 속도(m/s) * Time.deltaTime
난수 만들기:
r = Random.Range(작은수, 큰수); 작은 수 <= r < 큰 수 사이의 임의의 수 생성
|