feat: 에디터 모드에서의 트리 생성 및 실시간 Inspector 업데이트 지원

tree
 및

BranchSway
 클래스에 [ExecuteAlways] 속성 추가

OnValidate
를 통해 에디터상의 값 변경 실시간 대응 추가
Play 모드(코루틴 애니메이션)와 Edit 모드(즉시 생성) 로직 분리
편집 편의성을 위한 randomSeed 변수 추가
main
hotunecookie 3 days ago
parent b7f355d87f
commit 6e17300eb2

@ -1,9 +1,9 @@
using System.Collections;
using UnityEngine;
[ExecuteAlways] // 런타임뿐만 아니라 에디터에서도 코드가 실행되도록 설정
public class tree : MonoBehaviour
{
public GameObject branchPrefab;
public int maxDepth = 4;
public float branchAngle = 45f;
@ -16,6 +16,9 @@ public class tree : MonoBehaviour
public Color leafColor = new Color(1f, 0.4f, 0.6f); // 가지 끝부분 (핑크/벚꽃 느낌)
[Range(0f, 1f)] public float lengthRandomness = 0.2f; // 길이 랜덤 (0~1)
[Range(0f, 45f)] public float angleRandomness = 20f; // 휘어짐 극대화를 위한 각도 랜덤
[Tooltip("에디터에서 색상 변경 등 값을 수정할 때 마다 나무 형태가 계속 바뀌지 않도록 시드를 고정")]
public int randomSeed = 12345;
[Header("Animation & Wind")]
public float growthDelay = 0.1f; // 가지 생성 대기 시간 (애니메이션 효과)
@ -25,74 +28,153 @@ public class tree : MonoBehaviour
void Start()
{
// Hierarchy 창을 깔끔하게 유지하기 위한 컨테이너 생성
// 런타임 시작 시 새롭게 나무 생성 (에디터에선 이미 OnValidate/Enable 등으로 생성되었는지 확인 후 처리)
if (Application.isPlaying)
{
GenerateTree();
}
}
void OnEnable()
{
// 씬 로드, 컴포넌트 활성화 시에도 나무 생성 (에디터 모드에서 나무 보이게 함)
if (!Application.isPlaying && branchContainer == null)
{
GenerateTree();
}
}
void OnValidate()
{
// 인스펙터 값이 변경될 때 바로 적용되도록 OnValidate에서 재생성 호출
#if UNITY_EDITOR
UnityEditor.EditorApplication.delayCall += () =>
{
if (this != null && !Application.isPlaying)
{
GenerateTree();
}
};
#endif
}
public void GenerateTree()
{
if (branchPrefab == null) return;
// 기존에 생성된 부분 지우기 (DestroyImmediate는 에디터 전용/안전하게 사용)
if (branchContainer != null)
{
DestroyImmediate(branchContainer);
}
// Hierarchy에 잔여 TreeContainer가 남아있을 수도 있으므로 이름으로 확인 후 지우기
Transform oldContainer = transform.Find("TreeContainer");
if (oldContainer != null)
{
DestroyImmediate(oldContainer.gameObject);
}
branchContainer = new GameObject("TreeContainer");
branchContainer.transform.position = transform.position;
branchContainer.transform.parent = this.transform;
// 인스펙터 값을 바꿀 때마다 나무가 춤추듯 바뀌는 현상 방지용 랜덤 시드 세팅
Random.InitState(randomSeed);
StartCoroutine(CreateBranchRoutine(transform.position, transform.rotation, initialLength, 0, branchContainer.transform));
// 런타임(플레이 모드)일 경우 코루틴으로 애니메이션, 에디터일 경우 즉시(Instant) 생성
if (Application.isPlaying)
{
StartCoroutine(CreateBranchRoutine(transform.position, transform.rotation, initialLength, 0, branchContainer.transform));
}
else
{
CreateBranchInstant(transform.position, transform.rotation, initialLength, 0, branchContainer.transform);
}
}
// 런타임용 (애니메이션 동반)
IEnumerator CreateBranchRoutine(Vector3 pos, Quaternion rot, float length, int depth, Transform parentTransform)
{
if (depth >= maxDepth) yield break;
// 런타임에서 자라나는 모습을 보여주기 위한 대기 시간
yield return new WaitForSeconds(growthDelay);
// 바람에 흔들릴 때 관절이 끊어지지 않도록, 가지 시작점(pos)에 가상의 피벗(Pivot)을 생성
Transform pivot = CreateBranchCore(pos, rot, length, depth, parentTransform);
Vector3 endPoint = pos + rot * (Vector3.up * length);
float nextLength = length * scaleReduction * Random.Range(1f - lengthRandomness, 1f + lengthRandomness);
float angleStep = 360f / branchesPerLevel;
for (int i = 0; i < branchesPerLevel; i++)
{
Quaternion finalRot = CalculateRotation(rot, depth, i, angleStep);
StartCoroutine(CreateBranchRoutine(endPoint, finalRot, nextLength, depth + 1, pivot));
}
}
// 에디터용 (대기 시간 없이 즉시 전체 생성)
void CreateBranchInstant(Vector3 pos, Quaternion rot, float length, int depth, Transform parentTransform)
{
if (depth >= maxDepth) return;
Transform pivot = CreateBranchCore(pos, rot, length, depth, parentTransform);
Vector3 endPoint = pos + rot * (Vector3.up * length);
float nextLength = length * scaleReduction * Random.Range(1f - lengthRandomness, 1f + lengthRandomness);
float angleStep = 360f / branchesPerLevel;
for (int i = 0; i < branchesPerLevel; i++)
{
Quaternion finalRot = CalculateRotation(rot, depth, i, angleStep);
CreateBranchInstant(endPoint, finalRot, nextLength, depth + 1, pivot);
}
}
// 공통 실행 로직: 하나의 나뭇가지 생성 및 색상/크기 세팅
Transform CreateBranchCore(Vector3 pos, Quaternion rot, float length, int depth, Transform parentTransform)
{
GameObject pivot = new GameObject("Pivot_Depth_" + depth);
pivot.transform.position = pos;
pivot.transform.rotation = rot;
pivot.transform.parent = parentTransform;
// 흔들림(Sway) 스크립트 추가
BranchSway sway = pivot.AddComponent<BranchSway>();
sway.Init(depth, windStrength);
// 중앙 피벗 큐브를 위한 중심 위치 계산
Vector3 centerPos = pos + rot * (Vector3.up * length * 0.5f);
// 나뭇가지를 생성하고 부모를 생성한 피벗으로 설정
GameObject branch = Instantiate(branchPrefab, centerPos, rot);
branch.transform.parent = pivot.transform;
// 아티스틱: 깊이에 따라 색상 자연스럽게 섞기 (Lerp)
Renderer rnd = branch.GetComponentInChildren<Renderer>();
if (rnd != null)
{
// 아티스틱: 깊이에 따라 색상 자연스럽게 섞기
float colorT = maxDepth > 1 ? (float)depth / (maxDepth - 1) : 1f;
rnd.material.color = Color.Lerp(trunkColor, leafColor, colorT);
}
// 동적 크기 조절: 깊이에 따라 두께가 얇아짐
// 동적 크기 조절: 깊이에 따라 두께 비례 적용
float thickness = 0.15f * (maxDepth - depth);
branch.transform.localScale = new Vector3(thickness, length, thickness);
// 가지의 끝 지점 계산
Vector3 endPoint = pos + rot * (Vector3.up * length);
// 길이 및 각도 세팅
float randomizedLengthMultiplier = Random.Range(1f - lengthRandomness, 1f + lengthRandomness);
float nextLength = length * scaleReduction * randomizedLengthMultiplier;
float angleStep = 360f / branchesPerLevel;
for (int i = 0; i < branchesPerLevel; i++)
{
float randTilt = Random.Range(-angleRandomness, angleRandomness);
float randSpin = Random.Range(-angleRandomness, angleRandomness);
return pivot.transform;
}
Quaternion tilt = Quaternion.Euler(branchAngle + randTilt, 0, 0);
Quaternion spin = Quaternion.Euler(0, (i * angleStep) + (depth * 25f) + randSpin, 0);
// 공통 실행 로직: 나뭇가지가 뻗어나갈 방향 계산
Quaternion CalculateRotation(Quaternion currentRot, int depth, int index, float angleStep)
{
float randTilt = Random.Range(-angleRandomness, angleRandomness);
float randSpin = Random.Range(-angleRandomness, angleRandomness);
Quaternion finalRot = rot * spin * tilt;
Quaternion tilt = Quaternion.Euler(branchAngle + randTilt, 0, 0);
Quaternion spin = Quaternion.Euler(0, (index * angleStep) + (depth * 25f) + randSpin, 0);
// 다음 가지 생성 코루틴 실행
StartCoroutine(CreateBranchRoutine(endPoint, finalRot, nextLength, depth + 1, pivot.transform));
}
return currentRot * spin * tilt;
}
}
// 바람에 흔들리는 효과를 담당하는 컴포넌트
[ExecuteAlways]
public class BranchSway : MonoBehaviour
{
private Quaternion initialLocalRotation;
@ -105,15 +187,22 @@ public class BranchSway : MonoBehaviour
initialLocalRotation = transform.localRotation;
offset = Random.Range(0f, 100f);
speed = 1f + Random.Range(0f, 0.5f);
// 끝가지일수록, 그리고 windStrength가 강할수록 더 많이 흔들림. 잘 보이도록 수치를 키움
amount = 2.5f * (depth + 1) * windStrength;
}
void Update()
{
// 시간에 따라 부드럽게 흔들리도록 사인 곡선 적용
float angleX = Mathf.Sin(Time.time * speed + offset) * amount;
float angleZ = Mathf.Cos(Time.time * speed * 0.8f + offset) * amount;
float timeToUse = Time.time;
#if UNITY_EDITOR
if (!Application.isPlaying) {
// 에디터 모드에서는 Scene View나 Inspector 갱신 시 timeSinceStartup을 사용
timeToUse = (float)UnityEditor.EditorApplication.timeSinceStartup;
}
#endif
float angleX = Mathf.Sin(timeToUse * speed + offset) * amount;
float angleZ = Mathf.Cos(timeToUse * speed * 0.8f + offset) * amount;
transform.localRotation = initialLocalRotation * Quaternion.Euler(angleX, 0, angleZ);
}
}

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 00a587ad44e4fc94a9ece133be72f97c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,403 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 2
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 1
m_PVRFilteringGaussRadiusAO: 1
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &52029124
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 52029127}
- component: {fileID: 52029126}
- component: {fileID: 52029125}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &52029125
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 52029124}
m_Enabled: 1
--- !u!20 &52029126
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 52029124}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &52029127
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 52029124}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &907422571
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 907422572}
- component: {fileID: 907422573}
m_Layer: 0
m_Name: Root
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &907422572
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 907422571}
serializedVersion: 2
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_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &907422573
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 907422571}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 160e45857f86fb04c9324db3eb71638b, type: 3}
m_Name:
m_EditorClassIdentifier: '::'
branchPrefab: {fileID: 1510773012873295617, guid: e01883c9913699b48b7ad6fb029372aa, type: 3}
maxDepth: 5
branchAngle: 45
scaleReduction: 0.7
initialLength: 5
branchesPerLevel: 4
trunkColor: {r: 0.4, g: 0.2, b: 0, a: 1}
leafColor: {r: 1, g: 0.4, b: 0.6, a: 1}
lengthRandomness: 0.473
angleRandomness: 20
growthDelay: 0.1
windStrength: 1.5
--- !u!1 &2063123966
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2063123969}
- component: {fileID: 2063123968}
- component: {fileID: 2063123967}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &2063123967
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2063123966}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_CustomShadowLayers: 0
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
m_RenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_ShadowRenderingLayersMask:
serializedVersion: 0
m_Bits: 1
m_Version: 4
m_LightLayerMask: 1
m_ShadowLayerMask: 1
m_RenderingLayers: 1
m_ShadowRenderingLayers: 1
--- !u!108 &2063123968
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2063123966}
m_Enabled: 1
serializedVersion: 12
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize2D: {x: 0.5, y: 0.5}
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
m_LightUnit: 1
m_LuxAtDistance: 1
m_EnableSpotReflector: 1
--- !u!4 &2063123969
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2063123966}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 52029127}
- {fileID: 2063123969}
- {fileID: 907422572}

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 4a7ba63d6a7fed14e96bdf0a55bdd2d4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Loading…
Cancel
Save