런타임중에 UGeometryCollectionComponent에 RestCollection의 데이터를 ModifyAttribute를 이용하여 데이터 변경한 후 적용하려 하는데 RebuildRenderData() 함수가 에디터 전용이라 빌드에서 사용할 수 없는데 다른 이용 가능한 기능이 있을까요
런타임중에 변경하고 싶은 데이터는 “MaterialID” 입니다
런타임중에 UGeometryCollectionComponent에 RestCollection의 데이터를 ModifyAttribute를 이용하여 데이터 변경한 후 적용하려 하는데 RebuildRenderData() 함수가 에디터 전용이라 빌드에서 사용할 수 없는데 다른 이용 가능한 기능이 있을까요
런타임중에 변경하고 싶은 데이터는 “MaterialID” 입니다
재현 방법
안녕하세요
문의주신 내용 확인하여 답변드리겠습니다.
감사합니다.
안녕하세요.
런타임 중 Material이나 RestCollection을 변경하는 것이 목적이라면,
SetMaterial 및 SetRestCollection 노드를 사용하여 Material이나 RestCollection을 변경할 수 있습니다.
[Image Removed]
혹시 어떤 이유로 런타임 중에 MaterialID를 변경해야 하는지 알 수 있을까요?
어떤 사용 사례 때문에 GeometryCollection에 직접 접근해서 해당 속성을 수정하려고 하시는지 궁금합니다.
감사합니다.
실시간으로 깨질때마다 깨진 조각에 대해서만 디졸브 머티리얼을 적용하고 싶습니다. 물리 상태를 초기화 하지 않기위해 EditRestCollection을 호출할 때 EEditUpdate::None을 매개변수로 사용하였습니다
안녕하세요.
사용하신 바와 같이 RestCollection 내부의 Attribute를 직접 수정하는 방식은 이를 공유하는 모든 액터들에게 영향을 줄 수 있을 것 같아 보입니다.
아래 사진과 같이 FractureMode 에서 MaterialSlot을 추가하고, 원하는 조각에 할당할 수 있습니다.
[Image Removed]
이후, DynamicMaterialInstance를 생성하고 OnChaosBreakEvent 등을 활용하여 MaterialParameterValue를 변경하면 원하는 동작을 구현할 수 있을 것입니다.
[Image Removed]
Chaos Destruction - Fracture and Clustering | Tutorial
에픽의 위 문서에는 Material & UV Setting에 관한 튜토리얼이 있으며, 이를 참고하시면 도움이 될 것입니다.
또한, RestCollection의 옵션 중 Removal을 커스터마이징하여 활용하면, 별도로 디졸브할 필요가 없는 작은 조각들이 스케일이 줄어들며 사라지도록 제어할 수 있을 것으로 보입니다.
[Image Removed]
감사합니다.
제 생각엔 필요한 부분에 대한 전달이 잘못된것 같습니다.
두 기능에 대한 존재는 인지하고 있습니다.
1번과 2번 모두 적합한 기능이 아닌것 같습니다..
또한 “RestCollection 내부의 Attribute를 직접 수정하는 방식은 이를 공유하는 모든 액터들에게 영향을 줄 수 있을 것 같아 보입니다.”
이 부분에 대한 내용도 인지하고 있어
UGeometryCollection* NewRestCollection = DuplicateObject<UGeometryCollection>(RestCollection, Component);
FGeometryCollection* NewCollection = new FGeometryCollection();
두개를 복제하여 사용함으로써 우회한 상태입니다
우선은 요청한 사항에 대한 기능이 있는지 엔진코드를 수정하지 않고 우회할 수 있는 방법이 있는지 등에 대한 답변이 필요합니다.
깨진 조각을 디졸브 시켜 사라지게 할 때 추가 슬롯에 할당한 디졸브 머티리얼을 RestCollection의 데이터를 바꿔 깨진 조각에만 적용되도록 하는 방법을 생각하여 질문한 것이고 이것에 적합한 기능에 대해서만 답변을 주시면 감사하겠습니다..
안녕하세요.
RestCollection의 Attribute중 하나인 MaterialID를 에디터가 아닌 패키징 환경에서 변경하여 업데이트하는 기능은 별도로 제공되지 않습니다.
진행하신 방법으로 구현하려면 RebuildRenderData 함수 또는 관련된 다른 함수들의 엔진 코드를 수정하시거나
확장해야 할 것으로 보이며, 말씀하신 기능은 FFractureEngineMaterials::SetMaterial 과 유사한 것으로 보입니다.
자세한 내용은 UFractureToolMaterials::ExecuteFracture 함수를 참고하면 도움이 될 것 같습니다.
감사합니다.