K-digital traning/3D 콘텐츠 제작

Placid Plastic Duck Simulator - 개발일지5

내꺼블로그 2023. 10. 11. 16:12

얼추 물도 구현하고 부력도 그럭저럭 적용해보았으니 이제 환경을 좀 꾸며보도록 하쟈,,

 

 

 

 

먼저 오리가 노는 공간인 수영장을 마련해보았다.

수영장 관련 에셋을 찾던 중 꽤 괜찮은 무료 에셋을 발견하여 임포트해보았다.

 

https://assetstore.unity.com/packages/3d/environments/exterior-swimming-pool-161671

 

Exterior Swimming Pool | 3D 주변환경 | Unity Asset Store

Elevate your workflow with the Exterior Swimming Pool asset from IZaRTaX. Find this & other 주변환경 options on the Unity Asset Store.

assetstore.unity.com

 

 

 

 

꽤 이쁘장한 아이가 와주었다.

전에 만들어놓은 water plane 하나로는 이 넓은 수영장을 채울 수 없으므로 여러 개를 이어 하나의 water plane으로 만들고 위치를 조정해 보았다.

그랬더니 물들 사이가 찢어져있는 채로 물결이 따로 노는 양상을 띠고 있었다.

mesh 내의 vertex들의 좌표값을 넣어주는 과정에서 좌표값이 world좌표로 들어가지 않아서 생긴 문제로 보인다.

world 좌표로 값을 변경해주기 위해 water plane 개개의 position 값을 vertex들에게 추가로 더해주었다.

또 물결이 찢어져 보이는 것을 방지하기 위해 각각의 water plane들을 좀 더 겹쳐서 이어붙여보았다.

 

 

 

 

수정을 하였음에도 plane을 겹쳐놓은 탓에 수직으로 바라보았을 때는 다소 엉망이긴 하다만;;; 아직은 측면만 바라보게 할 예정이니까(?) 지금 시점에서는 큰 무리는 없다.

(좀 더 나중에는 파장 부분을 수정해보아야겠다.)

다음으로 오리가 제대로 뜨고 있는지 실험해보았다.

 

 

 

 

실험 결과 오리가 수면보다 낮게 떠있었다.

가라앉았다고 하기에는 오리가 물결따라 둥실둥실 움직이고 있었는데 알고보니 getwaveheight함수의 return값이 단순히 mesh의 vertex위치 y값만을 집어넣었기 때문이었다.

vertex의 위치값은 mesh내에서의 값으로 world좌표가 X

따라서 getwaveheight함수에 추가로 water plane 오브젝트의 position.y값을 더해주었다.

 

 

 

 

 

또한 수영장 주변 바닥을 구현하기 위해 terrain을 사용하였다.

https://learnandcreate.tistory.com/500

 

유니티에서 페인트 텍스처 사용하기(paint texture)

유니티에서 페인트 텍스처 사용하기(paint texture) 1)씬에 터레인을 생성한다. 텍스처 추가 이전의 터레인은 표면이 checkerboard 패턴으로 표시된다. 2)터레인에 텍스처를 페인트하기위하여 터레인 레

learnandcreate.tistory.com

 

terrain으로 땅을 만들고 땅에 texture를 입혀 잔디를 나타내보았다.

terrain을 단순히 수영장 높이와 비슷하게 위치시켜놓았더니 terrain이 수영장을 뒤덮는 상황이 발생하였다.

이에 대해 terrain의 위치를 수영장 위치에 고려하여 배치하는 것을 생각해보다가 paint hole이라는 기능을 발견하여 이를 통해 수영장 부분에 구멍을 내줌으로써 해결하였다.

 

 

 

 

 

좀 더 예쁜 하늘을 구현하기 위해 skybox를 import하였다.

https://assetstore.unity.com/packages/2d/textures-materials/sky/skybox-series-free-103633

 

Skybox Series Free | 2D 하늘 | Unity Asset Store

Elevate your workflow with the Skybox Series Free asset from Avionx. Browse more 2D 텍스처 및 소재 on the Unity Asset Store.

assetstore.unity.com

나름 더 사실적인(?) 느낌을 내보겠답시고 skybox에 있는 해의 방향과 unity 내 directional light의 방향을 나름 맞춰보려고는 했다,,,ㅎ

 

 

 

 

 

 

 

 

또 오리가 수영장에 부딪힐 수 있도록 오리에 콜라이더를 부여하였다.

바로 실행시켰을 때는 water의 mesh collider와 부딪혀서 오리가 공중에 떠있는 듯한 모양새가 나왔다.

이를 해결하기 위해 Duck, Floating, Water Layer를 추가하여 Project Setting을 다시 설정하였다.

 

Layer 추가

 

 

 

physics setting

 

 

 

 

다시 돌려보니 오리가 고꾸라진다,,,  오리 머리가 앞으로 나와있는 모양새여서 무게중심이 잘 잡히지 않는 모양인 듯 하다.

콜라이더를 살짝 더 뒤로 빼주고 오리에 붙어있는 floating object의 position과 rotation값을 조정해보았다.

콜라이더 위치를 살짝 뒤로 빼보았다.(부리야 미안해,,,)