Clolent

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 를 곱하는게 더 빠르다고 한다. 

댓글 로드 중…

블로그 정보

Clolent - 커피물조절달인

최근에 게시된 글