Ejemplo n.º 1
0
def SpawnSurroundingActor(ActorToSpawn, Core, CenterObject, Distance=10, NumberOfWalls=0) :
  if NumberOfWalls <= 0 : NumberOfWalls = Distance

  spawningActorAsset = unreal.EditorAssetLibrary().find_asset_data(ActorToSpawn)
  spawningActorObject = spawningActorAsset.get_asset()

  level_actor_list = unreal.EditorLevelLibrary().get_all_level_actors()

  for a in level_actor_list:
    if a.get_name() == Core : core_object = a
    if a.get_name() == CenterObject : center_object = a
  
  ForwardVector = center_object.get_actor_forward_vector()
  PerpendicularVector = unreal.Vector(1, 1, ((ForwardVector.x + ForwardVector.y) * -1) / ForwardVector.z )
  PerpendicularVector = PerpendicularVector * Distance
  NewPosition = PerpendicularVector + center_object.get_actor_location()
  RotationAxis = center_object.get_actor_location() - core_object.get_actor_location()

  with unreal.ScopedEditorTransaction("Spawn Surrounding Actors") as trans:
    for i in range(0, NumberOfWalls, 2) :
      ResultPosition = unreal.MathLibrary().rotate_angle_axis(NewPosition, i * 360 / Distance, RotationAxis)

      unit_direction = unreal.MathLibrary().get_direction_unit_vector(core_object.get_actor_location(), ResultPosition)
      ResultLocation = (unit_direction * 590) + core_object.get_actor_location()

      spawned_actor = unreal.EditorLevelLibrary().spawn_actor_from_object(spawningActorObject, ResultLocation)
      spawned_actor.set_actor_relative_scale3d(unreal.Vector(0.1, 0.1, 2.0))
      spawned_actor.set_actor_rotation(GetCoreBasedRotation(core_object.get_actor_location(), spawned_actor), True)
Ejemplo n.º 2
0
    def create_level(self):
        self.ass_lev = unreal.AssetToolsHelpers.get_asset_tools().create_asset(
            asset_name=self.ass_lev_name,
            package_path=self.ass_lev_path,
            asset_class=unreal.World,
            factory=unreal.WorldFactory())

        self.ass = unreal.AssetToolsHelpers.get_asset_tools().create_asset(
            asset_name=self.ass_name,
            package_path=self.ass_path,
            asset_class=unreal.LevelSequence,
            factory=unreal.LevelSequenceFactoryNew())
        self.ass.set_display_rate(unreal.FrameRate(self.fps, 1))

        # 设置关卡序列的开始帧
        self.ass.make_range(self.start, self.end)
        self.ass.set_playback_start(self.start)
        self.ass.set_playback_end(self.end)

        self.ass.set_work_range_start(self.start / self.fps)
        self.ass.set_work_range_end(self.end / self.fps)

        self.ass.set_view_range_start(self.start / self.fps)
        self.ass.set_view_range_end(self.end / self.fps)
        # 添加摄像机关卡
        unreal.EditorLevelLibrary().load_level("{path}{name}.{name}".format(
            path=self.ass_lev_path, name=self.ass_lev_name))  # 打开创建的关卡
Ejemplo n.º 3
0
    def create_camera(self):
        # 添加相机剪辑轨道
        camera_cut_track = self.ass.add_master_track(unreal.MovieSceneCameraCutTrack)
        # 添加相机剪裁的可视
        camera_cut_section = camera_cut_track.add_section()
        self.make_range(camera_cut_section)

        camera_actor = unreal.EditorLevelLibrary().spawn_actor_from_class(
            unreal.CineCameraActor, unreal.Vector(0, 0, 0), unreal.Rotator(0, 0, 0))
        camera_actor.set_actor_label("doodle_camera")
        camera_component = camera_actor.get_cine_camera_component()
        # ratio = math.tan(film_fov / 360.0 * math.pi) * 2

        # 添加一些相机熟悉
        filmback = camera_component.get_editor_property("filmback")
        # focal_length = camera_component.get_editor_property("current_focal_length")
        filmback.set_editor_property("sensor_height", 20.25)
        filmback.set_editor_property("sensor_width", 36.0)
        focus_settings = camera_component.get_editor_property("focus_settings")
        focus_settings.set_editor_property(
            "focus_method", unreal.CameraFocusMethod.DISABLE)

        # 添加相机绑定
        camera_binding = self.ass.add_possessable(camera_actor)
        camera_binding_id = self.ass.make_binding_id(
            camera_binding, unreal.MovieSceneObjectBindingSpace.LOCAL)
        camera_cut_section.set_camera_binding_id(camera_binding_id)

        # 添加transform_track轨道
        transform_track = camera_binding.add_track(unreal.MovieScene3DTransformTrack)
        transform_section = transform_track.add_section()
        self.make_range(transform_section)
        # 添加子组件绑定
        camera_component_binding = self.ass.add_possessable(camera_component)
        # 添加当前焦距
        camera_component_focal_track = camera_component_binding.add_track(unreal.MovieSceneFloatTrack)
        camera_component_focal_track.set_property_name_and_path("当前焦距", "CurrentFocalLength")
        camera_component_focal_track_section = camera_component_focal_track.add_section()
        self.make_range(camera_component_focal_track_section)
        # channels = camera_component_focal_track_section.get_channels()[0]
        # channels.add_key(unreal.FrameNumber(950), 35, 0.0, unreal.SequenceTimeUnit.DISPLAY_RATE)
        # 添加当前光圈
        camera_component_focal_track = camera_component_binding.add_track(unreal.MovieSceneFloatTrack)
        camera_component_focal_track.set_property_name_and_path("当前光圈", "CurrentAperture")
        camera_component_focal_track_section = camera_component_focal_track.add_section()
        self.make_range(camera_component_focal_track_section)

        # 添加手动聚焦
        camera_component_focal_track = camera_component_binding.add_track(unreal.MovieSceneFloatTrack)
        camera_component_focal_track.set_property_name_and_path("手动聚焦距离(聚焦设置)", "FocusSettings.ManualFocusDistance")
        camera_component_focal_track_section = camera_component_focal_track.add_section()
        self.make_range(camera_component_focal_track_section)
Ejemplo n.º 4
0
def create_level_sequence_with_spawnable_camera(asset_name,
                                                package_path='/Game/'):

    sequence = unreal.AssetToolsHelpers.get_asset_tools().create_asset(
        asset_name, package_path, unreal.LevelSequence,
        unreal.LevelSequenceFactoryNew())

    # Create a cine camera actor
    camera_actor = unreal.EditorLevelLibrary().spawn_actor_from_class(
        unreal.CineCameraActor, unreal.Vector(0, 0, 0),
        unreal.Rotator(0, 0, 0))

    # Add a spawnable using that cine camera actor
    camera_binding = sequence.add_spawnable_from_instance(camera_actor)

    # Add a cine camera component binding using the component of the camera actor
    camera_component_binding = sequence.add_possessable(
        camera_actor.get_cine_camera_component())
    camera_component_binding.set_parent(camera_binding)

    # Add a focal length track and default it to 60
    focal_length_track = camera_component_binding.add_track(
        unreal.MovieSceneFloatTrack)
    focal_length_track.set_property_name_and_path('CurrentFocalLength',
                                                  'CurrentFocalLength')
    focal_length_section = focal_length_track.add_section()
    focal_length_section.set_start_frame_bounded(0)
    focal_length_section.set_end_frame_bounded(0)

    for channel in focal_length_section.find_channels_by_type(
            unreal.MovieSceneScriptingFloatChannel):
        channel.set_default(60.0)

    # Add a transform track
    camera_transform_track = camera_binding.add_track(
        unreal.MovieScene3DTransformTrack)
    populate_track(sequence, camera_transform_track, 1, 5)

    return sequence
def CreateSequencer():

    import unreal
    import os.path
    import sys
    import time
    import json
    '''
    if int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 26:
        import configparser as ConfigParser
    else:
        import ConfigParser
    '''

    # Prepare process import
    json_data_file = 'ImportSequencerData.json'
    dir_path = os.path.dirname(os.path.realpath(__file__))

    with open(os.path.join(dir_path, json_data_file), "r") as json_file:
        sequence_data = json.load(json_file)

    spawnable_camera = sequence_data['spawnable_camera']
    startFrame = sequence_data['startFrame']
    endFrame = sequence_data['endFrame'] + 1
    render_resolution_x = sequence_data['render_resolution_x']
    render_resolution_y = sequence_data['render_resolution_y']
    frameRateDenominator = sequence_data['frameRateDenominator']
    frameRateNumerator = sequence_data['frameRateNumerator']
    secureCrop = sequence_data[
        'secureCrop']  # add end crop for avoid section overlay
    unreal_import_location = sequence_data['unreal_import_location']
    ImportedCamera = []  # (CameraName, CameraGuid)

    def AddSequencerSectionTransformKeysByIniFile(sequencer_section,
                                                  track_dict):
        for key in track_dict.keys():
            value = track_dict[key]  # (x,y,z x,y,z x,y,z)
            frame = unreal.FrameNumber(int(key))

            sequencer_section.get_channels()[0].add_key(
                frame, value["location_x"])
            sequencer_section.get_channels()[1].add_key(
                frame, value["location_y"])
            sequencer_section.get_channels()[2].add_key(
                frame, value["location_z"])
            sequencer_section.get_channels()[3].add_key(
                frame, value["rotation_x"])
            sequencer_section.get_channels()[4].add_key(
                frame, value["rotation_y"])
            sequencer_section.get_channels()[5].add_key(
                frame, value["rotation_z"])
            sequencer_section.get_channels()[6].add_key(
                frame, value["scale_x"])
            sequencer_section.get_channels()[7].add_key(
                frame, value["scale_y"])
            sequencer_section.get_channels()[8].add_key(
                frame, value["scale_z"])

    def AddSequencerSectionFloatKeysByIniFile(sequencer_section, track_dict):
        for key in track_dict.keys():
            frame = unreal.FrameNumber(int(key))
            value = track_dict[key]
            sequencer_section.get_channels()[0].add_key(frame, value)

    def AddSequencerSectionBoolKeysByIniFile(sequencer_section, track_dict):
        for key in track_dict.keys():
            frame = unreal.FrameNumber(int(key))
            value = track_dict[key]
            sequencer_section.get_channels()[0].add_key(frame, value)

    print("Warning this file already exists")  # ???
    factory = unreal.LevelSequenceFactoryNew()
    asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
    seq = asset_tools.create_asset_with_dialog('MySequence', '/Game', None,
                                               factory)
    if seq is None:
        return 'ERROR: level sequencer factory_create fail'

    print("Sequencer reference created")
    print(seq)

    # Process import
    print(
        "========================= Import started ! =========================")

    # Set frame rate
    myFFrameRate = unreal.FrameRate()
    myFFrameRate.denominator = frameRateDenominator
    myFFrameRate.numerator = frameRateNumerator
    seq.set_display_rate(myFFrameRate)

    # Set playback range
    seq.set_playback_end_seconds(
        (endFrame - secureCrop) / float(frameRateNumerator))
    seq.set_playback_start_seconds(
        startFrame / float(frameRateNumerator))  # set_playback_end_seconds
    camera_cut_track = seq.add_master_track(unreal.MovieSceneCameraCutTrack)
    camera_cut_track.set_editor_property('display_name',
                                         'Imported Camera Cuts')
    if int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 26:
        camera_cut_track.set_color_tint(unreal.Color(b=200, g=0, r=0, a=0))
    else:
        pass

    for x, camera_data in enumerate(sequence_data["cameras"]):
        # import camera
        print("Start camera import " + str(x + 1) + "/" +
              str(len(sequence_data["cameras"])) + " :" + camera_data["name"])
        # Import camera tracks transform

        with open(camera_data["additional_tracks_path"], "r") as json_file:
            camera_tracks = json.load(json_file)

        # Create spawnable camera and add camera in sequencer
        cine_camera_actor = unreal.EditorLevelLibrary().spawn_actor_from_class(
            unreal.CineCameraActor, unreal.Vector(0, 0, 0),
            unreal.Rotator(0, 0, 0))

        # Import additional tracks (camera_component)
        camera_component_binding = seq.add_possessable(
            cine_camera_actor.get_cine_camera_component())
        # Get the last

        TrackFocalLength = camera_component_binding.add_track(
            unreal.MovieSceneFloatTrack)
        TrackFocalLength.set_property_name_and_path('CurrentFocalLength',
                                                    'CurrentFocalLength')
        TrackFocalLength.set_editor_property('display_name',
                                             'Current Focal Length')
        sectionFocalLength = TrackFocalLength.add_section()
        sectionFocalLength.set_end_frame_bounded(False)
        sectionFocalLength.set_start_frame_bounded(False)
        AddSequencerSectionFloatKeysByIniFile(
            sectionFocalLength, camera_tracks['Camera FocalLength'])

        TrackSensorWidth = camera_component_binding.add_track(
            unreal.MovieSceneFloatTrack)
        TrackSensorWidth.set_property_name_and_path('Filmback.SensorWidth',
                                                    'Filmback.SensorWidth')
        TrackSensorWidth.set_editor_property('display_name',
                                             'Sensor Width (Filmback)')
        sectionSensorWidth = TrackSensorWidth.add_section()
        sectionSensorWidth.set_end_frame_bounded(False)
        sectionSensorWidth.set_start_frame_bounded(False)
        AddSequencerSectionFloatKeysByIniFile(
            sectionSensorWidth, camera_tracks['Camera SensorWidth'])

        TrackSensorHeight = camera_component_binding.add_track(
            unreal.MovieSceneFloatTrack)
        TrackSensorHeight.set_property_name_and_path('Filmback.SensorHeight',
                                                     'Filmback.SensorHeight')
        TrackSensorHeight.set_editor_property('display_name',
                                              'Sensor Height (Filmback)')
        sectionSensorHeight = TrackSensorHeight.add_section()
        sectionSensorHeight.set_end_frame_bounded(False)
        sectionSensorHeight.set_start_frame_bounded(False)

        crop_camera_sensor_height = {}
        for key in camera_tracks['Camera SensorHeight'].keys():
            original_width = float(camera_tracks['Camera SensorWidth'][key])
            original_height = float(camera_tracks['Camera SensorHeight'][key])
            res_x = float(sequence_data['render_resolution_x'])
            res_y = float(sequence_data['render_resolution_y'])
            pixel_x = float(sequence_data['pixel_aspect_x'])
            pixel_y = float(sequence_data['pixel_aspect_y'])
            res_ratio = res_x / res_y
            pixel_ratio = pixel_x / pixel_y

            crop_camera_sensor_height[key] = (original_width /
                                              (res_ratio * pixel_ratio))

        AddSequencerSectionFloatKeysByIniFile(sectionSensorHeight,
                                              crop_camera_sensor_height)

        TrackFocusDistance = camera_component_binding.add_track(
            unreal.MovieSceneFloatTrack)

        # Wtf this var name change every version or I do someting wrong??? :v
        if int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 26:
            TrackFocusDistance.set_property_name_and_path(
                'FocusSettings.ManualFocusDistance',
                'FocusSettings.ManualFocusDistance')
            TrackFocusDistance.set_editor_property(
                'display_name', 'Manual Focus Distance (Focus Settings)')
        elif int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 25:
            TrackFocusDistance.set_property_name_and_path(
                'FocusSettings.ManualFocusDistance',
                'FocusSettings.ManualFocusDistance')
            TrackFocusDistance.set_editor_property(
                'display_name', 'Manual Focus Distance (Focus Settings)')
        elif int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 24:
            TrackFocusDistance.set_property_name_and_path(
                'CurrentFocusDistance', 'CurrentFocusDistance')
            TrackFocusDistance.set_editor_property('display_name',
                                                   'Current Focus Distance')
        else:
            TrackFocusDistance.set_property_name_and_path(
                'ManualFocusDistance', 'ManualFocusDistance')
            TrackFocusDistance.set_editor_property('display_name',
                                                   'Current Focus Distance')
        sectionFocusDistance = TrackFocusDistance.add_section()
        sectionFocusDistance.set_end_frame_bounded(False)
        sectionFocusDistance.set_start_frame_bounded(False)
        AddSequencerSectionFloatKeysByIniFile(
            sectionFocusDistance, camera_tracks['Camera FocusDistance'])

        TracknAperture = camera_component_binding.add_track(
            unreal.MovieSceneFloatTrack)
        TracknAperture.set_property_name_and_path('CurrentAperture',
                                                  'CurrentAperture')
        TracknAperture.set_editor_property('display_name', 'Current Aperture')
        sectionAperture = TracknAperture.add_section()
        sectionAperture.set_end_frame_bounded(False)
        sectionAperture.set_start_frame_bounded(False)
        AddSequencerSectionFloatKeysByIniFile(sectionAperture,
                                              camera_tracks['Camera Aperture'])

        # add a binding for the camera
        camera_binding = seq.add_possessable(cine_camera_actor)

        if spawnable_camera:
            # Transfer to spawnable camera
            camera_spawnable = seq.add_spawnable_from_class(
                unreal.CineCameraActor)  # Add camera in sequencer
            camera_component_binding.set_parent(camera_spawnable)

        # Import transform tracks
        if spawnable_camera:
            transform_track = camera_spawnable.add_track(
                unreal.MovieScene3DTransformTrack)
        else:
            transform_track = camera_binding.add_track(
                unreal.MovieScene3DTransformTrack)
        transform_section = transform_track.add_section()
        transform_section.set_end_frame_bounded(False)
        transform_section.set_start_frame_bounded(False)
        AddSequencerSectionTransformKeysByIniFile(
            transform_section, camera_tracks['Camera transform'])

        # Set property binding
        if spawnable_camera:
            current_camera_binding = camera_spawnable
        else:
            current_camera_binding = camera_binding

        if int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 26:
            current_camera_binding.set_display_name(camera_data["name"])
        else:
            pass
        tracksSpawned = current_camera_binding.find_tracks_by_exact_type(
            unreal.MovieSceneSpawnTrack)
        if len(tracksSpawned) > 0:
            sectionSpawned = tracksSpawned[0].get_sections()[0]
            AddSequencerSectionBoolKeysByIniFile(
                sectionSpawned, camera_tracks['Camera Spawned'])

        # Set property actor
        if spawnable_camera:
            current_cine_camera_actor = camera_spawnable.get_object_template()
        else:
            current_cine_camera_actor = cine_camera_actor

        current_cine_camera_actor.set_actor_label(camera_data["name"])
        camera_component = cine_camera_actor.camera_component
        camera_component.aspect_ratio = render_resolution_x / render_resolution_y
        camera_component.lens_settings.min_f_stop = 0
        camera_component.lens_settings.max_f_stop = 1000

        # Clean the created assets
        if spawnable_camera:
            cine_camera_actor.destroy_actor()
            camera_binding.remove()

        if spawnable_camera:
            ImportedCamera.append((camera_data["name"], camera_spawnable))
        else:
            ImportedCamera.append((camera_data["name"], camera_binding))

    # Import camera cut section
    for section in sequence_data['marker_sections']:
        camera_cut_section = camera_cut_track.add_section()
        if section["has_camera"] is not None:
            for camera in ImportedCamera:
                if camera[0] == section["camera_name"]:
                    camera_binding_id = unreal.MovieSceneObjectBindingID()
                    camera_binding_id = seq.make_binding_id(
                        camera[1], unreal.MovieSceneObjectBindingSpace.LOCAL)
                    camera_cut_section.set_camera_binding_id(camera_binding_id)

        camera_cut_section.set_end_frame_seconds(
            (section["end_time"] - secureCrop) / float(frameRateNumerator))
        camera_cut_section.set_start_frame_seconds(section["start_time"] /
                                                   float(frameRateNumerator))
    # Import result
    print(
        '========================= Imports completed ! ========================='
    )
    ImportedCameraStr = []
    for cam in ImportedCamera:
        ImportedCameraStr.append(cam[0])
        print(ImportedCameraStr)
        print('=========================')

    # Select and open seq in content browser
    if int(unreal.SystemLibrary.get_engine_version()[:4][2:]) >= 26:
        unreal.AssetEditorSubsystem.open_editor_for_assets(
            unreal.AssetEditorSubsystem(),
            [unreal.load_asset(seq.get_path_name())])
    else:
        unreal.AssetToolsHelpers.get_asset_tools().open_editor_for_assets(
            [unreal.load_asset(seq.get_path_name())])

    unreal.EditorAssetLibrary.sync_browser_to_objects([seq.get_path_name()])
    return 'Sequencer created with success !'
Ejemplo n.º 6
0
import unreal

# instances of unreal classes
editor_level_lib = unreal.EditorLevelLibrary()
editor_filter_lib = unreal.EditorFilterLibrary()

# get all level actors and filter by StaticMeshActor
level_actors = editor_level_lib.get_all_level_actors()
static_mesh_actors = editor_filter_lib.by_class(level_actors,
                                                unreal.StaticMeshActor)
deleted = 0

for actor in static_mesh_actors:
    actor_name = actor.get_fname()

    # get the static mesh through the static mesh component
    actor_mesh_comp = actor.static_mesh_component
    actor_mesh = actor_mesh_comp.static_mesh
    is_valid_actor = actor_mesh != None

    # if mesh not valid, destroy
    if not is_valid_actor:
        actor.destroy_actor()
        deleted += 1
        unreal.log(
            "The Mesh Component of Actor {} is invalid and was deleted".format(
                actor_name))

unreal.log("Deleted {} Actors with invalid Mesh Component".format(deleted))
Ejemplo n.º 7
0
import unreal

project_id = "000"
project_name = "MaterialsTest" 

prefix = ["SE", "SM"]
sub_directories = ["materials", "textures", "meshes", "blueprints"]

directory = unreal.EditorAssetLibrary()
directory_path = "/Game/" + prefix[0] + project_id + "_" + project_name

level = unreal.EditorLevelLibrary()
level_name = prefix[1] + "_" + project_name
level_asset = directory_path + "/" + level_name


def make_directory():
    does_exist = True
    if directory.does_directory_exist == does_exist:
        print(str(directory_path) + ' already exists')
    else:
        directory.make_directory(directory_path)        
        for i in sub_directories:
            directory.make_directory(directory_path + "/" + i)
        print(str(directory_path) + ' created')


make_directory()
Ejemplo n.º 8
0
import unreal

# for i in dir(unreal.Actor()):
#     print i

# unreal.EditorLevelLibrary().new_level("/Game/MyFolder/MyMap")

world = unreal.EditorLevelLibrary.get_editor_world()
actor = unreal.EditorLevelLibrary().spawn_actor_from_class(
    unreal.StaticMeshActor, [0, 0, 0])

actor.static_mesh_component.set_static_mesh(
    "StaticMesh'/Game/StarterContent/Props/SM_MatPreviewMesh_02.SM_MatPreviewMesh_02'"
)
# unreal.EditorLevelLibrary().destroy_actor(actor)
for i in dir(actor.static_mesh_component):
    print i