diff options
| -rw-r--r-- | Scripts/libtastt.py | 181 | ||||
| -rw-r--r-- | Scripts/libunity.py | 7 | ||||
| -rw-r--r-- | Scripts/osc_ctrl.py | 12 | ||||
| -rw-r--r-- | Scripts/steamvr.py | 156 | ||||
| -rw-r--r-- | Sounds/aiueo/a.wav | bin | 79406 -> 38654 bytes | |||
| -rw-r--r-- | Sounds/aiueo/e.wav | bin | 79406 -> 38654 bytes | |||
| -rw-r--r-- | Sounds/aiueo/i.wav | bin | 79406 -> 38654 bytes | |||
| -rw-r--r-- | Sounds/aiueo/o.wav | bin | 79406 -> 38654 bytes | |||
| -rw-r--r-- | Sounds/aiueo/play.py | 9 | ||||
| -rw-r--r-- | Sounds/aiueo/u.wav | bin | 79406 -> 38654 bytes | |||
| -rw-r--r-- | UnityAssets/World Constraint.prefab | 472 |
11 files changed, 471 insertions, 366 deletions
diff --git a/Scripts/libtastt.py b/Scripts/libtastt.py index 12f9056..c8d3958 100644 --- a/Scripts/libtastt.py +++ b/Scripts/libtastt.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse +import array import generate_utils import libunity import os @@ -220,7 +221,7 @@ AnimationClip: m_Level: 0 m_CycleOffset: 0 m_HasAdditiveReferencePose: 0 - m_LoopTime: 1 + m_LoopTime: 0 m_LoopBlend: 0 m_LoopBlendOrientation: 0 m_LoopBlendPositionY: 0 @@ -472,9 +473,14 @@ def generateClearAnimation(anim_dir, guid_map): guid_map[anim_path] = meta.guid guid_map[meta.guid] = anim_path +# sound_chord: whether to play a, e, i, o, u # value: 0 or 1 -def generateSoundAnimation(nth_sound: int, value: int, anim_name: str, anim_dir: str, guid_map: typing.Dict[str, str]): - print(f"Generating sound {nth_sound} animation", file=sys.stderr) +def generateSoundAnimation(sound_chord: typing.Tuple[int,int,int,int,int], + value: int, + anim_name: str, + anim_dir: str, guid_map: typing.Dict[str, str], + anim_delay_frames = 2): + print(f"Generating sound animation {sound_chord} / {anim_name}", file=sys.stderr) parser = libunity.UnityParser() parser.parse(SOUND_ANIMATION_TEMPLATE) @@ -485,17 +491,36 @@ def generateSoundAnimation(nth_sound: int, value: int, anim_name: str, anim_dir: anim_clip.mapping['m_FloatCurves'].sequence = [] anim_clip.mapping['m_EditorCurves'].sequence = [] - curve = curve_template.copy() - for keyframe in curve.mapping['curve'].mapping['m_Curve'].sequence: - keyframe.mapping['value'] = str(value) - curve.mapping['path'] = f"World Constraint/Container/TaSTT/Audio {nth_sound}" - # Add curve to animation - anim_clip.mapping['m_FloatCurves'].sequence.append(curve) - anim_clip.mapping['m_EditorCurves'].sequence.append(curve) + # Animate all notes. + for note_i in range(len(sound_chord)): + curve = curve_template.copy() + + keyframe_template = curve.mapping['curve'].mapping['m_Curve'].sequence[0] + curve.mapping['curve'].mapping['m_Curve'].sequence = [] + + # First keyframe: zero all but first note + if note_i != 0: + keyframe = keyframe_template.copy() + keyframe.mapping['time'] = 0 + keyframe.mapping['value'] = 0 + curve.mapping['path'] = f"World Constraint/Container/TaSTT/Audio {note_i + 1}" + curve.mapping['curve'].mapping['m_Curve'].sequence.append(keyframe) + + # Subsequent keyframes: animate as normal + keyframe = keyframe_template.copy() + keyframe.mapping['time']= str(note_i * anim_delay_frames * 1.0 / 60.0) + keyframe.mapping['value'] = str(sound_chord[note_i]) + curve.mapping['path'] = f"World Constraint/Container/TaSTT/Audio {note_i + 1}" + curve.mapping['curve'].mapping['m_Curve'].sequence.append(keyframe) + + # Add curve to animation + anim_clip.mapping['m_FloatCurves'].sequence.append(curve) + anim_clip.mapping['m_EditorCurves'].sequence.append(curve) + + anim_clip.mapping['m_AnimationClipSettings'].mapping['m_StopTime'] = str((len(sound_chord)-1) * anim_delay_frames * 1.0 / 60.0) # Serialize animation to file anim_path = os.path.join(anim_dir, anim_name + ".anim") - print("Generating sound animation at {}".format(anim_path), file=sys.stderr) with open(anim_path, "w", encoding="utf-8") as f: f.write(libunity.unityYamlToString([anim_node])) # Generate metadata @@ -598,11 +623,14 @@ def generateScaleAnimation(anim_name: str, anim_dir: str, def generateAnimations(anim_dir, guid_map): generateClearAnimation(anim_dir, guid_map) - for i in range(5): - anim_name = generate_utils.getSoundParam(i+1) + "_Off" - generateSoundAnimation(i+1, 0, anim_name, anim_dir, guid_map) - anim_name = generate_utils.getSoundParam(i+1) + "_On" - generateSoundAnimation(i+1, 1, anim_name, anim_dir, guid_map) + for chord_bits in range(2**5): + chord = [0, 0, 0, 0, 0] + for i in range(5): + if (chord_bits >> i) % 2 == 1: + chord[i] = 1 + print(f"Generating chord {chord}", file=sys.stderr) + anim_name = f"Sound_a{chord[0]}_e{chord[1]}_i{chord[2]}_o{chord[3]}_u{chord[4]}" + generateSoundAnimation(chord, 0, anim_name, anim_dir, guid_map) print("Generating letter animations", file=sys.stderr) @@ -809,6 +837,117 @@ def generateScaleLayer(anim: libunity.UnityAnimator, pass +def generateSoundLayer(anim: libunity.UnityAnimator, + gen_anim_dir: str, + guid_map: typing.Dict[str, str], + anim_len_s = 12.0/60.0): + + layer = anim.addLayer("TaSTT_Sound") + + # Create `a` state. + a_state = anim.addAnimatorState(layer, "a", is_default_state=True) + + for a_bool in range(2): + dy = 100 + dx = a_bool * 800 + # Create `e` state. + ax_e_state = anim.addAnimatorState(layer, + f"a{a_bool}_e", + dy=dy, dx=dx) + # Create transition based on whether `a` is set. + trans = anim.addTransition(ax_e_state) + param = generate_utils.getSoundParam(1) + anim.addTransitionBooleanCondition(a_state, trans, param, a_bool) + + for e_bool in range(2): + dy = 200 + dx = a_bool * 800 + e_bool * 400 + + # Create `i` state. + ax_ex_i_state = anim.addAnimatorState(layer, + f"a{a_bool}_e{e_bool}_i", + dy=dy, dx=dx) + + # Create transition based on whether `e` is set. + trans = anim.addTransition(ax_ex_i_state) + param = generate_utils.getSoundParam(2) + anim.addTransitionBooleanCondition(ax_e_state, trans, param, e_bool) + + for i_bool in range(2): + dy = 300 + dx = a_bool * 800 + e_bool * 400 + i_bool * 200 + + # Create `o` state. + ax_ex_ix_o_state = anim.addAnimatorState(layer, + f"a{a_bool}_e{e_bool}_i{i_bool}_o", + dy=dy, dx=dx) + # Create transition based on whether `i` is set. + trans = anim.addTransition(ax_ex_ix_o_state) + param = generate_utils.getSoundParam(3) + anim.addTransitionBooleanCondition(ax_ex_i_state, trans, param, i_bool) + + for o_bool in range(2): + dy = 400 + dx = a_bool * 800 + e_bool * 400 + i_bool * 200 + o_bool * 100 + + # Create `u` state. + ax_ex_ix_ox_u_state = anim.addAnimatorState(layer, + f"a{a_bool}_e{e_bool}_i{i_bool}_o{o_bool}_u", + dy=dy, dx=dx) + # Create transition based on whether `o` is set. + trans = anim.addTransition(ax_ex_ix_ox_u_state) + param = generate_utils.getSoundParam(4) + anim.addTransitionBooleanCondition(ax_ex_ix_o_state, + trans, param, o_bool) + + for u_bool in range(2): + dy = 500 + dx = a_bool * 800 + e_bool * 400 + i_bool * 200 + o_bool * 100 + u_bool * 50 + if u_bool == 1: + dy = 550 + + # Create `u` state. + ax_ex_ix_ox_ux_state = anim.addAnimatorState(layer, + f"a{a_bool}_e{e_bool}_i{i_bool}_o{o_bool}_u{u_bool}", + dy=dy, dx=dx) + # Create transition based on whether `u` is set. + trans = anim.addTransition(ax_ex_ix_ox_ux_state) + param = generate_utils.getSoundParam(5) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_u_state, + trans, param, u_bool) + + chord = [a_bool, e_bool, i_bool, o_bool, u_bool] + anim_name = f"Sound_a{chord[0]}_e{chord[1]}_i{chord[2]}_o{chord[3]}_u{chord[4]}" + anim_path = os.path.join(gen_anim_dir, anim_name + ".anim") + anim_guid = guid_map[anim_path] + anim.setAnimatorStateAnimation(ax_ex_ix_ox_ux_state, anim_guid) + + # Create return-home transitions. + trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' + param = generate_utils.getSoundParam(1) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - a_bool) + + trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' + param = generate_utils.getSoundParam(2) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - e_bool) + + trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' + param = generate_utils.getSoundParam(3) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - i_bool) + + trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' + param = generate_utils.getSoundParam(4) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - o_bool) + + trans = anim.addTransition(a_state, dur_s = anim_len_s) + trans.mapping['AnimatorStateTransition'].mapping['m_InterruptionSource'] = '0' + param = generate_utils.getSoundParam(5) + anim.addTransitionBooleanCondition(ax_ex_ix_ox_ux_state, trans, param, 1 - u_bool) + def generateFX(guid_map, gen_anim_dir): anim = libunity.UnityAnimator() @@ -852,16 +991,8 @@ def generateFX(guid_map, gen_anim_dir): "TaSTT_Emerge_100.anim", anim, guid_map, 0.5) - for i in range(5): - param_name = generate_utils.getSoundParam(i+1) - generateToggle(f"TaSTT_Audio{i+1}", - param_name, - gen_anim_dir, - param_name + "_Off.anim", - param_name + "_On.anim", - anim, guid_map) - generateScaleLayer(anim, gen_anim_dir, guid_map) + generateSoundLayer(anim, gen_anim_dir, guid_map) return anim diff --git a/Scripts/libunity.py b/Scripts/libunity.py index cd8174d..f79cd6f 100644 --- a/Scripts/libunity.py +++ b/Scripts/libunity.py @@ -745,7 +745,7 @@ class UnityAnimator(): node.class_id = "1101" node.anchor = str(new_id) state = node.mapping['AnimatorStateTransition'] - state.mapping['m_DstState'].mapping['fileID'] = dst_state.anchor + state.mapping['m_DstState'].mapping['fileID'] = copy.copy(dst_state.anchor) state.mapping['m_TransitionDuration'] = dur_s self.nodes.append(node) @@ -908,7 +908,7 @@ class UnityAnimator(): # Register the transition with the `from_state`. if from_state: from_state_trans = from_state.mapping['AnimatorState'].mapping['m_Transitions'].addChildMapping() - from_state_trans.mapping['fileID'] = trans.anchor + from_state_trans.mapping['fileID'] = copy.copy(trans.anchor) def addTransitionIntegerEqualityCondition(self, from_state, trans, param, param_val): # Populate the transition's condition logic. @@ -994,7 +994,8 @@ class UnityAnimator(): motion.mapping["guid"] = noop_anim_meta.guid motion.mapping["type"] = "2" else: - print(f"Skipping state {anchor} / {name}") + #print(f"Skipping state {anchor} / {name}") + pass def unityYamlToString(nodes): lines = [] diff --git a/Scripts/osc_ctrl.py b/Scripts/osc_ctrl.py index ad5667f..413e2ae 100644 --- a/Scripts/osc_ctrl.py +++ b/Scripts/osc_ctrl.py @@ -103,18 +103,12 @@ def pageMessage(osc_state: OscState, msg: str, estate: EmotesState) -> bool: sounds_to_make = set() letter_i = 1 for letter in ["a", "e", "i", "o", "u"]: - if letter in msg_slice: + if letter in msg_slice.lower(): sounds_to_make.add(letter_i) letter_i += 1 - if len(sounds_to_make) == 0: + if len(sounds_to_make) > 0: for i in range(5): - playAudio(osc_state, i+1, False) - else: - sound_to_make = random.sample(sounds_to_make, 1)[0] - for i in range(5): - if i+1 == sound_to_make: - # TODO(yum) think about making this probabilistic - print(f"Playing sound {i+1}") + if i+1 in sounds_to_make: playAudio(osc_state, i+1, True) else: playAudio(osc_state, i+1, False) diff --git a/Scripts/steamvr.py b/Scripts/steamvr.py index 0f241ca..e0b59e3 100644 --- a/Scripts/steamvr.py +++ b/Scripts/steamvr.py @@ -1,109 +1,85 @@ -import openvr +#!/usr/bin/env python3 + +# python3 -m pip install openvr +# License: BSD-3.0 (requires showing notice in binary distributions) +import openvr as vr import sys import time -import typing -EVENT_RISING_EDGE = 0 -EVENT_FALLING_EDGE = 1 -EVENT_POSE = 2 +EVENT_NONE = 0 +EVENT_RISING_EDGE = 1 +EVENT_FALLING_EDGE = 2 class InputEvent: def __init__(self, - opcode: int, - pos: typing.Tuple[float,float,float] = None): + opcode: int): self.opcode = opcode - self.pos = pos - def __str__(self): - if self.opcode == EVENT_RISING_EDGE: - return "EVENT_RISING_EDGE" - elif self.opcode == EVENT_FALLING_EDGE: - return "EVENT_FALLING_EDGE" - elif self.opcode == EVENT_POSE: - return f"EVENT_POSE: {self.pos}" +# Checks if the given button on the given controller is pressed. +def pollButtonPress( + hand: str = "right", + button: str = "b", + ) -> int: + hands = {} + hands["left"] = vr.TrackedControllerRole_LeftHand + hands["right"] = vr.TrackedControllerRole_RightHand -def pollButtonPress(hand: str = "right", button: str = "b") -> InputEvent: - openvr.init(openvr.VRApplication_Overlay) + buttons = {} + buttons["a"] = vr.k_EButton_IndexController_A + buttons["b"] = vr.k_EButton_IndexController_B + buttons["thumbstick"] = vr.k_EButton_Axis0 - system = openvr.VRSystem() + system = None + while not system: + try: + system = vr.init(vr.VRApplication_Background) + except Exception as e: + print(f"Failed to start steamVR input thread: {repr(e)}", file=sys.stderr) + time.sleep(5) + last_packet = 0 + event_high = False - button_mapping = { - 'a': k_EButton_Index_Controller_A, - 'b': k_EButton_Index_Controller_B, - 'thumbstick': k_EButton_SteamVR_Touchpad, - } + while True: + time.sleep(0.01) - print("SteamVR session created. Listening for controller input...") + lh_idx = system.getTrackedDeviceIndexForControllerRole(hand_id) + #print("left hand device idx: {}".format(lh_idx)) - while True: - # Drain input events. - event = openvr.VREvent_t() - while system.pollNextEvent(event): - # Event processing, e.g. button presses, goes here - if event.eventType == openvr.VREvent_ButtonPress or \ - event.eventType == openvr.VREvent_ButtonUnpress: - print(f"event.data.controller.button: {event.data.controller.button}") - continue - print(f"event: {dir(event)}") - print(f"event.data: {dir(event.data)}") - print(f"event.data.controller: {dir(event.data.controller)}") - print(f"event.data.controller.button: {event.data.controller.button}") - print(f"event.data.keyboard: {dir(event.data.keyboard)}") - print(f"event.data.keyboard.cNewInput: {int.from_bytes(event.data.keyboard.cNewInput, byteorder='little')}") - print(f"event.data.keyboard.uUserValue: {event.data.keyboard.uUserValue}") - print(f"event.data.mouse: {dir(event.data.mouse)}") - print(f"event.data.mouse.button: {event.data.mouse.button}") - print(f"event.data.touchPadMove: {dir(event.data.touchPadMove)}") - print(f"event.data.touchPadMove.bFingerDown: {event.data.touchPadMove.bFingerDown}") - is_rising = event.eventType == openvr.VREvent_ButtonPress - # Check if the intended button is pressed - if button == 'thumbstick': - _, controller_state = system.getControllerState(event.trackedDeviceIndex) - mouse_x = controller_state.rAxis[0].x - mouse_y = controller_state.rAxis[0].y - print(f"mouse x/y: {mouse_x}/{mouse_y}") - print(f"mouse rad: {mouse_x**2 + mouse_y**2}") - dead_zone_radius = 0.05 - thumbstick_moved = mouse_x**2 + mouse_y**2 > dead_zone_radius**2 - if event.data.controller.button == button_mapping['thumbstick'] and not thumbstick_moved: - if is_rising: - yield InputEvent(EVENT_RISING_EDGE) - else: - yield InputEvent(EVENT_FALLING_EDGE) - elif event.data.controller.button == button_mapping[button]: - if is_rising: - yield InputEvent(EVENT_RISING_EDGE) - else: - yield InputEvent(EVENT_FALLING_EDGE) - # Check poses. - # TODO(yum) use this. Thinking about adding gestures: swipe to scale - # up/down, etc. - if False: - poses = (openvr.TrackedDevicePose_t * openvr.k_unMaxTrackedDeviceCount)() - system.getDeviceToAbsoluteTrackingPose(openvr.TrackingUniverseStanding, 0, poses) - pose = None - for i in range(openvr.k_unMaxTrackedDeviceCount): - if system.getControllerRoleForTrackedDeviceIndex(i) == openvr.TrackedControllerRole_RightHand: - pose = poses[i] - if pose and pose.bPoseIsValid: - position = pose.mDeviceToAbsoluteTracking.m[0][3], \ - pose.mDeviceToAbsoluteTracking.m[1][3], \ - pose.mDeviceToAbsoluteTracking.m[2][3] - yield InputEvent(EVENT_POSE, pos=position) + got_state, state = system.getControllerState(lh_idx) + if not got_state: + continue - # Max out a 100 Hz. - time.sleep(0.01) + if state.unPacketNum == last_packet: + continue - openvr.shutdown() + # Clicking joysticks and moving joysticks fire the same events. To + # differentiate movement from clicking, we create a dead zone: if the event + # fires while the stick isn't moved far from center, we assume it's a + # click, not movement. + dead_zone_radius = 0.7 -if __name__ == "__main__": - if len(sys.argv) != 3: - print("Usage: script_name.py [left|right] [a|b|thumbstick]") - sys.exit(1) + button_mask = (1 << button_id) + ret = EVENT_NONE + if (state.ulButtonPressed & button_mask) != 0 and\ + (state.rAxis[0].x**2 + state.rAxis[0].y**2 < dead_zone_radius**2): + #print("button pressed: %016x" % state.ulButtonPressed) + #for i in range(0, 5): + # print("axis {} x: {} y: {}".format(i, state.rAxis[i].x, state.rAxis[i].y)) + if not event_high: + yield InputEvent(EVENT_RISING_EDGE) + event_high = True + elif event_high: + event_high = False + yield InputEvent(EVENT_FALLING_EDGE) - hand = sys.argv[1] - button = sys.argv[2] - gen = pollButtonPress(hand, button) +if __name__ == "__main__": + gen = pollButtonPress() while True: - print(next(gen)) + time.sleep(0.1) + + event = pollButtonPress(session_state, hand_id = hands["left"], button_id = buttons["joystick"]) + if event == EVENT_RISING_EDGE: + print("rising edge") + elif event == EVENT_FALLING_EDGE: + print("falling edge") diff --git a/Sounds/aiueo/a.wav b/Sounds/aiueo/a.wav Binary files differindex 97fd2ab..06aabc6 100644 --- a/Sounds/aiueo/a.wav +++ b/Sounds/aiueo/a.wav diff --git a/Sounds/aiueo/e.wav b/Sounds/aiueo/e.wav Binary files differindex 50f9acf..5bcebf5 100644 --- a/Sounds/aiueo/e.wav +++ b/Sounds/aiueo/e.wav diff --git a/Sounds/aiueo/i.wav b/Sounds/aiueo/i.wav Binary files differindex 2c557cf..f1d86c9 100644 --- a/Sounds/aiueo/i.wav +++ b/Sounds/aiueo/i.wav diff --git a/Sounds/aiueo/o.wav b/Sounds/aiueo/o.wav Binary files differindex 0fca069..cbafbdb 100644 --- a/Sounds/aiueo/o.wav +++ b/Sounds/aiueo/o.wav diff --git a/Sounds/aiueo/play.py b/Sounds/aiueo/play.py index 5d94031..674cf2e 100644 --- a/Sounds/aiueo/play.py +++ b/Sounds/aiueo/play.py @@ -5,7 +5,8 @@ import time def get_wav_files_in_cwd(): """Returns a list of .wav files in the current working directory.""" - return [f for f in os.listdir() if f.endswith('.wav')] + cwd = os.path.dirname(os.path.abspath(__file__)) + return [os.path.join(cwd, f) for f in os.listdir(cwd) if f.endswith('.wav')] # Pro tip: wrap this in a predicate def play_random_wav(wav_files): @@ -15,11 +16,13 @@ def play_random_wav(wav_files): def probably_play_random_wav(wav_files): """Plays a random .wav file from the list. Probably.""" - if random.randint(1,3) != 1: + if random.randint(1,3) == 1: play_random_wav(wav_files) def main(): wav_files = get_wav_files_in_cwd() + for file in wav_files: + print(f"file get: {file}") if not wav_files: print("No .wav files found in the current directory.") return @@ -27,7 +30,7 @@ def main(): try: while True: probably_play_random_wav(wav_files) - time.sleep(0.2) + time.sleep(0.04) except KeyboardInterrupt: print("Program terminated by user.") winsound.PlaySound(None, winsound.SND_PURGE) # Stop any ongoing asynchronous sounds diff --git a/Sounds/aiueo/u.wav b/Sounds/aiueo/u.wav Binary files differindex afea76e..9bb6dda 100644 --- a/Sounds/aiueo/u.wav +++ b/Sounds/aiueo/u.wav diff --git a/UnityAssets/World Constraint.prefab b/UnityAssets/World Constraint.prefab index f37df9c..e35b62b 100644 --- a/UnityAssets/World Constraint.prefab +++ b/UnityAssets/World Constraint.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &368778262621606450 +--- !u!1 &59845033047403163 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,9 +8,157 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1033005798034376840} - - component: {fileID: 4177689922373486381} - - component: {fileID: 2170406886885422055} + - component: {fileID: 62178752985844127} + - component: {fileID: 59845033047403160} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &62178752985844127 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59845033047403163} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6776837118619840393} + m_Father: {fileID: 54804600186116711} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1773428102 &59845033047403160 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 59845033047403163} + m_Enabled: 1 + m_Weight: 1 + m_TranslationAtRest: {x: 0, y: 0, z: 0} + m_RotationAtRest: {x: 0, y: 0, z: 0} + m_TranslationOffsets: + - {x: 0, y: 0, z: 0} + m_RotationOffsets: + - {x: 0, y: 0, z: 0} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_IsContraintActive: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 2601682554872707421} + weight: 1 +--- !u!1 &60297946348294155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 54804600186116711} + - component: {fileID: 9053366248947647190} + m_Layer: 0 + m_Name: World Constraint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &54804600186116711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 60297946348294155} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 62178752985844127} + - {fileID: 2601682554872707421} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1773428102 &9053366248947647190 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 60297946348294155} + m_Enabled: 1 + m_Weight: 1 + m_TranslationAtRest: {x: 0, y: 0, z: 0} + m_RotationAtRest: {x: 0, y: 0, z: 0} + m_TranslationOffsets: + - {x: 0, y: 0, z: 0} + m_RotationOffsets: + - {x: 0, y: 0, z: 0} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_IsContraintActive: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 1720321125886419532, guid: e86e0e4bebce5834ab8ed64ac5f3b3cc, + type: 3} + weight: 1 +--- !u!1 &2601682554872707422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2601682554872707421} + m_Layer: 0 + m_Name: Reset Target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2601682554872707421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2601682554872707422} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 54804600186116711} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6145154926414935347 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6776837118619840393} + - component: {fileID: 7612194843402133548} + - component: {fileID: 5640483281311601894} m_Layer: 0 m_Name: TaSTT m_TagString: Untagged @@ -18,40 +166,40 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1033005798034376840 +--- !u!4 &6776837118619840393 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368778262621606450} + m_GameObject: {fileID: 6145154926414935347} m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071067} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 5, y: 5, z: 5} m_Children: - - {fileID: 2897940990467360438} - - {fileID: 2897940990298294145} - - {fileID: 2897940991232929881} - - {fileID: 2897940990209707922} - - {fileID: 2897940990574961800} - m_Father: {fileID: 5802104200465362590} + - {fileID: 8677976622111891895} + - {fileID: 8677976622277615744} + - {fileID: 8677976623497942872} + - {fileID: 8677976622407100563} + - {fileID: 8677976622034699145} + m_Father: {fileID: 62178752985844127} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &4177689922373486381 +--- !u!33 &7612194843402133548 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368778262621606450} + m_GameObject: {fileID: 6145154926414935347} m_Mesh: {fileID: -5495902117074765545, guid: 1c2aa3d76900de6409aaeaa1b238ae8a, type: 3} ---- !u!23 &2170406886885422055 +--- !u!23 &5640483281311601894 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 368778262621606450} + m_GameObject: {fileID: 6145154926414935347} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -84,7 +232,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!1 &2897940990209707925 +--- !u!1 &8677976622034699146 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -92,40 +240,40 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2897940990209707922} - - component: {fileID: 2897940990209707923} + - component: {fileID: 8677976622034699145} + - component: {fileID: 8677976622034699144} m_Layer: 0 - m_Name: Audio 2 + m_Name: Audio 1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897940990209707922 + m_IsActive: 0 +--- !u!4 &8677976622034699145 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990209707925} + m_GameObject: {fileID: 8677976622034699146} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.2, y: 0.19999999, z: 0.20000003} m_Children: [] - m_Father: {fileID: 1033005798034376840} - m_RootOrder: 3 + m_Father: {fileID: 6776837118619840393} + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!82 &2897940990209707923 +--- !u!82 &8677976622034699144 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990209707925} + m_GameObject: {fileID: 8677976622034699146} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: f43790411c411124d9cf1ea2e72acf9b, type: 3} + m_audioClip: {fileID: 8300000, guid: 7d9f44f7fb873f949b851388b56330d0, type: 3} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -135,10 +283,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 + MinDistance: 0.1 + MaxDistance: 1.5 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 1 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -211,7 +359,7 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &2897940990298294144 +--- !u!1 &8677976622111891912 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -219,40 +367,40 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2897940990298294145} - - component: {fileID: 2897940990298294158} + - component: {fileID: 8677976622111891895} + - component: {fileID: 8677976622111891894} m_Layer: 0 - m_Name: Audio 4 + m_Name: Audio 5 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897940990298294145 + m_IsActive: 0 +--- !u!4 &8677976622111891895 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990298294144} + m_GameObject: {fileID: 8677976622111891912} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.2, y: 0.19999999, z: 0.20000003} m_Children: [] - m_Father: {fileID: 1033005798034376840} - m_RootOrder: 1 + m_Father: {fileID: 6776837118619840393} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!82 &2897940990298294158 +--- !u!82 &8677976622111891894 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990298294144} + m_GameObject: {fileID: 8677976622111891912} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: 4803d8be07ade7a4bb93f231dd60980b, type: 3} + m_audioClip: {fileID: 8300000, guid: 19c542485b32f114ba70c9092ccb658f, type: 3} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -262,10 +410,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 + MinDistance: 0.1 + MaxDistance: 1.5 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 1 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -338,7 +486,7 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &2897940990467360457 +--- !u!1 &8677976622277615745 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -346,40 +494,40 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2897940990467360438} - - component: {fileID: 2897940990467360439} + - component: {fileID: 8677976622277615744} + - component: {fileID: 8677976622277615759} m_Layer: 0 - m_Name: Audio 5 + m_Name: Audio 4 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897940990467360438 + m_IsActive: 0 +--- !u!4 &8677976622277615744 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990467360457} + m_GameObject: {fileID: 8677976622277615745} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.2, y: 0.19999999, z: 0.20000003} m_Children: [] - m_Father: {fileID: 1033005798034376840} - m_RootOrder: 0 + m_Father: {fileID: 6776837118619840393} + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!82 &2897940990467360439 +--- !u!82 &8677976622277615759 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990467360457} + m_GameObject: {fileID: 8677976622277615745} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: 19c542485b32f114ba70c9092ccb658f, type: 3} + m_audioClip: {fileID: 8300000, guid: 4803d8be07ade7a4bb93f231dd60980b, type: 3} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -389,10 +537,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 + MinDistance: 0.1 + MaxDistance: 1.5 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 1 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -465,7 +613,7 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &2897940990574961803 +--- !u!1 &8677976622407100564 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -473,40 +621,40 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2897940990574961800} - - component: {fileID: 2897940990574961801} + - component: {fileID: 8677976622407100563} + - component: {fileID: 8677976622407100562} m_Layer: 0 - m_Name: Audio 1 + m_Name: Audio 2 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897940990574961800 + m_IsActive: 0 +--- !u!4 &8677976622407100563 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990574961803} + m_GameObject: {fileID: 8677976622407100564} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.2, y: 0.19999999, z: 0.20000003} m_Children: [] - m_Father: {fileID: 1033005798034376840} - m_RootOrder: 4 + m_Father: {fileID: 6776837118619840393} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!82 &2897940990574961801 +--- !u!82 &8677976622407100562 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940990574961803} + m_GameObject: {fileID: 8677976622407100564} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: 7d9f44f7fb873f949b851388b56330d0, type: 3} + m_audioClip: {fileID: 8300000, guid: f43790411c411124d9cf1ea2e72acf9b, type: 3} m_PlayOnAwake: 1 m_Volume: 1 m_Pitch: 1 @@ -516,10 +664,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 + MinDistance: 0.1 + MaxDistance: 1.5 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 1 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -592,7 +740,7 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &2897940991232929880 +--- !u!1 &8677976623497942873 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -600,36 +748,36 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2897940991232929881} - - component: {fileID: 2897940991232929862} + - component: {fileID: 8677976623497942872} + - component: {fileID: 8677976623497942855} m_Layer: 0 m_Name: Audio 3 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2897940991232929881 + m_IsActive: 0 +--- !u!4 &8677976623497942872 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940991232929880} + m_GameObject: {fileID: 8677976623497942873} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0.2, y: 0.19999999, z: 0.20000003} m_Children: [] - m_Father: {fileID: 1033005798034376840} + m_Father: {fileID: 6776837118619840393} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!82 &2897940991232929862 +--- !u!82 &8677976623497942855 AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2897940991232929880} + m_GameObject: {fileID: 8677976623497942873} m_Enabled: 1 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} @@ -643,10 +791,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 + MinDistance: 0.1 + MaxDistance: 1.5 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 1 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -719,151 +867,3 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 ---- !u!1 &5804379629109824922 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5802104200465362590} - - component: {fileID: 5804379629109824921} - m_Layer: 0 - m_Name: Container - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5802104200465362590 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5804379629109824922} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1033005798034376840} - m_Father: {fileID: 5808346399605063014} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1773428102 &5804379629109824921 -ParentConstraint: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5804379629109824922} - m_Enabled: 1 - m_Weight: 1 - m_TranslationAtRest: {x: 0, y: 0, z: 0} - m_RotationAtRest: {x: 0, y: 0, z: 0} - m_TranslationOffsets: - - {x: 0, y: 0, z: 0} - m_RotationOffsets: - - {x: 0, y: 0, z: 0} - m_AffectTranslationX: 1 - m_AffectTranslationY: 1 - m_AffectTranslationZ: 1 - m_AffectRotationX: 1 - m_AffectRotationY: 1 - m_AffectRotationZ: 1 - m_IsContraintActive: 1 - m_IsLocked: 1 - m_Sources: - - sourceTransform: {fileID: 8377496057579495004} - weight: 1 ---- !u!1 &5805114155077793546 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 5808346399605063014} - - component: {fileID: 3314038660395918807} - m_Layer: 0 - m_Name: World Constraint - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &5808346399605063014 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5805114155077793546} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 5802104200465362590} - - {fileID: 8377496057579495004} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1773428102 &3314038660395918807 -ParentConstraint: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 5805114155077793546} - m_Enabled: 1 - m_Weight: 1 - m_TranslationAtRest: {x: 0, y: 0, z: 0} - m_RotationAtRest: {x: 0, y: 0, z: 0} - m_TranslationOffsets: - - {x: 0, y: 0, z: 0} - m_RotationOffsets: - - {x: 0, y: 0, z: 0} - m_AffectTranslationX: 1 - m_AffectTranslationY: 1 - m_AffectTranslationZ: 1 - m_AffectRotationX: 1 - m_AffectRotationY: 1 - m_AffectRotationZ: 1 - m_IsContraintActive: 1 - m_IsLocked: 1 - m_Sources: - - sourceTransform: {fileID: 1720321125886419532, guid: e86e0e4bebce5834ab8ed64ac5f3b3cc, - type: 3} - weight: 1 ---- !u!1 &8377496057579495007 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8377496057579495004} - m_Layer: 0 - m_Name: Reset Target - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8377496057579495004 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 8377496057579495007} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 5808346399605063014} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
