안녕하세요?


제가 프로그래밍을 어디서 배운 적이 없다 보니, 이래저래 이 코드들의 의미를 이해하기 위해서 상당히 애를 먹기는 먹었는데, 아무튼 간에 일단 알아 내기는 냈으니, 이제 그 관련된 내용을 포스팅 하도록 해 보겠습니다.


변수 += (Time.deltaTime / switchDuration);


이 코드가 이해가 되지 않았는데, 우선  A += B;A = A + B; 라는 의미가 있다고 합니다. 그래서 변수의 값을 점점 증가시키는 데 쓸수 있는데, 문제는 그 위에 있는 Time.deltaTime이라고 합니다.


어쩌면 가장 중요하다고 할 수 있는 것이 바로 Time.deltaTime이라고 하는데, 지난 프레임이 완료되는 데 까지 걸린 시간 단위로, 보통은 초 단위를 쓴다고 합니다. 문제는 이게 캐릭터의 이동 속도를 정하는데 다음과 같이 정해야 한다고 합니다.


캐릭터의 이동속도 = (1 프레임당 이동 거리 X 프레임 레이드) 1초;


왜 이렇게 하느냐 하면, 게임을 구동시키는 기기의 성능이 문제라고 합니다. 기기의 성능에 따라서 캐릭터의 이동 속도가 너무 차이가 나면 안되니, 이런 작업을 실행 한다고 합니다. 그래서 보통은 아래와 같은 코딩을 한다고 합니다.


void Update() {

    float 변수명 = Time.deltaTime*10;

    transform.translate (0,0,변수명);}


이런 식으로 해서 매 프레임당 10미터가 아니라 초당 10미터씩 움직이는 식으로 어떻게 만들 수 있다고 합니다. 결국 Time.deltaTime = 초/프레임 레이트 라고 합니다. 어찌보면 이게 더 중요한 것이 아니었나 합니다.


그리고 지난번 포스팅에서 인스턴스에 대해서 나온 말이 있는데, 그에 대해서는 아래의 링크를 타고 들어가서 한번 읽어봐 주셨으면 합니다.


링크: 유니티 독학하기 그 26번째 걸음




그리고 지난번 포스팅에서 이해하기 어려웠는데 먼저 하나하나 코드를 살펴 보도록 해 보겠습니다. 우선 가장 윗줄에 해당하는 GameObject 변수명; 이게 무슨 의미냐 하면, 말 그대로 게임 오브젝트라는 것을 선언하기 때문에 인스펙터 뷰에서 계층뷰에 있는 어떤 게임 오브젝트를 가지고 올 것이냐고 묻게 됩니다.


그리고 이어서 이어지는 변수명 =NGUITools.AddChild(parent, prefab); 이라는 코드를 붙여 주어서 원래는 인스펙터 뷰에서 일일히 끌어와야 하는 프리펩을 어디에 있다는 것을 알려 주어서 NGUI상에 있는 프리펩의 경로만 뒤에 있는 pregab란에 넣어주고, 앞에있는 parent에서는 이 스크립트가 속해있는 게임 오브젝트의 부모 오브젝트를 지정하면 된다. 이렇게 이해를 하였습니다.


다음으로 있는  변수명 = gameObject.AddComponent(typeof(컴포넌트)); 이라는 문장인데, 이 문장은 바로 특정한 컴포넌트를 게임 오브젝트에 붙여줄 때 사용한다고 합니다. 즉, 원래라면 유니티5 상에서 일일히 어떻게 붙여 줘야 하는 것인데, 이를 스크립트 상에서 어떻게 한다는 것입니다.


그럼 아래에 있는  FollowObject SliderFollowObject = progressSlider.GetComponent<FollowObject>(); 라는 문장의 의미는 바로 세세한 설정을 해야 하는데 그를 위해서 문저 GetComponent라는 문장을 써서 컴포넌트를 가져올 수 있는 변수 SliderFollowObject 가 FollowObject를 대신해서 작업할 수 있습니다. 그래서 아래에 있는 내용은 전부 FollowObject에서 정의를 일일히 해야 하는 내용입니다.


이를 드레그 앤 드롭으로 처리하는 것이 아니라, 코드를 통해서 지정을 할 수 있게 되는 것입니다. 


이것으로 어떻게 의문이 들던 코드의 내용을 해석하는 데는 성공했는데, 제 자신이 이걸 얼마나 자유자재로 사용할 수 있는지는 아직 모르겠다는 생각이 듭니다. 아무튼 조금만 더 해서 챕터6은 끝내도록 해 보겠습니다.

+ Recent posts

티스토리 툴바