우주 청소게임 만드는 중임.
쓰레기를 래프트마냥 하나씩 줍고있으면 유저들의 속이 터질게 분명했기 때문에,
기본적인 기능으로 쓰레기를 한번에 빨아들이는 기능을 추가했음.
빨아들이는 효과는 슬라임랜처를 참고했음

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

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

무조건 플레이어쪽으로 당겨오면 어색하기 때문에 플레이어-물체 벡터를 두 성분으로 나눴음
Vector3.Project 함수는 두번째 파라미터가 onNormal로, 해당 벡터에 떨군 정사영 벡터를 반환해줌.
따라서 -proj와 proj-toObj 로 중앙으로 향하는 벡터와 플레이어로 향하는 벡터로 나눌 수 있었음

이런식으로 사용가능함.
근데 그냥 이렇게하면 문제가 발생함

우주게임 특성상 모든 물체의 linearDamping 은 0으로 설정해뒀음.
근데 물체는 들어올때의 속도와 나갈때의 속도가 같음 ( 정확히는 camDir에 수직인 속도벡터만 )
따라서 빨아들이지 못하고 반대편으로 날라가는 경우가 자주 생기게 됨
이를 해결하기 위해서 물체의 linearDamping을 높였음.
(빨아들이는 거 뿐만이 아니라 평소에도 멀리 날라가면 찾으러가는게 일이니깐)

linearDamping을 적당히 조절하면 위와같이 중앙으로 빨리면서 내쪽으로 오게됨
실제 실행해보면 아래와 같음

조정이 조금 필요하긴 하겠지만 굉장히 맘에듦
그냥 빨아들이는 것만 있으면 재미없을 것 같아서 큰 물체를 부순 후에 빨아들이는것도 만들어봤음
당연히 부수는건 Demolisher Asset을 사용했음.

근데 이 Demolisher의 단점은 런타임에만 부수는게 가능하다는 거임ㅠㅠ
여기선 MeshFilter를 사용해서 최적화하기 때문에 Prefab으로도 만들어지지가 않음
멀티플레이 상에서 부서지는걸 보여주려면 각 조각이 모두 NetworkPrefabList 위에 올라가있어야 하기 때문에.
어쩔수없지만 수작업으로 메시를 얻어야함.

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

그래픽스 수업에서 봤던 obj 파일과 구글링을 통해 obj 파일로 만드는 함수를 만듦.
(string 많이 수정해야될때는 StringBuilder 애용합시다.)
그다음에 저장된 obj 파일을 유니티에 가져오면 에러가 남 .

대충 obj를 자동으로 fbx 로 변환하는 중에 에러가 난 것 같음
그냥 보기에는 이상한게 없긴한데 혹시 모르니깐...
나는 이걸 변환하는 재주가 없기 때문에 blender에서 import/export 로 전부 fbx로 변환해줌

이제 얘네를 prefab으로 만들고 NetworkPrefabList에 등록한다음에
큐브 사라질때 단체로 소환해주면됨

터질때 너무 세게 터지는데, 이건 힘을 준게아니라 최적화때문에 다 CubeCollider 썻더니 충돌처리때문에 이렇게 됨..
그냥 MeshCollider 에다 IsConvex 써야될듯
이번주도 알찼다.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.