우주 청소게임 만드는 중임.


쓰레기를 래프트마냥 하나씩 줍고있으면 유저들의 속이 터질게 분명했기 때문에,


기본적인 기능으로 쓰레기를 한번에 빨아들이는 기능을 추가했음.


빨아들이는 효과는 슬라임랜처를 참고했음



24b0d121e09c28a8699fe8b115ef046c66f0214998


부드럽게 빨려가는게 AddForce로 해야될것같아서 일단 rigidbody로 구현함



24b0d121e09c28a8699fe8b115ef046c68f92d4c


이런식으로 중앙으로 빨려가면서 플레이어쪽으로 당겨와야된다고 생각했음



24b0d121e09c28a8699fe8b115ef046f5b489c9d

무조건 플레이어쪽으로 당겨오면 어색하기 때문에 플레이어-물체 벡터를 두 성분으로 나눴음


Vector3.Project 함수는 두번째 파라미터가 onNormal로, 해당 벡터에 떨군 정사영 벡터를 반환해줌.

따라서 -proj와 proj-toObj 로 중앙으로 향하는 벡터와 플레이어로 향하는 벡터로 나눌 수 있었음



24b0d121e09c28a8699fe8b115ef046c62f92e46


이런식으로 사용가능함. 


근데 그냥 이렇게하면 문제가 발생함



24b0d121e09c28a8699fe8b115ef046f564d9d9f


우주게임 특성상 모든 물체의 linearDamping 은 0으로 설정해뒀음.


근데 물체는 들어올때의 속도와 나갈때의 속도가 같음 ( 정확히는 camDir에 수직인 속도벡터만 )


따라서 빨아들이지 못하고 반대편으로 날라가는 경우가 자주 생기게 됨


이를 해결하기 위해서 물체의 linearDamping을 높였음. 

(빨아들이는 거 뿐만이 아니라 평소에도 멀리 날라가면 찾으러가는게 일이니깐)



24b0d121e09c28a8699fe8b115ef046f564e9b99


linearDamping을 적당히 조절하면 위와같이 중앙으로 빨리면서 내쪽으로 오게됨


실제 실행해보면 아래와 같음

2ab4d677abd531a04e81d2b628f1756c818fa2941b5b


조정이 조금 필요하긴 하겠지만 굉장히 맘에듦




그냥 빨아들이는 것만 있으면 재미없을 것 같아서 큰 물체를 부순 후에 빨아들이는것도 만들어봤음

당연히 부수는건 Demolisher Asset을 사용했음.



24b0d121e09c28a8699fe8b115ef046c63f82f4b


근데 이 Demolisher의 단점은 런타임에만 부수는게 가능하다는 거임ㅠㅠ


여기선 MeshFilter를 사용해서 최적화하기 때문에 Prefab으로도 만들어지지가 않음


멀티플레이 상에서 부서지는걸 보여주려면 각 조각이 모두 NetworkPrefabList 위에 올라가있어야 하기 때문에.


어쩔수없지만 수작업으로 메시를 얻어야함.



24b0d121e09c28a8699fe8b115ef046f5e489c9c


위는 Mesh Demolisher 코드 중 일부임.


대충 메시를 만들고있는것 같은 코드이므로, 이걸 persistentDataPath 아래에 obj 형태로 저장할거임.



24b0d121e09c28a8699fe8b115ef0469903ef1b5


그래픽스 수업에서 봤던 obj 파일과 구글링을 통해 obj 파일로 만드는 함수를 만듦.


(string 많이 수정해야될때는 StringBuilder 애용합시다.)


그다음에 저장된 obj 파일을 유니티에 가져오면 에러가 남 .


24b0d121e09c28a8699fe8b115ef046c64f92f46


대충 obj를 자동으로 fbx 로 변환하는 중에 에러가 난 것 같음


그냥 보기에는 이상한게 없긴한데 혹시 모르니깐...


나는 이걸 변환하는 재주가 없기 때문에 blender에서 import/export 로 전부 fbx로 변환해줌



24b0d121e09c28a8699fe8b115ef046c60f92c4d


이제 얘네를 prefab으로 만들고 NetworkPrefabList에 등록한다음에


큐브 사라질때 단체로 소환해주면됨



2ab4d674abd531a04e81d2b628f1756caa35b791c361


터질때 너무 세게 터지는데, 이건 힘을 준게아니라 최적화때문에 다 CubeCollider 썻더니 충돌처리때문에 이렇게 됨..


그냥 MeshCollider 에다 IsConvex 써야될듯


이번주도 알찼다.