7-7. 크기에 따라 난간 갯수가 변하는 울타리 만들기

다이나믹콤포넌트 강좌도 슬슬 막바지로군요. 이번시간에는 다이나믹 콤포넌트의 핵심기능인 copy 기능을 이용해서 난간갯수가 자동으로 바뀌는 울타리를 만들어보도록 하겠습니다.

0. 준비물 및 콤포넌트 확인하기

아래 skp 파일을 다운받아 두세요. 흔히 볼수 있는 난간의 부속품들입니다.

railing_ex.zip

1) 예제로 사용된 rail 콤포넌트는 총 3개의 하위 콤포넌트로 되어 있습니다.

railleftend(왼쪽 끝 기둥) , railinner(반복될 안쪽 난간) , rail_horizon(울타리의 가로대)

구조를 잘 확인해두세요.

1.Copy의 구조 이해하기

오늘 사용할 Copy의 구조에 대해 우선 집고 넘어가도록 하겠습니다. 알고보면 쉬운데, 개념을 잡기 쉽지 않아서 삽질 꽤 했던 기억이 있는 기능입니다.

2) copy에서 이해해야 하는 부분은 2가지입니다.

첫번째로, copies라는 Attribute 가 있습니다. 이 Atrribute는 복사될 갯수를 정합니다. 1이라고 입력하면, 1개를 복사합니다. 즉, 동일한 오브젝트가 2개가 됩니다. 단, 숫자를 아무리 입력한다고 해도, 겉보기엔 똑같습니다. 하지만 실제로 복사는 되어있습니다. 같은 자리에 복사되기 때문에 티가 나지 않기 때문입니다.

그럼, 위치나 각도등을 다르게 하려면? 두번째로 copy라는 변수가 필요합니다. 복사된 각 객체마다 copy를 다른 값으로 가지게 됩니다. 원본은 copy 가 0입니다. 첫번째 복사된 객체는 1이 됩니다, 두번째는 2가 되지요. 복사가 늘어날수록 늘어나게 됩니다. 이를 수식에 넣어서 위치나 각도를 변화할수 있게 됩니다.

예를 들어 복사할때마다 X값을 10씩 옮기고 싶다면 X에 copy*20 이라고 입력하시면 됩니다.

아, copies 에 1을 입력하면, 총 2개가 화면에 나옵니다. 원본이 있는 상태에서 1개를 복사하니까 원본이랑 복사#1 이렇게 2개죠. 초반에 이거 은근 @ㅂ@ 헷갈려요. 2개가 필요하면 1을 입력해야 한다는거, 5개가 필요하면 4개가 필요하다는거.

2.Attribute 설정하기

3) 우선, 크기를 변화해도 왼쪽끝의 기둥크기가 바뀌지 않도록 가로와 세로를 고정합니다. rail_leftend 에 lenX 와 lenY Attribute 를 추가한뒤, 각각 =10으로 입력해주세요.

LenX  =10
LenY  =10

4) 중간의 난간도 마찬가지로 크기를 고정해줍니다. 각각 =10 과 =2를 입력해주세요.

LenX = 10
LenY = 2

자, 크기를 고정했으니….. 슬슬 산수를 시작해봅시다. ^^;;;;;

이제 할일은 크기에 맞춰서 난간갯수를 늘려주는 일만 남았는데요… 여기서 관건은 난간갯수가 몇개가 되어야 하는건가? 입니다. 크기에 따라 달라지니까 계산식이 필요합니다.

자, 10cm 간격을 배치하려면? 계산식이 어떻게 될까요?

첫째 전체 길이에서 난간의 길이를 나누면 갯수가 나올 듯 합니다. 하지만, 간격도 계산해야 하니, 난간폭 10cm 와 간격 10cm 를 합쳐야겠죠? 그럼 간격은 20cm 가 되니 전체를 20cm 로 나눠주면 될 것 같습니다.

= rail!LenX/20

그런데 이걸로는 정확하지 않습니다. 왼쪽 기둥이 있으니 전체 길이에서 가장 왼쪽 기둥(rail_leftend)의 길이는 빼고 계산해야 갯수가 맞습니다. 기둥이 10cm 고 간격이 10cm이니 역시 20을 빼줘야 합니다.

= (rail!LenX-20)/20

5) 자, 해봅시다. copies 를 추가하고 아래와 같이 입력합니다.

6) 처음에는 0이 표시됩니다. 왜냐하면 길이가 짧아서 복사가 되지 않았기 때문입니다. 크기를 늘리면 숫자가 커지는 것을 확인할수 있습니다.

하지만, 화면상에는 1개만 보입니다. 난간이 겹쳐져서 그렇게 보이는 거고, 실제 Outliner 로 확인해보면 4개가 있는 걸 확인할 수 있습니다.

이제 위치를 바꿔봅시다. X 가 가로위치를 설정하니 이 값을 조정합니다.사용할 것은 copy 라는 함수입니다. 각 난간마다 0,1,2,…. 이런식으로 적용됩니다.

자, 다시 산수시간입니다.^^;;; 다만 앞서 좀 해놔서 쉬워요.

앞서 난간의 간격은 이미 나왔습니다. 20cm였죠? 난간마다 20씩 가로로 움직이니까 copy에 20을 곱해주면 됩니다.

= copy*20

이걸로 끝일까요? 아니죠. 끝 기둥을 감안해야 합니다. 기둥간격만큼 20을 더합니다.

= (copy*20)+20

이제 된것 같습니다. X를 추가하고 위 계산식을 입력합니다.

짠,~~ 이쁘게 배치되는군요~

이제 크기를 바꾸면, 알아서 늘어나는 난간을 확인할 수 있을꺼에요~

[팁] 크기조정툴 편하게 쓰기

요건 팁인데 크기 조정툴을 세팅해서 불필요한 기즈모를 제거하면 실제 작업할때 훨씬 편하게 작업하실수 있습니다. 가끔 엉뚱한거 클릭안해도 되서 개꿀. =ㅂ=b!!

난간의 경우 양옆으로만 커지면 되므로, 나머지는 꺼버립시다.

7) rail 콤포넌트에 scaletool을 추가합니다.

detail 버튼을 눌러 설정창을 띄운다음, 아래와 같이 x축을 제외하고 모두 체크해제하세요.

설정하고 나면 x축방향만 나와서 편하게 사용하실수 있을 것입니다.

맺음말.

이정도만 해도 왠만한 건 다 만드실수 있을 것입니다. 남은 건 상상력을 얼마나 발휘할지, 그리고 그걸 어떻게 잘 구현할지에 달려있다고 볼수 있습니다.

그럼, 다음시간에는, 다이나믹 콤포넌트의 마지막 시간으로 상상력을 발휘하는 시간.

시간과 분을 입력하면 자동으로 바뀌는 시계를 만들어보고 다이나믹 콤포넌트 강좌를 모두 마무리해보도록 하겠습니다.