#UE4 | @UNREALENGINE
コード1/2
import unreal
import numpy as np
import sklearn
from sklearn.cluster import KMeans
bp_instance = unreal.EditorAssetLibrary.load_blueprint_class('/Game/BP_Instance.BP_Instance')
list_actors = unreal.EditorLevelLibrary.get_selected_level_actors()
list_static_mesh_actors = unreal.EditorFilterLibrary.by_class(list_actors,unreal.StaticMeshActor)
list_unique = np.array([])
for lsm in list_static_mesh_actors:
static_mesh = lsm.get_component_by_class(unreal.StaticMeshComponent).get_editor_property("StaticMesh")
list_unique = np.append(list_unique,static_mesh)
list_unique = np.unique(list_unique)
for lu in list_unique:
list_transform = np.array([])
list_locations = np.array([[0,0,0]])
80.
#UE4 | @UNREALENGINE
コード2/2
for lsm in list_static_mesh_actors:
if lsm.get_component_by_class(unreal.StaticMeshComponent).get_editor_property("StaticMesh") == lu:
list_transform = np.append(list_transform,lsm.get_actor_transform())
location = np.array([[lsm.get_actor_location().x,lsm.get_actor_location().y,lsm.get_actor_location().z]])
list_locations = np.append(list_locations,location,axis=0)
list_locations = np.delete(list_locations,0,axis=0)
num_clusters = 3
pred = KMeans(n_clusters=num_clusters).fit_predict(list_locations)
instanced_components = np.array([])
for i in range(num_clusters):
instanced_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_instance,(0,0,0),(0,0,0))
instanced_component = instanced_actor.get_component_by_class(unreal.InstancedStaticMeshComponent)
instanced_components = np.append(instanced_components,instanced_component)
for j, pd in enumerate(pred):
instanced_components[pd].add_instance(list_transform[j])
for k in range(num_clusters):
instanced_components[k].set_editor_property("StaticMesh",lu)
for lsm in list_static_mesh_actors:
lsm.destroy_actor()