transform.Translate ( Vector 3 )
해당 컴퍼넌트가 적용되는 오브젝트의 Transform 컴퍼넌트의 위치를 Vector 3 의 위치로 이동시켜주는 명령어 !
transform.localPosition 혹은 transform.localPosition.x ( 혹은 y 혹은 z )
C# 스크립트를 통해서 실제 오브젝트의 Transform 컴퍼넌트의 값에 접근하고자 할 때 쓰이는 문법. 여기서 점이
" ~의 " 역할을 해준다고 생각하면 될듯하다. 당연히 해당위치를 나타내는 것일 테고, 그냥 localPosition 은 Vector3 형태일것이고 x y z 로 지정 해주면 그냥 float 로 나올 것임이 분명 하다.
new Vector 3 ( x , y , z )
벡터3 값을 넘겨줘야 하는데 그냥 넘겨줄수없고 Vector3 에 담아서 넘겨줘야 하나보다....그냥 그렇구나하고
쓰면 될듯
러닝게임을 만들때 무한히 나오는 맵
우리가 무한히 반복되는 맵을 만들고 싶은데, 이걸 그냥 쭈우우우욱 길게 만들어서는 메모리가 답도없이 늘어날 것이다. 그리고 실제로 캐릭터는 가만히 있는데 움직이는 것처럼 느끼고 싶다면 ( 실제 러닝 게임들이 이렇다. )
캐릭터는 제자리에서 그냥 달리는 모션만 취하고 있고, 배경들이 왼쪽으로 이동하는것이다 그렇다면 상대적으로 캐릭터가 앞으로 가는 것처럼 우리는 느끼게 될것이다.
자 이제 문제가 생길것이 뻔하다. 배경이 왼쪽으로 이동하다 보면 우리는 배경의 끝을 보게될것이다.
그렇다면 어떻해 하느냐, 위에 있는 것들로 모두 해결이 가능하다.
void Update( ){
transform.Translate( -0.1f , 0, 0);
※ 매 프레임마다 왼쪽으로 0.1 씩 이동하게 될것이다 영원히!
if ( transform.localPosition.x < -2560.0f ) {
※ 이친구를 보라 x 축이 어디 이상까지 작아졌다면 ?? 밑에 줄을 실행하라 !
transform.localPosition = new Vector3(-1280.0f, 0, 0);
※ 바로 기존 배경화면에 새로운 좌표를 부여해서 순간이동 뿅 이제 플레이어는 영원히
끝나지 않는 배경화면을 보게될것이다. 자기가 움직이는줄알면서 말이지 ! 멍청하긴
}
}
나는 ( 우리는 ) 이미 배운 사람이므로 이 코드에 크나큰 문제가 있다는 것을 알수있다. 바로 " 움직이는 " 작업을
하게되는데 Time.deltaTime 이 사용되지 않았다는 것이다. 따라서 이 코드는 바뀌어야만 한다.
public float speed 라는 변수를 선언해서 대충 어떤 숫자를 주고
transform.Translate ( -0.1f , 0 , 0 ) 을 이렇게 바꾸지 transform.Translate ( speed * Time.deltaTime * ( -1 ) , 0 , 0 )
훌륭하군
※ Public 을 사용하여, 사영자 변수를 사용할경우, 스크립트 값 보다 Inspector 값이 더 우선인것을 기억하자
소소한 팁이지만 기억하자, 러닝게임에서 가까운 배경은 빨리 움직이고 멀리있는 배경은 천천히 움직이면
좀더 나은 " 공간감 "을 줄수 있다.
Screen.height
유니티에서 기본적으로 제공하는 Screen 함수중 현재 게임화면의 세로 해상도를 가져오는 기능을 한다.
※ 1/2 보다는 0.5 를 곱하는게 더 빠르다고 한다.