Land Explorer in HomeCamp with boot loading, journal UI, and CDN publish tooling.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
udx
2026-11-04 16:18:01 +08:00
co-authored by Cursor
parent 9eec364f30
commit 80678ec499
405 changed files with 48053 additions and 420302 deletions
@@ -162,120 +162,6 @@ public static class BuildCharacterAnimationLab
EditorSceneManager.CloseScene(scene,true);
}
}
public static string BuildLmGirl()
{
if (EditorApplication.isPlaying) throw new InvalidOperationException("Edit Mode required.");
const string targetRoot=Root+"/LmGirl";
const string generated=targetRoot+"/Generated";
if (SceneManager.GetSceneByPath(targetRoot+"/LmGirlAnimationLab.unity").isLoaded)
throw new InvalidOperationException("Open a different scene before rebuilding LmGirl; Unity cannot overwrite another loaded scene.");
Folder(generated);
var data=JsonConvert.DeserializeObject<Data>(File.ReadAllText(Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/rig_mixamo41/unity_review_data.json")));
var meshes=data.variants.ToDictionary(v=>v.name,v=>MakeMesh(v,data.bones,generated));
var website=JsonConvert.DeserializeObject<Data>(File.ReadAllText(Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/rig_mixamo41/website/unity_review_data.json")));
meshes["mixamo"]=MakeMesh(website.variants[0],website.bones,generated);
var gait=JsonConvert.DeserializeObject<Gait>(File.ReadAllText(Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/rig_mixamo41/gait_correction.json")));
var walk41=MakeClip(gait.motions["tokenrig"],data.bones,generated);
var walk33=MakeClip(gait.motions["mixamo"],website.bones,generated);
foreach (string suffix in new[]{"base","mix"})
{
string path=generated+"/LmGirlTpose_"+suffix+".png";
File.Copy(Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/xpbr/LmGirlTpose_"+suffix+".png"),path,true);
AssetDatabase.ImportAsset(path,ImportAssetOptions.ForceSynchronousImport);
var importer=(TextureImporter)AssetImporter.GetAtPath(path);
importer.sRGBTexture=suffix=="base";importer.maxTextureSize=1024;
importer.alphaIsTransparency=false;importer.SaveAndReimport();
}
string matPath=generated+"/LmGirlTextured.mat";
var material=AssetDatabase.LoadAssetAtPath<Material>(matPath);
if (!material)
{
material=new Material(AssetDatabase.LoadAssetAtPath<Material>(Generated+"/CharacterTextured.mat"));
AssetDatabase.CreateAsset(material,matPath);
}
material.SetTexture("_MainTex",AssetDatabase.LoadAssetAtPath<Texture2D>(generated+"/LmGirlTpose_base.png"));
material.SetTexture("_MixTex",AssetDatabase.LoadAssetAtPath<Texture2D>(generated+"/LmGirlTpose_mix.png"));
EditorUtility.SetDirty(material);
var uiPath=JsonUIPrefabBuilder.BuildFromJsonFile(Path.Combine(Repo,"Doc/UIPrefabCreater/UI_LmGirlAnimationLab.json"));
if (string.IsNullOrEmpty(uiPath)) throw new InvalidOperationException("LmGirl UI conversion failed.");
var previous=SceneManager.GetActiveScene();
var scene=EditorSceneManager.NewScene(NewSceneSetup.EmptyScene,NewSceneMode.Additive);
try
{
SceneManager.SetActiveScene(scene);
var root=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(Generated+"/CharacterAnimationLab.prefab"));
PrefabUtility.UnpackPrefabInstance(root,PrefabUnpackMode.Completely,InteractionMode.AutomatedAction);
root.name="LmGirlAnimationLab";
var viewer=root.GetComponent<CharacterAnimationLab>();
string[] variants={"mixamo","raw","post","local"};
string[] labels={"Mixamo 网站 · 33 骨","TokenRig 原始 · 41 骨","体素后处理 · 41 骨","局部约束 · 41 骨"};
var slots=viewer.actors.Select(a=>a.rig.transform.parent).ToList();
foreach(var actor in viewer.actors)UnityEngine.Object.DestroyImmediate(actor.rig);
slots.Add(UnityEngine.Object.Instantiate(slots[2],root.transform));
viewer.actors=new CharacterAnimationLab.Actor[4];
Color[] colors={new Color(.49f,.78f,.85f),new Color(.94f,.72f,.43f),new Color(.68f,.62f,.85f),new Color(.62f,.82f,.51f)};
Quaternion Rotation(float[] q)=>new Quaternion(q[0],q[1],q[2],q[3]);
for (int i=0;i<variants.Length;i++)
{
var actorData=i==0?website:data;
var slot=slots[i];slot.localPosition=new Vector3((i-1.5f)*.83f,0,0);
slot.name="Stage_LmGirl_"+variants[i];
slot.GetComponentInChildren<Renderer>().sharedMaterial=Material("LmGirlPedestal"+i,colors[i],generated);
var rig=new GameObject("Rig");rig.transform.SetParent(slot,false);rig.transform.localScale=Vector3.one*(1.55f/actorData.height);
var bones=new Transform[actorData.bones.Length];
for (int b=0;b<bones.Length;b++)
{
var go=new GameObject(actorData.bones[b].name);bones[b]=go.transform;
go.transform.SetParent(actorData.bones[b].parent<0?rig.transform:bones[actorData.bones[b].parent],false);
SetTRS(go.transform,actorData.bones[b].rest);
}
var meshGo=new GameObject("CharacterMesh");meshGo.transform.SetParent(rig.transform,false);
var skin=meshGo.AddComponent<SkinnedMeshRenderer>();skin.sharedMesh=meshes[variants[i]];skin.bones=bones;skin.rootBone=bones[0];
skin.sharedMaterial=material;skin.quality=SkinQuality.Auto;skin.updateWhenOffscreen=true;
skin.localBounds=new Bounds(new Vector3(0,.75f,0),new Vector3(3,3,3));
viewer.actors[i]=new CharacterAnimationLab.Actor{label=labels[i],rig=rig,hips=bones[0],
rightHand=bones.First(b=>b.name=="mixamorig:RightHand"),renderer=skin,
walkingClip=i==0?walk33:walk41,
translationScale=actorData.translationScale,translationOffsets=actorData.translationOffsets.Select(x=>V(x)).ToArray(),
translationDeltaRotations=actorData.translationDeltaRotations?.Select(Rotation).ToArray()??Array.Empty<Quaternion>(),
bindRotationCorrections=actorData.bindRotationCorrections?.Select(Rotation).ToArray()??Array.Empty<Quaternion>(),
rotationParents=actorData.rotationParents??Array.Empty<int>()};
}
UnityEngine.Object.DestroyImmediate(viewer.ui.gameObject);
var ui=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(uiPath),root.transform);
viewer.ui=ui.transform;ui.GetComponentInChildren<AnimationLabSeekBar>().viewer=viewer;
viewer.texturedMaterial=material;viewer.motion=0;viewer.time=10f/30;viewer.focus=-1;viewer.detail=0;viewer.yaw=0;viewer.textured=true;viewer.playing=true;
viewer.Sample();
RenderSettings.ambientMode=AmbientMode.Flat;RenderSettings.ambientLight=new Color(.65f,.69f,.73f);RenderSettings.fog=false;
if (!EditorSceneManager.SaveScene(scene,targetRoot+"/LmGirlAnimationLab.unity"))
throw new IOException("LmGirl scene was not saved.");
PrefabUtility.SaveAsPrefabAsset(root,generated+"/LmGirlAnimationLab.prefab");
// Keep the rejected generic-cleaning experiments inspectable as
// persistent prefabs without promoting them to the default lineup.
for(int b=0;b<data.bones.Length;b++)SetTRS(viewer.actors[1].renderer.bones[b],data.bones[b].rest);
for(int b=0;b<website.bones.Length;b++)SetTRS(viewer.actors[0].renderer.bones[b],website.bones[b].rest);
PrefabUtility.SaveAsPrefabAsset(viewer.actors[0].rig,generated+"/LmGirl_mixamo.prefab");
foreach (string variant in new[]{"raw","post","clean","clean_eps","local"})
{
var actor=viewer.actors[1];actor.renderer.sharedMesh=meshes[variant];
PrefabUtility.SaveAsPrefabAsset(actor.rig,generated+"/LmGirl_"+variant+".prefab");
}
AssetDatabase.SaveAssets();
return JsonConvert.SerializeObject(new{scene=targetRoot+"/LmGirlAnimationLab.unity",visibleVariants=4,websiteBones=website.bones.Length,tokenRigBones=data.bones.Length,triangles=4999,sourceClips=viewer.clips.Select(c=>AssetDatabase.GetAssetPath(c)),walkingClips=new[]{AssetDatabase.GetAssetPath(walk33),AssetDatabase.GetAssetPath(walk41)},translationScale=data.translationScale});
}
finally
{
if (previous.IsValid()&&previous.isLoaded)SceneManager.SetActiveScene(previous);
EditorSceneManager.CloseScene(scene,true);
}
}
public static string OpenLmGirl()
{
if (EditorSceneManager.GetSceneManagerSetup().Any(s=>SceneManager.GetSceneByPath(s.path).isDirty))throw new InvalidOperationException("Existing scene has unsaved changes.");
EditorSceneManager.OpenScene(Root+"/LmGirl/LmGirlAnimationLab.unity",OpenSceneMode.Single);
Selection.activeGameObject=UnityEngine.Object.FindObjectOfType<CharacterAnimationLab>().gameObject;
return SceneManager.GetActiveScene().path;
}
public static string RefineLayout()
{
if (EditorApplication.isPlaying) throw new InvalidOperationException("Edit Mode required.");
+73 -11
View File
@@ -340,8 +340,8 @@ public static class BuildHomeCamp
}
Add<Tonemapping>().mode.value = TonemappingMode.Neutral;
var color = Add<ColorAdjustments>();
// Noon frame + another ~20% brightness (EV += log2(1.2)); mild contrast keeps shade soft-PBR.
color.postExposure.value = .74f; color.contrast.value = 10; color.saturation.value = 5; color.hueShift.value = 0;
// Keep the sunny palette while retaining roof and paving highlights in the home screen.
color.postExposure.value = .30f; color.contrast.value = 10; color.saturation.value = 5; color.hueShift.value = 0;
color.colorFilter.value = Color.white;
var white = Add<WhiteBalance>(); white.temperature.value = 6; white.tint.value = 0;
var bloom = Add<Bloom>(); bloom.threshold.value = 1.15f; bloom.intensity.value = .12f; bloom.scatter.value = .55f;
@@ -415,6 +415,7 @@ public static class BuildHomeCamp
camera.allowHDR = true; camera.allowMSAA = true;
var data = camera.GetUniversalAdditionalCameraData();
data.renderPostProcessing = true; data.volumeLayerMask = 1 << Layer;
data.renderShadows = true;
return camera;
}
static Light Light(Scene scene, Transform parent)
@@ -425,10 +426,10 @@ public static class BuildHomeCamp
// Key: warm sun. Fill comes from a separate baked skylight so Subtractive maps do not crush backfaces.
// Fully Baked sun: cast shadows live in the lightmap RGB. Mixed/Subtractive still needs
// realtime shadow maps, which offscreen camera.Render does not produce — so review looked shadowless.
// Noon key: high elevation, +30% intensity vs prior look-dev; shade deepened in bake/shaders.
light.color = new Color(1, .98f, .94f); light.intensity = 2.15f; light.shadows = LightShadows.Soft;
light.lightmapBakeType = LightmapBakeType.Baked; light.shadowAngle = 4;
light.shadowStrength = .94f; light.shadowBias = .05f; light.shadowNormalBias = .3f;
// Noon key: warm sun with realtime soft shadows for buildings, explorer and companions.
light.color = new Color(1, .98f, .94f); light.intensity = 1.95f; light.shadows = LightShadows.Soft;
light.lightmapBakeType = LightmapBakeType.Realtime; light.shadowAngle = 4;
light.shadowStrength = .85f; light.shadowBias = .05f; light.shadowNormalBias = .3f;
light.cullingMask = 1 << Layer; go.transform.rotation = Quaternion.Euler(68, 50, 0);
BakeFillLight(scene, parent);
return light;
@@ -471,12 +472,13 @@ public static class BuildHomeCamp
renderer.sharedMaterial = AssetDatabase.LoadAssetAtPath<Material>(Root + "/backdrop.mat");
renderer.shadowCastingMode = ShadowCastingMode.Off; renderer.receiveShadows = false;
const float distance = 75;
var halfHeight = distance * Mathf.Tan(camera.fieldOfView * Mathf.Deg2Rad * .5f);
var width = halfHeight * 2 * 1080f / 1920;
var height = width / 1.5f;
go.transform.position = camera.transform.position + camera.transform.forward * distance + camera.transform.up * (halfHeight - height * .5f);
// Wide enough for 3:4 tablets and tall enough for 9:22 ultra-long displays with margin.
const float width = 72f;
const float height = 56f;
const float topHeight = 52f;
go.transform.position = camera.transform.position + camera.transform.forward * distance + camera.transform.up * (topHeight - height * .5f);
go.transform.rotation = camera.transform.rotation;
go.transform.localScale = new Vector3(width * 1.04f, height * 1.04f, 1);
go.transform.localScale = new Vector3(width, height, 1);
SetLayer(go);
}
@@ -529,6 +531,66 @@ public static class BuildHomeCamp
foreach (var house in new[] { "MainHouse", "HouseLeft", "HouseRight" })
root.transform.Find(house).position += Vector3.down * .08f;
Put("fountain", "Fountain", 0, .8f, 4.4f, true);
// Place protagonist Explorer in the central plaza (scaled 4x for isometric camp readability)
var explorerPrefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Characters/Human/Explorer/Explorer.prefab");
if (explorerPrefab != null)
{
var explorerGo = (GameObject)PrefabUtility.InstantiatePrefab(explorerPrefab, root.transform);
explorerGo.name = "Explorer";
float expY = GroundY(ground, 0, -3.5f);
explorerGo.transform.position = new Vector3(0, expY, -3.5f);
explorerGo.transform.localScale = Vector3.one * 4.0f;
// Face towards camera / player by default
explorerGo.transform.rotation = Quaternion.Euler(0, 180f, 0);
SetLayer(explorerGo);
placements.Add("Explorer protagonist groundY=" + expY.ToString("F3"));
}
// Place wandering companions in the camp (scaled 4x for isometric readability)
var petDefs = new[]
{
(path: "Assets/Bundles/Characters/Animal/FireCat/FireCat_Companion.prefab", name: "Pet_FireCat", x: -3.8f, z: 1.2f, r: 2.8f, s: 3.40f),
(path: "Assets/Bundles/Characters/Animal/RockBallStudio/RockBallStudio_Companion.prefab", name: "Pet_RockBall", x: 2.6f, z: -1.8f, r: 2.8f, s: 3.00f),
(path: "Assets/Bundles/Characters/Animal/BudBud/BudBud_Companion.prefab", name: "Pet_BudBud", x: -1.6f, z: 4.2f, r: 2.6f, s: 3.20f)
};
var petWandererType = AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetType("HotUpdate.Gameplay.CampPetWanderer"))
.FirstOrDefault(t => t != null);
foreach (var petDef in petDefs)
{
var petPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(petDef.path);
if (petPrefab == null) continue;
var petGo = (GameObject)PrefabUtility.InstantiatePrefab(petPrefab, root.transform);
petGo.name = petDef.name;
float petY = GroundY(ground, petDef.x, petDef.z);
petGo.transform.position = new Vector3(petDef.x, petY, petDef.z);
petGo.transform.localScale = Vector3.one * petDef.s;
// Default facing towards camera for -Z models
petGo.transform.rotation = Quaternion.Euler(0, 0, 0);
SetLayer(petGo);
var col = petGo.GetComponent<CapsuleCollider>();
if (col == null)
{
col = petGo.AddComponent<CapsuleCollider>();
col.center = new Vector3(0, 0.45f, 0);
col.radius = 0.4f;
col.height = 1.0f;
}
if (petWandererType != null)
{
var wanderer = petGo.GetComponent(petWandererType);
if (wanderer == null) wanderer = petGo.AddComponent(petWandererType);
var centerField = petWandererType.GetField("wanderCenter");
if (centerField != null) centerField.SetValue(wanderer, new Vector3(petDef.x, petY, petDef.z));
var radiusField = petWandererType.GetField("wanderRadius");
if (radiusField != null) radiusField.SetValue(wanderer, petDef.r);
}
placements.Add($"{petDef.name} groundY={petY:F3}");
}
// Keep canopy trees behind the roofs so they frame the backdrop without dunking HouseLeft in shadow.
// Nearer canopy slots are placed after the viewer vector, as DGX meshes when ready.
// TreeRearLeft / TreeRearRight stay cards: they sit behind the roofs and another 2000 tris each is not worth it.
+3 -3
View File
@@ -6,7 +6,7 @@ using UnityEngine;
using UnityEngine.Rendering;
/// <summary>
/// 历史 LmGirl / LmCat 观察场景,保留旧 -Z 资产及相机方向;项目新资源采用 +Z 正面。
/// 历史 Explorer / LmCat 观察场景,保留旧 -Z 资产及相机方向;项目新资源采用 +Z 正面。
/// unity command run_script --file AgentScripts/BuildModelView.cs --entry BuildModelView.Run
/// </summary>
public static class BuildModelView
@@ -14,7 +14,7 @@ public static class BuildModelView
const string SceneDir = "Assets/Bundles/Scenes/Test/ModelView";
const string ScenePath = SceneDir + "/ModelView.unity";
const string GroundMatPath = SceneDir + "/Ground.mat";
const string GirlPath = "Assets/Bundles/Characters/Human/LmGirl/LmGirl.prefab";
const string GirlPath = "Assets/Bundles/Characters/Human/Explorer/Explorer.prefab";
const string CatPath = "Assets/Bundles/Characters/Animal/LmCat/LmCat.prefab";
public static string Run()
@@ -54,7 +54,7 @@ public static class BuildModelView
var houses = PlaceHouses();
var girlGo = (GameObject)PrefabUtility.InstantiatePrefab(girl);
girlGo.name = "LmGirl";
girlGo.name = "Explorer";
girlGo.transform.SetPositionAndRotation(new Vector3(-1.6f, 0f, -36f), Quaternion.identity);
var catGo = (GameObject)PrefabUtility.InstantiatePrefab(cat);
+41
View File
@@ -0,0 +1,41 @@
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
public static class CheckPetFacing
{
public static string Run()
{
var paths = new[]
{
"Assets/Bundles/Characters/Animal/FireCat/FireCat_Companion.prefab",
"Assets/Bundles/Characters/Animal/RockBallStudio/RockBallStudio_Companion.prefab",
"Assets/Bundles/Characters/Animal/BudBud/BudBud_Companion.prefab"
};
var sb = new System.Text.StringBuilder();
foreach (var path in paths)
{
var go = AssetDatabase.LoadAssetAtPath<GameObject>(path);
if (go == null) continue;
var smr = go.GetComponentInChildren<SkinnedMeshRenderer>();
var anim = go.GetComponentInChildren<Animator>();
sb.AppendLine($"=== {go.name} ===");
if (smr != null)
{
var bounds = smr.localBounds;
sb.AppendLine($" SMR: {smr.name}, localBounds center={bounds.center}, size={bounds.size}");
if (smr.rootBone != null)
{
sb.AppendLine($" RootBone: {smr.rootBone.name}, localRot={smr.rootBone.localEulerAngles}, forward={smr.rootBone.forward}");
}
}
if (anim != null)
{
sb.AppendLine($" Animator on: {anim.gameObject.name}, rot={anim.transform.localEulerAngles}");
}
}
return sb.ToString();
}
}
#endif
@@ -1,178 +0,0 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEditor.Animations;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Animations;
using UnityEngine.Playables;
public static class DiagnoseSharedHumanoidWalk
{
const string Boy="Assets/Bundles/Characters/Human/test/Boy_mixamo/CampGuideStudio.fbx";
const string Girl="Assets/Bundles/Characters/Human/test/girl/LmGirlTpose.fbx";
const string Walk="Assets/Bundles/Characters/Human/Common/Walking.fbx";
static string Output=>Path.Combine(Directory.GetParent(Application.dataPath).Parent.FullName,"Tools/output/lmgirl_tpose_studio/shared_walk_audit");
static float[] V(Vector3 v)=>new[]{v.x,v.y,v.z};
static string P(UnityEngine.Object o)=>o?AssetDatabase.GetAssetPath(o):null;
static readonly HumanBodyBones[] BoneIds={HumanBodyBones.Hips,HumanBodyBones.LeftUpperLeg,HumanBodyBones.RightUpperLeg,HumanBodyBones.LeftLowerLeg,HumanBodyBones.RightLowerLeg,HumanBodyBones.LeftFoot,HumanBodyBones.RightFoot,HumanBodyBones.LeftToes,HumanBodyBones.RightToes};
static object[] Pose(Animator a)=>BoneIds.Select(id=>{var t=a.GetBoneTransform(id);return (object)new{bone=id.ToString(),name=t?t.name:null,position=t?V(a.transform.InverseTransformPoint(t.position)):null,rotation=t?V(t.localEulerAngles):null};}).ToArray();
public static string Inspect()
{
var scene=EditorSceneManager.NewPreviewScene();
try
{
var assets=new List<object>();
foreach(var path in new[]{Boy,Girl,Walk})
{
var importer=(ModelImporter)AssetImporter.GetAtPath(path);var hd=importer.humanDescription;
var avatar=AssetDatabase.LoadAllAssetsAtPath(path).OfType<Avatar>().FirstOrDefault();
var go=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(path),scene);
var animator=go.GetComponent<Animator>();if(animator)animator.runtimeAnimatorController=null;
var ahd=avatar?avatar.humanDescription:new HumanDescription();
assets.Add(new{path,importer.animationType,importer.avatarSetup,sourceAvatar=P(importer.sourceAvatar),avatar=avatar?avatar.name:null,valid=avatar&&avatar.isValid,
importerHuman=hd.human.Select(b=>new{b.humanName,b.boneName}).ToArray(),importerSkeleton=hd.skeleton.Select(b=>new{b.name,p=V(b.position),r=V(b.rotation.eulerAngles),s=V(b.scale)}).ToArray(),
avatarHuman=ahd.human==null?null:ahd.human.Select(b=>new{b.humanName,b.boneName}).ToArray(),avatarSkeleton=ahd.skeleton==null?null:ahd.skeleton.Select(b=>new{b.name,p=V(b.position),r=V(b.rotation.eulerAngles),s=V(b.scale)}).ToArray(),
pose=animator&&animator.isHuman?Pose(animator):null});
UnityEngine.Object.DestroyImmediate(go);
}
Directory.CreateDirectory(Output);var json=JsonConvert.SerializeObject(assets,Formatting.Indented);File.WriteAllText(Path.Combine(Output,"avatars.json"),json);return "Saved "+Output+"/avatars.json";
}
finally{EditorSceneManager.ClosePreviewScene(scene);}
}
public static string Compare()
{
var scene=EditorSceneManager.NewPreviewScene();var results=new List<object>();
try
{
foreach(var path in new[]{Boy,Girl})foreach(bool footIK in new[]{false,true})
{
var go=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(path),scene);
var a=go.GetComponent<Animator>();a.runtimeAnimatorController=null;a.applyRootMotion=false;a.cullingMode=AnimatorCullingMode.AlwaysAnimate;
var clip=AssetDatabase.LoadAllAssetsAtPath(Walk).OfType<AnimationClip>().First(c=>!c.name.StartsWith("__preview__"));
var graph=PlayableGraph.Create("SharedWalkAudit");graph.SetTimeUpdateMode(DirectorUpdateMode.Manual);
try
{
var playable=AnimationClipPlayable.Create(graph,clip);playable.SetApplyFootIK(footIK);playable.SetApplyPlayableIK(false);
var output=AnimationPlayableOutput.Create(graph,"Animation",a);output.SetSourcePlayable(playable);graph.Play();
var frames=new List<object>();float minGap=float.MaxValue,maxGap=float.MinValue;int crossed=0;
for(int i=0;i<125;i++)
{
playable.SetTime(i/120.0);graph.Evaluate(0);
var left=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.LeftFoot).position);var right=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.RightFoot).position);
float gap=right.x-left.x;minGap=Mathf.Min(minGap,gap);maxGap=Mathf.Max(maxGap,gap);if(gap<0)crossed++;
frames.Add(new{t=i/120.0,gap,pose=Pose(a)});
}
results.Add(new{path,footIK,minGap,maxGap,crossed,frames});
}
finally{graph.Destroy();UnityEngine.Object.DestroyImmediate(go);}
}
Directory.CreateDirectory(Output);var json=JsonConvert.SerializeObject(results,Formatting.Indented);File.WriteAllText(Path.Combine(Output,"baseline.json"),json);
return "Saved "+Output+"/baseline.json";
}
finally{EditorSceneManager.ClosePreviewScene(scene);}
}
public static string VerifyController()
{
const string controllerPath="Assets/Bundles/Characters/Human/Common/Man.controller";
var controller=AssetDatabase.LoadAssetAtPath<AnimatorController>(controllerPath);
var scene=EditorSceneManager.NewPreviewScene();var results=new List<object>();
var units=new List<GameObject>();var controllers=new List<AnimatorController>();
var material=new Material(Shader.Find("Universal Render Pipeline/Lit"));material.color=new Color(.65f,.7f,.76f);
try
{
int column=0;
foreach(var path in new[]{Boy,Girl})foreach(bool footIK in new[]{false,true})
{
// A transient controller contains only the actual walk state and clip.
var c=new AnimatorController();controllers.Add(c);c.AddLayer("Base Layer");
var state=c.layers[0].stateMachine.AddState("walk");state.motion=controller.layers[0].stateMachine.states.Single(s=>s.state.name=="walk").state.motion;state.iKOnFeet=footIK;c.layers[0].stateMachine.defaultState=state;
var go=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(path),scene);units.Add(go);
go.transform.position=new Vector3((1.5f-column++)*.85f,0,0);
var a=go.GetComponent<Animator>();a.runtimeAnimatorController=c;a.applyRootMotion=false;a.cullingMode=AnimatorCullingMode.AlwaysAnimate;
foreach(var r in go.GetComponentsInChildren<Renderer>())r.sharedMaterial=material;
a.Rebind();a.Update(0);
float minGap=float.MaxValue,maxGap=float.MinValue;int crossed=0,minFrame=0;
for(int i=0;i<125;i++)
{
a.Play("Base Layer.walk",0,(i/120f)/state.motion.averageDuration);a.Update(0);
var left=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.LeftFoot).position);var right=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.RightFoot).position);
float gap=right.x-left.x;if(gap<minGap){minGap=gap;minFrame=i;}maxGap=Mathf.Max(maxGap,gap);if(gap<0)crossed++;
}
results.Add(new{path,footIK,minGap,maxGap,crossed,minTime=minFrame/120f});
// Show all variants at the same phase, near the observed crossing.
a.Play("Base Layer.walk",0,(32/120f)/state.motion.averageDuration);a.Update(0);
var hips=a.GetBoneTransform(HumanBodyBones.Hips);var hp=hips.position;hp.x=go.transform.position.x;hp.z=0;hips.position=hp;
}
var light=new GameObject("AuditLight").AddComponent<Light>();SceneManager.MoveGameObjectToScene(light.gameObject,scene);light.type=LightType.Directional;light.intensity=1.5f;light.transform.rotation=Quaternion.Euler(35,135,0);
var camera=new GameObject("AuditCamera").AddComponent<Camera>();SceneManager.MoveGameObjectToScene(camera.gameObject,scene);camera.scene=scene;camera.orthographic=true;camera.orthographicSize=.8f;
camera.transform.position=new Vector3(0,.65f,5);camera.transform.LookAt(new Vector3(0,.65f,0));camera.clearFlags=CameraClearFlags.SolidColor;camera.backgroundColor=new Color(.19f,.22f,.26f);camera.nearClipPlane=.01f;camera.farClipPlane=20;
var rt=new RenderTexture(1600,720,24);var tex=new Texture2D(1600,720,TextureFormat.RGB24,false);var previous=RenderTexture.active;
Directory.CreateDirectory(Output);
try{camera.targetTexture=rt;camera.Render();RenderTexture.active=rt;tex.ReadPixels(new Rect(0,0,1600,720),0,0);tex.Apply();File.WriteAllBytes(Path.Combine(Output,"foot_ik_comparison.png"),tex.EncodeToPNG());}
finally{RenderTexture.active=previous;camera.targetTexture=null;rt.Release();UnityEngine.Object.DestroyImmediate(rt);UnityEngine.Object.DestroyImmediate(tex);}
var json=JsonConvert.SerializeObject(new{order=new[]{"Boy FootIK off","Boy FootIK on","Girl FootIK off","Girl FootIK on"},controllerPath,controllerDirty=EditorUtility.IsDirty(controller),stateDirty=EditorUtility.IsDirty(controller.layers[0].stateMachine.states.Single(s=>s.state.name=="walk").state),results},Formatting.Indented);
File.WriteAllText(Path.Combine(Output,"controller_verification.json"),json);return json;
}
finally
{
foreach(var go in units)UnityEngine.Object.DestroyImmediate(go);
foreach(var c in controllers){foreach(var l in c.layers){foreach(var s in l.stateMachine.states)UnityEngine.Object.DestroyImmediate(s.state);UnityEngine.Object.DestroyImmediate(l.stateMachine);}UnityEngine.Object.DestroyImmediate(c);}
EditorSceneManager.ClosePreviewScene(scene);UnityEngine.Object.DestroyImmediate(material);
}
}
public static string FixFootIK()
{
const string controllerPath="Assets/Bundles/Characters/Human/Common/Man.controller";
var controller=AssetDatabase.LoadAssetAtPath<AnimatorController>(controllerPath);
var state=controller.layers[0].stateMachine.states.Single(s=>s.state.name=="walk").state;
if(EditorUtility.IsDirty(controller)||EditorUtility.IsDirty(state))throw new Exception("Controller has unsaved edits; refusing to save unrelated edits.");
var scenesBefore=Enumerable.Range(0,SceneManager.sceneCount).Select(i=>{var s=SceneManager.GetSceneAt(i);return new{s.path,s.isDirty};}).ToArray();
bool previous=state.iKOnFeet;
state.iKOnFeet=true;EditorUtility.SetDirty(state);AssetDatabase.SaveAssetIfDirty(state);
var importer=(ModelImporter)AssetImporter.GetAtPath(Walk);
if(!state.iKOnFeet || P(state.motion)!=Walk || P(importer.sourceAvatar)!=Boy)throw new Exception("Unexpected controller/source setup");
var json=JsonConvert.SerializeObject(new{controllerPath,state=state.name,previousFootIK=previous,footIK=state.iKOnFeet,walk=P(state.motion),sourceAvatar=P(importer.sourceAvatar),
controllerDirty=EditorUtility.IsDirty(controller),stateDirty=EditorUtility.IsDirty(state),
actors=UnityEngine.Object.FindObjectsOfType<Animator>(true).Where(a=>a.runtimeAnimatorController==controller).Select(a=>new{a.name,avatar=P(a.avatar),a.applyRootMotion}).ToArray(),
scenesBefore,scenesAfter=Enumerable.Range(0,SceneManager.sceneCount).Select(i=>{var s=SceneManager.GetSceneAt(i);return new{s.path,s.isDirty};}).ToArray()},Formatting.Indented);
File.WriteAllText(Path.Combine(Output,"fix.json"),json);return json;
}
public static string VerifyApplied()
{
var controller=AssetDatabase.LoadAssetAtPath<AnimatorController>("Assets/Bundles/Characters/Human/Common/Man.controller");
var state=controller.layers[0].stateMachine.states.Single(s=>s.state.name=="walk").state;
if(!state.iKOnFeet)throw new Exception("Foot IK disabled");
var scene=EditorSceneManager.NewPreviewScene();var results=new List<object>();
try
{
foreach(var path in new[]{Boy,Girl})
{
var go=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(path),scene);
try
{
var a=go.GetComponent<Animator>();a.runtimeAnimatorController=controller;a.applyRootMotion=false;a.cullingMode=AnimatorCullingMode.AlwaysAnimate;a.Rebind();a.Update(0);
float minGap=float.MaxValue,maxGap=float.MinValue;int crossed=0;
for(int i=0;i<125;i++)
{
a.Play("Base Layer.walk",0,(i/120f)/state.motion.averageDuration);a.Update(0);
var left=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.LeftFoot).position);var right=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.RightFoot).position);
float gap=right.x-left.x;minGap=Mathf.Min(minGap,gap);maxGap=Mathf.Max(maxGap,gap);if(gap<0)crossed++;
}
if(crossed>0)throw new Exception("Crossing after fix: "+path);
results.Add(new{path,avatar=P(a.avatar),samples=125,minGap,maxGap,crossed});
}
finally{UnityEngine.Object.DestroyImmediate(go);}
}
var json=JsonConvert.SerializeObject(new{controller=P(controller),state=state.name,footIK=state.iKOnFeet,clip=P(state.motion),results},Formatting.Indented);
File.WriteAllText(Path.Combine(Output,"validation.json"),json);return json;
}
finally{EditorSceneManager.ClosePreviewScene(scene);}
}
}
#endif
@@ -1,123 +0,0 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography;
using Newtonsoft.Json;
using UnityEditor;
using UnityEditor.Animations;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
public static class ImportLmGirlTokenRigFbx
{
const string FolderPath="Assets/Bundles/Characters/Human/test/girl_tokenrig";
const string ModelPath=FolderPath+"/LmGirlTokenRig.fbx";
const string MaterialPath=FolderPath+"/LmGirlTokenRig.mat";
static string Repo=>Directory.GetParent(Application.dataPath).Parent.FullName;
static string Output=>Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/rig_mixamo41/fbx");
static float[] V(Vector3 v)=>new[]{v.x,v.y,v.z};
static void Folder(string p){if(AssetDatabase.IsValidFolder(p))return;Folder(Path.GetDirectoryName(p).Replace('\\','/'));AssetDatabase.CreateFolder(Path.GetDirectoryName(p).Replace('\\','/'),Path.GetFileName(p));}
static string Hash(string p){using(var sha=SHA256.Create())return BitConverter.ToString(sha.ComputeHash(File.ReadAllBytes(p))).Replace("-","").ToLowerInvariant();}
static void CopyNew(string source,string target)
{
var full=Path.Combine(Directory.GetParent(Application.dataPath).FullName,target);
if(File.Exists(full)){if(Hash(full)!=Hash(source))throw new Exception("Existing destination differs: "+target);}
else File.Copy(source,full);
AssetDatabase.ImportAsset(target,ImportAssetOptions.ForceSynchronousImport);
}
public static string Import()
{
if(EditorApplication.isPlaying)throw new Exception("Edit Mode required");
Folder(FolderPath);
foreach(var suffix in new[]{"base","mix"})
{
string path=FolderPath+"/LmGirlTokenRig_"+suffix+".png";
CopyNew(Path.Combine(Repo,"Tools/output/lmgirl_tpose_studio/xpbr/LmGirlTpose_"+suffix+".png"),path);
var ti=(TextureImporter)AssetImporter.GetAtPath(path);ti.sRGBTexture=suffix=="base";ti.alphaIsTransparency=false;ti.maxTextureSize=1024;ti.SaveAndReimport();
}
var material=AssetDatabase.LoadAssetAtPath<Material>(MaterialPath);
if(!material)
{
var reference=AssetDatabase.LoadAssetAtPath<Material>("Assets/Review/CharacterAnimationLab/LmGirl/Generated/LmGirlTextured.mat");
if(!reference)throw new Exception("Missing approved XPbr reference material");
material=new Material(reference);material.name="LmGirlTokenRig";AssetDatabase.CreateAsset(material,MaterialPath);
}
material.SetTexture("_MainTex",AssetDatabase.LoadAssetAtPath<Texture2D>(FolderPath+"/LmGirlTokenRig_base.png"));
material.SetTexture("_MixTex",AssetDatabase.LoadAssetAtPath<Texture2D>(FolderPath+"/LmGirlTokenRig_mix.png"));
EditorUtility.SetDirty(material);AssetDatabase.SaveAssetIfDirty(material);
CopyNew(Path.Combine(Output,"LmGirlTokenRig.fbx"),ModelPath);
var importer=(ModelImporter)AssetImporter.GetAtPath(ModelPath);
importer.animationType=ModelImporterAnimationType.Human;importer.avatarSetup=ModelImporterAvatarSetup.CreateFromThisModel;
importer.importAnimation=false;importer.globalScale=1;importer.useFileScale=true;
importer.importCameras=false;importer.importLights=false;
importer.meshCompression=ModelImporterMeshCompression.Off;
importer.skinWeights=ModelImporterSkinWeights.Custom;importer.maxBonesPerVertex=4;importer.minBoneWeight=0;
importer.materialImportMode=ModelImporterMaterialImportMode.ImportStandard;
importer.AddRemap(new AssetImporter.SourceAssetIdentifier(typeof(Material),"LmGirlTokenRig_Body"),material);
importer.SaveAndReimport();
var model=AssetDatabase.LoadAssetAtPath<GameObject>(ModelPath);
var avatar=AssetDatabase.LoadAllAssetsAtPath(ModelPath).OfType<Avatar>().FirstOrDefault();
if(!avatar || !avatar.isValid || !avatar.isHuman)throw new Exception("Invalid Humanoid Avatar");
if(!model.GetComponentsInChildren<SkinnedMeshRenderer>().All(s=>s.sharedMaterial==material))throw new Exception("Material remap failed");
return "Imported "+ModelPath+" with valid Humanoid Avatar and project XPbr material";
}
public static string Verify()
{
var scene=EditorSceneManager.NewPreviewScene();var units=new List<GameObject>();
var controller=AssetDatabase.LoadAssetAtPath<AnimatorController>("Assets/Bundles/Characters/Human/Common/Man.controller");
var walk=controller.layers[0].stateMachine.states.Single(s=>s.state.name=="walk").state;
var records=new List<object>();
try
{
int column=0;
foreach(var path in new[]{"Assets/Bundles/Characters/Human/test/girl/LmGirlTpose.fbx",ModelPath})
{
var go=(GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<GameObject>(path),scene);units.Add(go);
go.transform.position=new Vector3((.5f-column++)*.95f,0,0);
var a=go.GetComponent<Animator>();var skin=go.GetComponentInChildren<SkinnedMeshRenderer>();
if(!a||!a.isHuman||!a.avatar.isValid)throw new Exception("Invalid Animator: "+path);
var baked=new Mesh();skin.BakeMesh(baked);
var vertices=baked.vertices.Select(p=>go.transform.InverseTransformPoint(skin.transform.TransformPoint(p))).ToArray();
var lo=vertices.Aggregate(Vector3.positiveInfinity,Vector3.Min);var hi=vertices.Aggregate(Vector3.negativeInfinity,Vector3.Max);
var toes=new[]{HumanBodyBones.LeftToes,HumanBodyBones.RightToes}.Select(b=>go.transform.InverseTransformPoint(a.GetBoneTransform(b).position)).ToArray();
var ankles=new[]{HumanBodyBones.LeftFoot,HumanBodyBones.RightFoot}.Select(b=>go.transform.InverseTransformPoint(a.GetBoneTransform(b).position)).ToArray();
if(hi.y-lo.y<1 || hi.y-lo.y>1.4f || Mathf.Abs(lo.y)>.001f)throw new Exception("Wrong height/floor: "+path);
if(toes[0].z<=ankles[0].z||toes[1].z<=ankles[1].z)throw new Exception("Not facing +Z: "+path);
var counts=skin.sharedMesh.GetBonesPerVertex();int maxInfluences=0;foreach(var n in counts)maxInfluences=Math.Max(maxInfluences,n);counts.Dispose();
var rest=new{boundsMin=V(lo),boundsMax=V(hi),rootRotation=V(go.transform.localEulerAngles),rootScale=V(go.transform.localScale),toes=toes.Select(V).ToArray(),ankles=ankles.Select(V).ToArray()};
UnityEngine.Object.DestroyImmediate(baked);
a.runtimeAnimatorController=controller;a.applyRootMotion=false;a.cullingMode=AnimatorCullingMode.AlwaysAnimate;a.Rebind();a.Update(0);
float minGap=float.MaxValue,maxGap=float.MinValue;int crossed=0;
for(int i=0;i<125;i++)
{
a.Play("Base Layer.walk",0,(i/120f)/walk.motion.averageDuration);a.Update(0);
var left=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.LeftFoot).position);var right=go.transform.InverseTransformPoint(a.GetBoneTransform(HumanBodyBones.RightFoot).position);
float gap=right.x-left.x;minGap=Mathf.Min(minGap,gap);maxGap=Mathf.Max(maxGap,gap);if(gap<0)crossed++;
}
if(crossed>0)throw new Exception("Crossed ankles: "+path);
records.Add(new{path,avatar=a.avatar.name,a.avatar.isHuman,a.avatar.isValid,bones=skin.bones.Length,vertices=skin.sharedMesh.vertexCount,triangles=skin.sharedMesh.triangles.Length/3,
uv=skin.sharedMesh.uv.Length,maxInfluences,material=AssetDatabase.GetAssetPath(skin.sharedMaterial),shader=skin.sharedMaterial.shader.name,rest,
walk=new{clip=AssetDatabase.GetAssetPath(walk.motion),footIK=walk.iKOnFeet,samples=125,minGap,maxGap,crossed}});
a.Play("Base Layer.walk",0,.2666667f/walk.motion.averageDuration);a.Update(0);
var hips=a.GetBoneTransform(HumanBodyBones.Hips);var hp=hips.position;hp.x=go.transform.position.x;hp.z=0;hips.position=hp;
}
Render(scene);
var json=JsonConvert.SerializeObject(new{records,scenes=Enumerable.Range(0,SceneManager.sceneCount).Select(i=>{var s=SceneManager.GetSceneAt(i);return new{s.path,s.isDirty};}).ToArray()},Formatting.Indented);
File.WriteAllText(Path.Combine(Output,"unity_validation.json"),json);return json;
}
finally{EditorSceneManager.ClosePreviewScene(scene);}
}
static void Render(Scene scene)
{
var light=new GameObject("ExportAuditLight").AddComponent<Light>();SceneManager.MoveGameObjectToScene(light.gameObject,scene);light.type=LightType.Directional;light.intensity=1.3f;light.transform.rotation=Quaternion.Euler(35,140,0);
var camera=new GameObject("ExportAuditCamera").AddComponent<Camera>();SceneManager.MoveGameObjectToScene(camera.gameObject,scene);camera.scene=scene;camera.orthographic=true;camera.orthographicSize=.73f;
camera.transform.position=new Vector3(0,.61f,5);camera.transform.LookAt(new Vector3(0,.61f,0));camera.clearFlags=CameraClearFlags.SolidColor;camera.backgroundColor=new Color(.22f,.25f,.29f);camera.nearClipPlane=.01f;camera.farClipPlane=20;
var rt=new RenderTexture(1080,800,24);var tex=new Texture2D(1080,800,TextureFormat.RGB24,false);var previous=RenderTexture.active;
try{camera.targetTexture=rt;camera.Render();RenderTexture.active=rt;tex.ReadPixels(new Rect(0,0,1080,800),0,0);tex.Apply();File.WriteAllBytes(Path.Combine(Output,"unity_walking.png"),tex.EncodeToPNG());}
finally{RenderTexture.active=previous;camera.targetTexture=null;rt.Release();UnityEngine.Object.DestroyImmediate(rt);UnityEngine.Object.DestroyImmediate(tex);}
}
}
#endif
@@ -0,0 +1,41 @@
using System;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEngine.SceneManagement;
// Read-only diagnosis of the actual running camp, without rendering an extra camera frame.
public static class InspectCampLighting
{
public static string Run()
{
var pipeline = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
var cameras = UnityEngine.Object.FindObjectsOfType<Camera>(true);
var lights = UnityEngine.Object.FindObjectsOfType<Light>(true);
var renderers = UnityEngine.Object.FindObjectsOfType<Renderer>(true).Where(r => r.gameObject.layer == 29).ToArray();
var report = new {
time = DateTime.UtcNow, activeScene = SceneManager.GetActiveScene().path,
scenes = Enumerable.Range(0,SceneManager.sceneCount).Select(i=>new { SceneManager.GetSceneAt(i).path, SceneManager.GetSceneAt(i).isLoaded }).ToArray(),
maps = LightmapSettings.lightmaps.Length, ambient = RenderSettings.ambientMode.ToString(),
sky = RenderSettings.ambientSkyColor.ToString(), equator = RenderSettings.ambientEquatorColor.ToString(),
sun = RenderSettings.sun != null ? RenderSettings.sun.name : null,
pipeline = pipeline != null ? pipeline.name : null, mainShadows = pipeline != null && pipeline.supportsMainLightShadows,
shadowDistance = pipeline != null ? pipeline.shadowDistance : 0,
cameras = cameras.Select(c => new { c.name, c.enabled, active = c.gameObject.activeInHierarchy,
c.cullingMask, target = c.targetTexture != null ? c.targetTexture.name : null,
shadows = c.GetComponent<UniversalAdditionalCameraData>()?.renderShadows }).ToArray(),
lights = lights.Select(l=>new { l.name, l.enabled, active = l.gameObject.activeInHierarchy, l.intensity, l.cullingMask,
bake=l.lightmapBakeType.ToString(), shadows=l.shadows.ToString(), l.shadowStrength }).ToArray(),
rendererCount=renderers.Length, lightmapped=renderers.Count(r=>r.lightmapIndex>=0 && r.lightmapIndex<LightmapSettings.lightmaps.Length),
renderers=renderers.Take(12).Select(r=>new {r.name, r.lightmapIndex, shadows=r.shadowCastingMode.ToString(), r.receiveShadows,
shader=r.sharedMaterial!=null?r.sharedMaterial.shader.name:null}).ToArray()
};
string json = JsonConvert.SerializeObject(report,Formatting.Indented);
string folder=Path.GetFullPath(Path.Combine(Application.dataPath,"../../Tools/output/camp_lighting"));
Directory.CreateDirectory(folder); File.WriteAllText(Path.Combine(folder,"runtime_diagnosis.json"),json);
return json;
}
}
@@ -0,0 +1,71 @@
using System;
using System.IO;
using System.Linq;
using System.Collections;
using Newtonsoft.Json;
using UnityEngine;
public static class InspectHomeCampAot
{
public static string BuildAndCheck()
{
var built = AOT.Editor.YooAssetTools.BuildAndStageHotUpdate.BuildAndStage();
if (!built.StartsWith("ok", StringComparison.Ordinal)) throw new Exception(built);
return built + " | " + CheckHotUpdate();
}
public static string CheckHotUpdate()
{
var cecil = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "Mono.Cecil");
var definition = cecil.GetType("Mono.Cecil.AssemblyDefinition");
var stripped = Path.GetFullPath(Path.Combine(Application.dataPath, "../Library/Bee/artifacts/WebGL/ManagedStripped/YooAsset.dll"));
object original = definition.GetMethod("ReadAssembly", new[] { typeof(string) }).Invoke(null, new object[] { stripped });
object update = definition.GetMethod("ReadAssembly", new[] { typeof(string) }).Invoke(null, new object[] { Path.Combine(Application.dataPath, "Bundles/Raw/HotUpdate.Runtime.bytes") });
var calls = new System.Collections.Generic.List<string>();
using ((IDisposable)original)
using ((IDisposable)update)
{
var oldModule = Property(original, "MainModule");
var module = Property(update, "MainModule");
var references = (IEnumerable)module.GetType().GetMethod("GetMemberReferences", Type.EmptyTypes).Invoke(module, null);
foreach (object reference in references)
{
var declaring = Property(reference, "DeclaringType");
string typeName = (string)Property(declaring, "FullName");
if (typeName != "YooAsset.SceneHandle" && typeName != "YooAsset.HandleBase") continue;
string fullName = (string)Property(reference, "FullName");
object type = oldModule.GetType().GetMethod("GetType", new[] { typeof(string) }).Invoke(oldModule, new object[] { typeName });
var retained = ((IEnumerable)Property(type, "Methods")).Cast<object>().Any(m => (string)Property(m, "FullName") == fullName);
if (!retained) throw new Exception("Hot update uses a method absent from the shipped shell: " + fullName);
calls.Add(fullName);
}
}
var report = JsonConvert.SerializeObject(new { passed=true, baseline=stripped, retainedCalls=calls });
var output = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/homecamp_aot_compatibility"));
Directory.CreateDirectory(output); File.WriteAllText(Path.Combine(output, "aot_check.json"), report);
return report;
}
public static string Run()
{
var directory = Path.GetFullPath(Path.Combine(Application.dataPath, "../Library/Bee/artifacts/WebGL/ManagedStripped"));
var cecil = AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "Mono.Cecil");
var definition = cecil.GetType("Mono.Cecil.AssemblyDefinition");
var output = new System.Collections.Generic.List<object>();
foreach (var file in new[] { "YooAsset.dll", "UnityEngine.CoreModule.dll" })
{
object assembly = definition.GetMethod("ReadAssembly", new[] { typeof(string) }).Invoke(null, new object[] { Path.Combine(directory, file) });
using ((IDisposable)assembly)
{
object module = Property(assembly, "MainModule");
foreach (var name in new[] { "YooAsset.SceneHandle", "YooAsset.HandleBase", "UnityEngine.SceneManagement.SceneManager" })
{
object type = module.GetType().GetMethod("GetType", new[] { typeof(string) }).Invoke(module, new object[] { name });
if (type != null) output.Add(new { file, written = File.GetLastWriteTimeUtc(Path.Combine(directory, file)), type = name,
methods = ((IEnumerable)Property(type, "Methods")).Cast<object>().Select(m => Property(m, "FullName")).ToArray() });
}
}
}
return JsonConvert.SerializeObject(output);
}
static object Property(object value, string name) => value.GetType().GetProperty(name).GetValue(value);
}
@@ -1,34 +0,0 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using UnityEditor;
using UnityEngine;
public static class InspectLmGirlMaterials
{
static string PathOf(UnityEngine.Object obj)=>obj?AssetDatabase.GetAssetPath(obj):null;
static object MaterialInfo(Material material)=>material?new{name=material.name,path=PathOf(material),shader=material.shader?material.shader.name:null,
textures=material.GetTexturePropertyNames().Select(p=>new{property=p,texture=PathOf(material.GetTexture(p))}).ToArray()}:null;
static object Renderers(GameObject obj)=>obj.GetComponentsInChildren<Renderer>(true).Select(r=>new{r.name,
mesh=r is SkinnedMeshRenderer skin&&skin.sharedMesh?new{name=skin.sharedMesh.name,vertices=skin.sharedMesh.vertexCount,uv=skin.sharedMesh.HasVertexAttribute(UnityEngine.Rendering.VertexAttribute.TexCoord0)}:null,
materials=r.sharedMaterials.Select(MaterialInfo).ToArray()}).ToArray();
public static string Inspect()
{
const string path="Assets/Bundles/Characters/Human/test/girl/LmGirlTpose.fbx";
var importer=(ModelImporter)AssetImporter.GetAtPath(path);
var model=AssetDatabase.LoadAssetAtPath<GameObject>(path);
var prefab=AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/Characters/Human/test/girl/Girl.prefab");
var report=new{importer=new{importer.materialImportMode,importer.materialLocation,importer.materialSearch,
remaps=importer.GetExternalObjectMap().Select(p=>new{p.Key.name,path=PathOf(p.Value)}).ToArray()},
fbx=Renderers(model),prefab=prefab?Renderers(prefab):null,
embeddedMaterials=AssetDatabase.LoadAllAssetsAtPath(path).OfType<Material>().Select(MaterialInfo).ToArray(),
availableReviewMaterial=MaterialInfo(AssetDatabase.LoadAssetAtPath<Material>("Assets/Review/CharacterAnimationLab/LmGirl/Generated/LmGirlTextured.mat")),
scene=UnityEngine.Object.FindObjectsOfType<Animator>(true).Where(a=>a.name.IndexOf("LmGirl",StringComparison.OrdinalIgnoreCase)>=0).Select(a=>new{a.name,renderers=Renderers(a.gameObject)}).ToArray()};
var json=JsonConvert.SerializeObject(report,Formatting.Indented);
var directory=System.IO.Path.Combine(Directory.GetParent(Application.dataPath).Parent.FullName,"Tools/output/lmgirl_tpose_studio/material_audit");
Directory.CreateDirectory(directory);File.WriteAllText(System.IO.Path.Combine(directory,"unity_materials.json"),json);return json;
}
}
#endif
+132
View File
@@ -0,0 +1,132 @@
using System;
using System.IO;
using AIGame.EditorTools;
using AOT.Editor.YooAssetTools;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic;
public static class IntegrateHomeCamp
{
public static string Status() => "frame=" + Time.frameCount + " paused=" + EditorApplication.isPaused + " background=" + Application.runInBackground;
public static string ExplorerStatus()
{
var presenter = UnityEngine.Object.FindObjectOfType<HotUpdate.UI.HomeExplorerPresenter>();
var stage = GameObject.Find("HomeExplorerStage");
if (!stage) return "No explorer stage";
var animator = stage.GetComponentInChildren<Animator>(true);
return "ready=" + (presenter && presenter.Ready) + " animator=" + (animator != null) + " controller=" + (animator && animator.runtimeAnimatorController ? animator.runtimeAnimatorController.name : "null") + " avatar=" + (animator && animator.avatar ? animator.avatar.name : "null");
}
public static string EnablePreviewFrames() { Application.runInBackground = true; return Status(); }
public static async System.Threading.Tasks.Task<string> CheckArtManifest()
{
if (!EditorApplication.isPlaying) throw new InvalidOperationException("Play Mode required");
if (!YooAsset.YooAssets.IsInitialized) YooAsset.YooAssets.Initialize();
if (!YooAsset.YooAssets.TryGetPackage("Art", out var package)) package = YooAsset.YooAssets.CreatePackage("Art");
var build = YooAsset.EditorSimulateBuildInvoker.Build("Art", (int)YooAsset.EBundleType.VirtualAssetBundle);
var init = package.InitializePackageAsync(new YooAsset.EditorSimulateModeOptions {
EditorFileSystemParameters = YooAsset.FileSystemParameters.CreateDefaultEditorFileSystemParameters(build.PackageRootDirectory)
});
await init;
if (init.Status != YooAsset.EOperationStatus.Succeeded) throw new InvalidOperationException(init.Error);
var version = package.RequestPackageVersionAsync(); await version;
if (version.Status != YooAsset.EOperationStatus.Succeeded) throw new InvalidOperationException(version.Error);
var manifest = package.LoadPackageManifestAsync(new YooAsset.LoadPackageManifestOptions(version.PackageVersion, 60)); await manifest;
if (manifest.Status != YooAsset.EOperationStatus.Succeeded) throw new InvalidOperationException(manifest.Error);
if (!package.IsLocationValid("HomeCamp")) throw new InvalidOperationException("HomeCamp missing from Art manifest");
return "PASS simulated Art manifest resolves HomeCamp";
}
public static async System.Threading.Tasks.Task<string> CheckArtSceneLoad()
{
var manager = HotUpdate.UI.UiManager.Instance;
var oldHud = manager.Get("UI_MainHUD");
manager.Close("UI_MainHUD", true);
for (int i = 0; i < 100 && UnityEngine.SceneManagement.SceneManager.GetSceneByPath("Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity").isLoaded; i++)
await System.Threading.Tasks.Task.Delay(50);
GameObject hud = null;
manager.StartCoroutine(manager.OpenAsync("UI_MainHUD", loaded => hud = loaded));
for (int i = 0; i < 200 && !hud; i++) await System.Threading.Tasks.Task.Delay(50);
if (!hud) throw new InvalidOperationException("HUD reload failed");
var view = hud.GetComponent<HotUpdate.UI.MainHudView>() ?? hud.AddComponent<HotUpdate.UI.MainHudView>();
view.Bind();
for (int i = 0; i < 200 && (!hud || !hud.GetComponentInChildren<HotUpdate.UI.HomeCampPresenter>(true) || !hud.GetComponentInChildren<HotUpdate.UI.HomeCampPresenter>(true).Ready); i++)
await System.Threading.Tasks.Task.Delay(50);
var presenter = hud.GetComponentInChildren<HotUpdate.UI.HomeCampPresenter>(true);
var field = typeof(HotUpdate.UI.HomeCampPresenter).GetField("_handle", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (presenter == null || !presenter.Ready || !(field.GetValue(presenter) is YooAsset.SceneHandle handle) || handle.Status != YooAsset.EOperationStatus.Succeeded)
throw new InvalidOperationException("YooAsset scene handle did not load HomeCamp");
return "PASS YooAsset additive scene load and HUD render";
}
public static string CheckPreview()
{
var hud = HotUpdate.UI.UiManager.Instance?.Get("UI_MainHUD");
if (!hud) throw new InvalidOperationException("HUD not ready");
var camp = hud.GetComponentInChildren<HotUpdate.UI.HomeCampPresenter>(true);
if (!camp || !camp.Ready) throw new InvalidOperationException("Camp preview not ready");
var image = camp.GetComponent<RawImage>();
if (!image.enabled || image.raycastTarget || !(image.texture is RenderTexture rt))
throw new InvalidOperationException("Camp render target or hit testing invalid");
var camera = GameObject.Find("HomeCampCamera")?.GetComponent<Camera>();
if (!camera || camera.targetTexture != rt || !camera.enabled)
throw new InvalidOperationException("Camp camera is not rendering into HUD");
var explorer = hud.transform.Find("ExplorerStage");
if (!explorer || explorer.gameObject.activeSelf || hud.transform.Find("Btn_Explorer").gameObject.activeSelf)
throw new InvalidOperationException("Legacy explorer overlay should be hidden over the 3D camp");
hud.SetActive(false);
if (camera.enabled && camera.gameObject.activeInHierarchy) throw new InvalidOperationException("Hidden HUD still renders camp");
hud.SetActive(true);
if (!camera.enabled || !camera.gameObject.activeInHierarchy) throw new InvalidOperationException("Camp did not resume");
return "PASS camp render " + rt.width + "x" + rt.height + "; FOV=" + camera.fieldOfView + "; legacy overlay hidden; hide/resume passed";
}
public static string Capture()
{
var hud = HotUpdate.UI.UiManager.Instance.Get("UI_MainHUD");
var camera = GameObject.Find("HomeMobileTestCamera").GetComponent<Camera>();
var canvas = hud.GetComponent<Canvas>();
Canvas.ForceUpdateCanvases();
foreach (var button in hud.transform.Find("Layout_Top").GetComponentsInChildren<Button>())
{
var rect = (RectTransform)button.transform;
var hits = new List<RaycastResult>();
EventSystem.current.RaycastAll(new PointerEventData(EventSystem.current) { position = rect.TransformPoint(rect.rect.center) }, hits);
if (hits.Count == 0 || ExecuteEvents.GetEventHandler<IPointerClickHandler>(hits[0].gameObject) != button.gameObject)
throw new InvalidOperationException("Header hit blocked: " + button.name);
}
var target = new RenderTexture(Screen.width, Screen.height, 24);
var pixels = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
var mode = canvas.renderMode; var canvasCamera = canvas.worldCamera; var mask = camera.cullingMask;
var previous = RenderTexture.active;
try
{
camera.targetTexture = target; camera.cullingMask = 1 << LayerMask.NameToLayer("UI");
canvas.renderMode = RenderMode.ScreenSpaceCamera; canvas.worldCamera = camera; canvas.planeDistance = 1;
Canvas.ForceUpdateCanvases(); camera.Render(); RenderTexture.active = target;
pixels.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); pixels.Apply();
var dir = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/homecamp_integration"));
Directory.CreateDirectory(dir); var path = Path.Combine(dir, "home_" + Screen.width + "x" + Screen.height + ".png");
File.WriteAllBytes(path, pixels.EncodeToPNG()); return "PASS header hit targets; " + path;
}
finally
{
RenderTexture.active = previous; camera.targetTexture = null; camera.cullingMask = mask;
canvas.renderMode = mode; canvas.worldCamera = canvasCamera;
target.Release(); UnityEngine.Object.Destroy(target); UnityEngine.Object.Destroy(pixels);
}
}
public static string Build()
{
if (EditorApplication.isPlaying) throw new InvalidOperationException("Stop Play Mode before building the HUD.");
var json = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Doc/UIPrefabCreater/UI_MainHUD.json"));
var validation = JsonUIPrefabBuilder.Validate(json);
if (!validation.Ok) throw new InvalidOperationException(string.Join("\n", validation.Errors));
var path = JsonUIPrefabBuilder.BuildFromJsonFile(json);
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);
if (prefab == null || prefab.transform.Find("CampWorld")?.GetComponent<RawImage>() == null)
throw new InvalidOperationException("HUD CampWorld missing");
if (prefab.transform.Find("CampWorld").GetComponent<RawImage>().raycastTarget)
throw new InvalidOperationException("Camp image must not intercept buttons");
return "HUD: " + path + "; " + BuildAndStageArt.EnsureLoadableScenePrefabs();
}
}
+7
View File
@@ -0,0 +1,7 @@
using AOT.Editor.YooAssetTools;
public static class PublishCdn
{
public static string Build() => CdnPublisher.BuildPackages();
public static string Status() => CdnPublisher.Status;
}
+274
View File
@@ -0,0 +1,274 @@
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using AIGame.EditorTools;
using AOT.UI;
using HotUpdate.Gameplay;
using Newtonsoft.Json;
using TMPro;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.UI;
using Object = UnityEngine.Object;
// Run through Unity Pipeline. Uses isolated preview scenes and in-memory saves;
// never contacts the game server or modifies player progress.
public static class ReviewSecondaryUi
{
static string Repo => Path.GetFullPath(Path.Combine(Application.dataPath, "../.."));
static string Output => Path.Combine(Repo, "Tools/output/secondary_ui");
const BindingFlags Private = BindingFlags.Instance | BindingFlags.NonPublic;
static void Check(bool valid, string message) { if (!valid) throw new Exception(message); }
static void Set(object target, string field, object value) => target.GetType().GetField(field, Private).SetValue(target, value);
static void Refresh(PrototypeFlow flow, string page) => typeof(PrototypeFlow).GetMethod("Refresh" + page, Private).Invoke(flow, null);
public static string Build()
{
Check(!EditorApplication.isPlaying, "Exit Play Mode before authoring prefabs.");
CreateControls();
return BuildPages();
}
public static string BuildBackground()
{
Check(!EditorApplication.isPlaying, "Exit Play Mode before authoring prefabs.");
const string path = "Assets/Bundles/UI/Bg/journal_paper_v1.png";
const string folder = "Assets/Bundles/UI/Bg";
if (!AssetDatabase.IsValidFolder(folder)) AssetDatabase.CreateFolder("Assets/Bundles/UI", "Bg");
if (!File.Exists(path)) File.Copy(Path.Combine(Output, "journal_background_generated.png"), path);
AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceSynchronousImport);
var importer = (TextureImporter)AssetImporter.GetAtPath(path);
importer.textureType = TextureImporterType.Sprite;
importer.spriteImportMode = SpriteImportMode.Single;
importer.spriteBorder = Vector4.zero;
importer.mipmapEnabled = false; importer.wrapMode = TextureWrapMode.Clamp;
importer.filterMode = FilterMode.Bilinear; importer.maxTextureSize = 2048;
importer.npotScale = TextureImporterNPOTScale.None;
importer.textureCompression = TextureImporterCompression.CompressedHQ;
var settings = new TextureImporterSettings(); importer.ReadTextureSettings(settings);
settings.spriteMeshType = SpriteMeshType.FullRect; importer.SetTextureSettings(settings);
importer.SaveAndReimport();
return BuildPages();
}
static string BuildPages()
{
foreach (string key in new[] { "Tasks", "Signin", "Mail", "Challenges" })
{
string json = Path.Combine(Repo, "Doc/UIPrefabCreater/UI_Prototype" + key + ".json");
var validation = JsonUIPrefabBuilder.Validate(json);
Check(validation.Ok, string.Join("\n", validation.Errors));
Check(!string.IsNullOrEmpty(JsonUIPrefabBuilder.BuildFromJsonFile(json)), "Build failed: " + key);
}
return "Built Tasks, Signin, Mail and Challenges through the JSON authoring pipeline.";
}
static void CreateControls()
{
const string folder = "Assets/Bundles/UI/Texture/Journal";
if (!AssetDatabase.IsValidFolder(folder)) AssetDatabase.CreateFolder("Assets/Bundles/UI/Texture", "Journal");
Control("journal_card", "#FFFDF7", "#F8F1E4", "#DFDCCF");
Control("journal_hero", "#345D72", "#23465B", "#203D50");
Control("journal_gold_card", "#FFF2D4", "#F7DFAD", "#DCBF83");
Control("journal_primary_normal", "#FFD987", "#F1B94F", "#D5A044");
Control("journal_primary_pressed", "#EDB650", "#DCA43F", "#BB8530");
Control("journal_secondary_normal", "#EBF4F7", "#D5E5EC", "#B5CAD4");
Control("journal_secondary_pressed", "#C8DDE5", "#B5CCD7", "#99B5C3");
Control("journal_disabled", "#E4E8E7", "#D1D8D8", "#BBC7C9");
Control("journal_progress_bg", "#D8DFDF", "#D0D9D9", "#C7D2D3");
Control("journal_progress_fill", "#F6D48A", "#EDBA58", "#D9A747");
}
static Color Hex(string hex) { ColorUtility.TryParseHtmlString(hex, out var color); return color; }
static float RoundedDistance(float x, float y, float cx, float cy, float hx, float hy, float radius)
{
float dx = Mathf.Abs(x-cx)-(hx-radius), dy = Mathf.Abs(y-cy)-(hy-radius);
return new Vector2(Mathf.Max(dx,0),Mathf.Max(dy,0)).magnitude + Mathf.Min(Mathf.Max(dx,dy),0)-radius;
}
static void Control(string name, string topHex, string bottomHex, string edgeHex)
{
string path = "Assets/Bundles/UI/Texture/Journal/" + name + ".png";
var texture = new Texture2D(128,128,TextureFormat.RGBA32,false);
var top=Hex(topHex); var bottom=Hex(bottomHex); var edge=Hex(edgeHex);
for(int y=0;y<128;y++) for(int x=0;x<128;x++)
{
float distance=RoundedDistance(x+.5f,y+.5f,64,66,60,58,22);
float alpha=Mathf.Clamp01(.5f-distance);
float shadow=Mathf.Clamp01(.5f-RoundedDistance(x+.5f,y+.5f,64,62,60,58,22))*.13f;
Color color=Color.Lerp(bottom,top,Mathf.Clamp01((y-8)/116f));
color=Color.Lerp(edge,color,Mathf.Clamp01(-distance-1));
// A restrained inner highlight gives the candy controls volume.
if(distance < -2 && y > 114) color=Color.Lerp(color,Color.white,.12f);
color.a=alpha;
if(alpha<1) { var shade=new Color(.12f,.21f,.26f,shadow); color=Color.Lerp(shade,color,alpha); color.a=Mathf.Max(alpha,shadow); }
texture.SetPixel(x,y,color);
}
texture.Apply(); File.WriteAllBytes(path,texture.EncodeToPNG()); Object.DestroyImmediate(texture);
AssetDatabase.ImportAsset(path,ImportAssetOptions.ForceSynchronousImport);
var importer=(TextureImporter)AssetImporter.GetAtPath(path);
importer.textureType=TextureImporterType.Sprite; importer.spriteImportMode=SpriteImportMode.Single;
importer.spriteBorder=new Vector4(30,32,30,28); importer.spritePixelsPerUnit=100;
importer.alphaIsTransparency=true; importer.mipmapEnabled=false;
importer.textureCompression=TextureImporterCompression.Uncompressed;
var settings=new TextureImporterSettings(); importer.ReadTextureSettings(settings);
settings.spriteMeshType=SpriteMeshType.FullRect; importer.SetTextureSettings(settings); importer.SaveAndReimport();
}
public static string Review()
{
Directory.CreateDirectory(Output);
foreach (string key in new[] { "Tasks", "Signin", "Mail", "Challenges" }) Render(key, 1080, 1920, false);
Render("Tasks", 1080, 2400, true);
Render("Tasks", 1080, 1680, false);
Render("Challenges", 1080, 2400, true);
Render("Challenges", 1080, 1680, false);
File.WriteAllText(Path.Combine(Output, "verification_journal_bg.txt"),
"PASS: JSON prefabs; real RefreshTasks/Signin/Mail/Challenges with isolated save data; task states incomplete/ready/claimed, request blocking and daily reset; signin locked/available/claimed; mail empty/selected; challenges unlocked/detail/start/squad; full-screen safe-area insets; short-screen scroll reachability; journal background serialized sprite and proportional full-screen cover.\nRendered 4 pages and additional aspect/safe-area scenarios.\n");
return "PASS. Screenshots and verification: " + Output;
}
static void Render(string key, int width, int height, bool notch)
{
var scene = EditorSceneManager.NewPreviewScene();
var previous = RenderTexture.active;
RenderTexture target = null; Texture2D pixels = null;
try
{
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Bundles/UI/Prefab/UI_Prototype" + key + ".prefab");
var root = (GameObject)PrefabUtility.InstantiatePrefab(prefab, scene);
root.name = prefab.name;
var canvas = root.GetComponent<Canvas>();
root.GetComponent<CanvasScaler>().enabled = false;
var cameraGo = new GameObject("ReviewCamera", typeof(Camera));
UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(cameraGo, scene);
var camera = cameraGo.GetComponent<Camera>(); camera.scene = scene;
camera.clearFlags = CameraClearFlags.SolidColor; camera.backgroundColor = Color.white;
camera.orthographic = true; camera.orthographicSize = height / 2f;
camera.transform.position = new Vector3(0, 0, -10);
target = new RenderTexture(width, height, 24); target.Create(); camera.targetTexture = target;
canvas.renderMode = RenderMode.ScreenSpaceCamera; canvas.worldCamera = camera;
canvas.planeDistance = 1; canvas.scaleFactor = 1;
Canvas.ForceUpdateCanvases();
var background = root.transform.Find("Background");
var cover = background.GetComponent<BootArtworkCover>();
Check(cover != null && background.GetComponent<Image>().sprite != null, "Missing journal background asset or cover component.");
cover.SendMessage("OnEnable"); Canvas.ForceUpdateCanvases();
var backgroundRect = (RectTransform)background;
var parentRect = (RectTransform)root.transform;
float aspect = background.GetComponent<Image>().sprite.rect.width / background.GetComponent<Image>().sprite.rect.height;
Check(backgroundRect.rect.width >= parentRect.rect.width - 1 && backgroundRect.rect.height >= parentRect.rect.height - 1,
"Journal background does not cover the page.");
Check(Mathf.Abs(backgroundRect.rect.width / backgroundRect.rect.height - aspect) < .001f, "Journal background is stretched.");
var config = JsonConvert.DeserializeObject<PrototypeConfig>(File.ReadAllText(Path.Combine(Repo, "Config/Gameplay/greenfield.json")));
var save = new PrototypeSave {
schema = 10,
clearedStages = new int[20] { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
stages = new int[10] { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
shards = new int[10],
formation = new int[6] { 0, 1, 2, -1, -1, -1 },
decorations = new int[3],
campLayout = new int[3] { -1, -1, -1 },
dailyProgress = new[] { 1, 1, 1 },
dailyClaimed = new[] { 0, 0, 1 },
signinDays = 3,
signinClaimed = new[] { 1, 1, 0, 0, 0, 0, 0 },
shopBought = new int[3],
chests = new int[3],
challengeBadges = new[] { 1, 0, 0, 0, 0 },
challengeBestMs = new[] { 4200, 0, 0, 0, 0 },
cleared = true, goalClaimed = true,
mails = new[] {
new PrototypeMail { mailId="review_welcome", title="欢迎来到小镇", body="亲爱的探险家:\n欢迎回到营地!送上一份冒险补给,愿你和伙伴度过愉快的一天。", sentAt=100000, expiresAt=200000, reward=new StageReward { balls=10 } },
new PrototypeMail { mailId="review_gift", title="伙伴们的见面礼", body="带上伙伴,一起出发吧。", read=true, sentAt=100000, expiresAt=200000, reward=new StageReward { coins=100 } },
new PrototypeMail { mailId="review_notice", title="营地生活小贴士", body="每日委托会在零点更新。", read=true, sentAt=100000, expiresAt=200000, reward=new StageReward() }
}
};
var flowGo = new GameObject("ReviewFlow");
UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(flowGo, scene);
var flow = flowGo.AddComponent<PrototypeFlow>(); flow.enabled = false;
var panelType = typeof(PrototypeFlow).GetNestedType("Panel", BindingFlags.NonPublic);
Set(flow, "_page", Activator.CreateInstance(panelType, new object[] { root }));
Set(flow, "_game", new PrototypeGame(save)); Set(flow, "_config", config);
var reply = new PrototypeReply { daily = new DailyStatus { resetAt = 125200 } };
Set(flow, "_reply", reply); Set(flow, "_serverUnix", 100000L);
Set(flow, "_receivedAt", Time.realtimeSinceStartupAsDouble);
Set(flow, "_mailSelected", "review_welcome");
Refresh(flow, key);
var all = root.GetComponentsInChildren<Transform>(true).Where(t => t.GetComponent<TMP_SubMeshUI>() == null).ToDictionary(t => t.name);
Func<string, Button> button = name => all["Btn_" + name].GetComponent<Button>();
if (key == "Tasks")
{
Check(button("GoDaily0").gameObject.activeSelf && !button("ClaimDaily0").gameObject.activeSelf, "Incomplete task must have only Go.");
Check(button("ClaimDaily1").gameObject.activeSelf && !button("GoDaily1").gameObject.activeSelf, "Ready task must have only Claim.");
Check(all["Txt_DailyDone2"].gameObject.activeSelf && !button("GoDaily2").gameObject.activeSelf && !button("ClaimDaily2").gameObject.activeSelf, "Claimed task must be a status label.");
Check(all["Txt_GoalDone"].gameObject.activeSelf && !button("ClaimGoal").gameObject.activeSelf, "Claimed growth task must be a status label.");
Set(flow, "_busy", true); Refresh(flow, key);
Check(!button("GoDaily0").interactable && !button("ClaimDaily1").interactable, "Busy state must block actions.");
Set(flow, "_busy", false); reply.daily.resetAt = 99999; Refresh(flow, key);
Check(!button("GoDaily0").interactable && !button("ClaimDaily1").interactable, "Reset must block stale daily actions.");
reply.daily.resetAt = 125200; Refresh(flow, key);
}
else if (key == "Signin")
{
Check(!button("Signin0").gameObject.activeSelf && button("Signin2").gameObject.activeSelf && !button("Signin3").gameObject.activeSelf,
"Signin claimed/available/locked state mismatch.");
}
else if (key == "Mail")
{
Check(button("ClaimMail").interactable && all["MailUnread0"].gameObject.activeSelf, "Selected unread reward mail state mismatch.");
var mails = save.mails; save.mails = new PrototypeMail[0]; Refresh(flow, key);
Check(all["Txt_MailEmpty"].gameObject.activeSelf && !button("ClaimAllMail").interactable, "Empty mailbox state mismatch.");
save.mails = mails; Refresh(flow, key);
}
else if (key == "Challenges")
{
Check(all["Txt_Summary"].gameObject.activeSelf, "Summary text missing.");
Check(all["Txt_Detail"].gameObject.activeSelf, "Detail text missing.");
Check(button("Start").gameObject.activeSelf, "Start button missing.");
Check(button("Challenge0").gameObject.activeSelf, "Challenge0 button missing.");
Check(button("Capture").gameObject.activeSelf, "Capture button missing.");
Check(button("Fish").gameObject.activeSelf, "Fish button missing.");
}
var safe = root.GetComponentInChildren<UiSafeArea>();
UiSafeArea.SetPreviewInsets(notch ? new Vector4(0, .04f, 0, .11f) : Vector4.zero);
safe.SendMessage("OnEnable"); safe.SendMessage("LateUpdate");
Canvas.ForceUpdateCanvases();
if (key == "Mail")
{
Check(((RectTransform)all["Btn_Mail0"]).rect.width >= 990, "Mail list cards must fill the stack width.");
Check(((RectTransform)all["MailDetail"]).rect.width >= 990, "Letter panel must fill the stack width.");
}
if (notch)
{
var safeRect = (RectTransform)safe.transform;
Check(Math.Abs(safeRect.offsetMax.y + height * .11f) < 2, "Safe-area top inset missing.");
Check(Math.Abs(safeRect.offsetMin.y - height * .04f) < 2, "Safe-area bottom inset missing.");
}
var scroll = all["Scroll_Page"].GetComponent<ScrollRect>();
if (height == 1680)
{
Check(scroll.content.rect.height > scroll.viewport.rect.height, "Short phone needs scrollable content.");
scroll.verticalNormalizedPosition = 0; Canvas.ForceUpdateCanvases();
Check(Mathf.Abs(scroll.verticalNormalizedPosition) < .01f, "Footer cannot be reached by scrolling.");
scroll.verticalNormalizedPosition = 1;
}
foreach (var text in root.GetComponentsInChildren<TextMeshProUGUI>(true)) text.ForceMeshUpdate(true);
Canvas.ForceUpdateCanvases(); camera.Render();
RenderTexture.active = target;
pixels = new Texture2D(width, height, TextureFormat.RGB24, false);
pixels.ReadPixels(new Rect(0, 0, width, height), 0, 0); pixels.Apply();
File.WriteAllBytes(Path.Combine(Output, key.ToLowerInvariant() + "_" + width + "x" + height + (notch ? "_safe" : "") + "_journal_v1.png"), pixels.EncodeToPNG());
}
finally
{
UiSafeArea.SetPreviewInsets(null); RenderTexture.active = previous;
EditorSceneManager.ClosePreviewScene(scene);
if (target != null) { target.Release(); Object.DestroyImmediate(target); }
if (pixels != null) Object.DestroyImmediate(pixels);
}
}
}
+3 -6
View File
@@ -14,9 +14,9 @@ public static class SetupCharacter
const string ArtPackage = "Art";
const float TargetHeight = 1.8f;
public static string SetupCaoCao()
public static string SetupExplorer()
{
return Run("Human", "CaoCao");
return Run("Human", "Explorer", 1.6f);
}
public static string SetupCampGuide()
@@ -24,10 +24,7 @@ public static class SetupCharacter
return Run("Human", "CampGuide", 1.55f);
}
public static string SetupLmGirl()
{
return Run("Human", "LmGirl", 1.65f);
}
public static string SetupLmCat()
{
+236
View File
@@ -0,0 +1,236 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
public static class SetupExplorer
{
const string Root = "Assets/Bundles/Characters/Human/Explorer";
const string FbxPath = Root + "/Explorer.fbx";
const string IdleFbxPath = Root + "/Explorer@Idle.fbx";
const string WalkFbxPath = Root + "/Explorer@Walk.fbx";
const string BaseTexPath = Root + "/Explorer_base.png";
const string MixTexPath = Root + "/Explorer_mix.png";
const string MatPath = Root + "/Explorer.mat";
const string ControllerPath = Root + "/Explorer.controller";
const string PrefabPath = Root + "/Explorer.prefab";
const float TargetHeight = 1.6f;
public static string Run()
{
AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
SetupTexture(BaseTexPath, true);
SetupTexture(MixTexPath, false);
var modelImporter = (ModelImporter)AssetImporter.GetAtPath(FbxPath);
if (modelImporter == null) return "FAIL: ModelImporter not found for " + FbxPath;
modelImporter.globalScale = 1.0f;
modelImporter.useFileScale = false;
modelImporter.bakeAxisConversion = true;
modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
modelImporter.animationType = ModelImporterAnimationType.Human;
modelImporter.avatarSetup = ModelImporterAvatarSetup.CreateFromThisModel;
modelImporter.SaveAndReimport();
var avatar = AssetDatabase.LoadAssetAtPath<Avatar>(FbxPath);
Debug.Log($"[Explorer] Avatar generated: {avatar != null && avatar.isValid}");
SetupAnimationFbx(IdleFbxPath, avatar, "Idle");
SetupAnimationFbx(WalkFbxPath, avatar, "Walk");
var mat = AssetDatabase.LoadAssetAtPath<Material>(MatPath);
var shader = Shader.Find("Test/XPbr") ?? Shader.Find("Universal Render Pipeline/Lit");
if (mat == null)
{
mat = new Material(shader) { name = "Explorer" };
AssetDatabase.CreateAsset(mat, MatPath);
}
else
{
mat.shader = shader;
}
var baseTex = AssetDatabase.LoadAssetAtPath<Texture2D>(BaseTexPath);
var mixTex = AssetDatabase.LoadAssetAtPath<Texture2D>(MixTexPath);
if (baseTex != null)
{
mat.SetTexture("_MainTex", baseTex);
mat.SetTexture("_BaseMap", baseTex);
}
if (mixTex != null)
{
mat.SetTexture("_MixTex", mixTex);
}
mat.SetColor("_BaseColor", Color.white);
mat.SetColor("_Color", Color.white);
EditorUtility.SetDirty(mat);
AssetDatabase.SaveAssetIfDirty(mat);
var controller = AssetDatabase.LoadAssetAtPath<AnimatorController>(ControllerPath);
if (controller == null)
{
controller = AnimatorController.CreateAnimatorControllerAtPath(ControllerPath);
}
if (controller.parameters.All(p => p.name != "isMoving"))
controller.AddParameter("isMoving", AnimatorControllerParameterType.Bool);
if (controller.parameters.All(p => p.name != "speed"))
controller.AddParameter("speed", AnimatorControllerParameterType.Float);
if (controller.parameters.All(p => p.name != "Motion"))
controller.AddParameter("Motion", AnimatorControllerParameterType.Int);
var idleClip = LoadClip(IdleFbxPath);
var walkClip = LoadClip(WalkFbxPath);
var rootStateMachine = controller.layers[0].stateMachine;
foreach (var s in rootStateMachine.states.ToArray()) rootStateMachine.RemoveState(s.state);
var idleState = rootStateMachine.AddState("Idle");
idleState.motion = idleClip;
rootStateMachine.defaultState = idleState;
var walkState = rootStateMachine.AddState("Walk");
walkState.motion = walkClip;
// Transition: Idle -> Walk
var toWalk = idleState.AddTransition(walkState);
toWalk.hasExitTime = false;
toWalk.duration = 0.15f;
toWalk.AddCondition(AnimatorConditionMode.If, 0, "isMoving");
// Transition: Walk -> Idle
var toIdle = walkState.AddTransition(idleState);
toIdle.hasExitTime = false;
toIdle.duration = 0.15f;
toIdle.AddCondition(AnimatorConditionMode.IfNot, 0, "isMoving");
// Also add Motion transitions for ExplorerLocomotion compatibility
var toWalkMotion = idleState.AddTransition(walkState);
toWalkMotion.hasExitTime = false;
toWalkMotion.duration = 0.15f;
toWalkMotion.AddCondition(AnimatorConditionMode.Equals, 1, "Motion");
var toIdleMotion = walkState.AddTransition(idleState);
toIdleMotion.hasExitTime = false;
toIdleMotion.duration = 0.15f;
toIdleMotion.AddCondition(AnimatorConditionMode.Equals, 0, "Motion");
EditorUtility.SetDirty(controller);
AssetDatabase.SaveAssetIfDirty(controller);
var fbxPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(FbxPath);
var instance = (GameObject)PrefabUtility.InstantiatePrefab(fbxPrefab);
instance.name = "Explorer";
foreach (var r in instance.GetComponentsInChildren<SkinnedMeshRenderer>(true))
{
r.sharedMaterial = mat;
}
var animator = instance.GetComponent<Animator>();
if (animator == null) animator = instance.AddComponent<Animator>();
animator.runtimeAnimatorController = controller;
if (avatar != null) animator.avatar = avatar;
animator.applyRootMotion = false;
// Add Locomotion Controller
var ctrlType = AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetType("HotUpdate.Gameplay.CampExplorerController"))
.FirstOrDefault(t => t != null);
if (ctrlType != null)
{
if (instance.GetComponent(ctrlType) == null) instance.AddComponent(ctrlType);
}
// Add CapsuleCollider
var col = instance.GetComponent<CapsuleCollider>();
if (col == null) col = instance.AddComponent<CapsuleCollider>();
col.center = new Vector3(0, 0.8f, 0);
col.radius = 0.35f;
col.height = 1.6f;
// Set layer 29
foreach (var t in instance.GetComponentsInChildren<Transform>(true))
{
t.gameObject.layer = 29;
}
var renderers = instance.GetComponentsInChildren<Renderer>(true);
if (renderers.Length > 0)
{
var b = renderers[0].bounds;
foreach (var r in renderers.Skip(1)) b.Encapsulate(r.bounds);
float currentH = b.size.y;
if (currentH > 0.01f)
{
float scale = TargetHeight / currentH;
instance.transform.localScale = Vector3.one * scale;
}
}
PrefabUtility.SaveAsPrefabAsset(instance, PrefabPath);
UnityEngine.Object.DestroyImmediate(instance);
AssetDatabase.SaveAssets();
return $"SUCCESS: Authored {PrefabPath} with Avatar={avatar != null}, Idle={idleClip != null}, Walk={walkClip != null}";
}
static void SetupTexture(string path, bool isSrgb)
{
var importer = (TextureImporter)AssetImporter.GetAtPath(path);
if (importer == null) return;
importer.textureType = TextureImporterType.Default;
importer.sRGBTexture = isSrgb;
importer.alphaIsTransparency = false;
importer.mipmapEnabled = true;
importer.maxTextureSize = 1024;
importer.textureCompression = TextureImporterCompression.Compressed;
importer.SaveAndReimport();
}
static void SetupAnimationFbx(string path, Avatar sourceAvatar, string clipName)
{
var importer = (ModelImporter)AssetImporter.GetAtPath(path);
if (importer == null) return;
importer.globalScale = 1.0f;
importer.importAnimation = true;
importer.animationType = ModelImporterAnimationType.Human;
if (sourceAvatar != null && sourceAvatar.isValid)
{
importer.avatarSetup = ModelImporterAvatarSetup.CopyFromOther;
importer.sourceAvatar = sourceAvatar;
}
else
{
importer.avatarSetup = ModelImporterAvatarSetup.CreateFromThisModel;
}
var clip = new ModelImporterClipAnimation
{
name = clipName,
takeName = "Armature|Scene",
loopTime = true,
loopPose = true,
lockRootRotation = true,
lockRootHeightY = true,
lockRootPositionXZ = true
};
importer.clipAnimations = new[] { clip };
importer.SaveAndReimport();
}
static AnimationClip LoadClip(string path)
{
var assets = AssetDatabase.LoadAllAssetsAtPath(path);
foreach (var a in assets)
{
if (a is AnimationClip c && !c.name.StartsWith("__preview__"))
return c;
}
return null;
}
}
#endif
@@ -0,0 +1,66 @@
#if UNITY_EDITOR
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.Rendering.Universal;
public static class TestRealtimeShadowCapture
{
const string ScenePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity";
public static string Run()
{
var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
try
{
var root = scene.GetRootGameObjects()[0];
var sun = root.transform.Find("HomeCampSun")?.GetComponent<Light>();
if (sun != null)
{
sun.lightmapBakeType = LightmapBakeType.Realtime;
sun.shadows = LightShadows.Soft;
sun.shadowStrength = 0.85f;
sun.shadowBias = 0.05f;
sun.shadowNormalBias = 0.3f;
sun.intensity = 1.8f;
}
var cam = root.transform.Find("HomeCampCamera")?.GetComponent<Camera>();
if (cam == null) return "Camera missing";
var uacd = cam.GetComponent<UniversalAdditionalCameraData>();
if (uacd == null) uacd = cam.gameObject.AddComponent<UniversalAdditionalCameraData>();
uacd.renderShadows = true;
int w = 720, h = 1280;
var rt = new RenderTexture(w, h, 24, RenderTextureFormat.ARGB32) { name = "ShadowTestRT" };
rt.Create();
cam.targetTexture = rt;
cam.Render();
var old = RenderTexture.active;
RenderTexture.active = rt;
var tex = new Texture2D(w, h, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, w, h), 0, 0);
tex.Apply();
RenderTexture.active = old;
cam.targetTexture = null;
rt.Release();
Object.DestroyImmediate(rt);
string outPath = Path.Combine(Application.dataPath, "../../Tools/output/shadow_test.png");
File.WriteAllBytes(outPath, tex.EncodeToPNG());
Object.DestroyImmediate(tex);
return "Rendered to " + outPath;
}
finally
{
EditorSceneManager.CloseScene(scene, true);
}
}
}
#endif
@@ -0,0 +1,53 @@
using System;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public static class TuneHomeCampExposure
{
const string ProfilePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCampVolume.asset";
public static string Apply()
{
if (EditorApplication.isPlaying) throw new InvalidOperationException("Apply in Edit Mode.");
var profile = AssetDatabase.LoadAssetAtPath<VolumeProfile>(ProfilePath);
if (!profile || !profile.TryGet<ColorAdjustments>(out var color)) throw new InvalidOperationException("Missing camp ColorAdjustments");
float before = color.postExposure.value;
Undo.RecordObject(color, "Lower HomeCamp exposure");
color.postExposure.Override(.30f);
EditorUtility.SetDirty(color);
AssetDatabase.SaveAssetIfDirty(color);
return "Saved HomeCamp postExposure " + before + " -> " + color.postExposure.value + " EV";
}
public static string Capture()
{
var hud = HotUpdate.UI.UiManager.Instance?.Get("UI_MainHUD");
if (!hud) throw new InvalidOperationException("Start the isolated home preview first.");
var camera = GameObject.Find("HomeMobileTestCamera").GetComponent<Camera>();
var canvas = hud.GetComponent<Canvas>();
var target = new RenderTexture(Screen.width, Screen.height, 24);
var pixels = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
var mode = canvas.renderMode; var worldCamera = canvas.worldCamera; var mask = camera.cullingMask;
var previous = RenderTexture.active;
try
{
camera.targetTexture = target; camera.cullingMask = 1 << LayerMask.NameToLayer("UI");
canvas.renderMode = RenderMode.ScreenSpaceCamera; canvas.worldCamera = camera; canvas.planeDistance = 1;
Canvas.ForceUpdateCanvases(); camera.Render(); RenderTexture.active = target;
pixels.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); pixels.Apply();
var dir = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/homecamp_exposure_20261104"));
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "home_exposure_030.png");
File.WriteAllBytes(path, pixels.EncodeToPNG());
return path;
}
finally
{
RenderTexture.active = previous; camera.targetTexture = null; camera.cullingMask = mask;
canvas.renderMode = mode; canvas.worldCamera = worldCamera;
target.Release(); UnityEngine.Object.Destroy(target); UnityEngine.Object.Destroy(pixels);
}
}
}
@@ -0,0 +1,254 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
public static class VerifyCampInteractionsAndPets
{
const string ScenePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity";
public static string Run()
{
var sb = new StringBuilder();
sb.AppendLine("=== Automated Verification: Camp Interactions, Building Nav & Pet Wandering ===");
bool allPassed = true;
var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
try
{
var root = scene.GetRootGameObjects().FirstOrDefault(g => g.name == "HomeCamp");
if (root == null)
{
sb.AppendLine("[FAIL] HomeCamp root not found in " + ScenePath);
return sb.ToString();
}
// Phase 1: Entities Existence, Scale & Component Checks
sb.AppendLine("\n[Phase 1: Scene Entities, 4x Scale & Component Checks]");
var explorerTf = root.transform.Find("Explorer");
if (explorerTf == null)
{
sb.AppendLine("[FAIL] Explorer missing in scene");
allPassed = false;
}
else
{
var ctrl = explorerTf.GetComponent<HotUpdate.Gameplay.CampExplorerController>();
bool scale4x = Mathf.Approximately(explorerTf.localScale.x, 4.0f);
if (scale4x)
{
sb.AppendLine($"[PASS] Explorer scaled 4x ({explorerTf.localScale}), pos={explorerTf.position}, Controller={ctrl != null}, Layer={explorerTf.gameObject.layer}");
}
else
{
sb.AppendLine($"[FAIL] Explorer scale is {explorerTf.localScale}, expected (4, 4, 4)");
allPassed = false;
}
}
var petNames = new[] { "Pet_FireCat", "Pet_RockBall", "Pet_BudBud" };
foreach (var petName in petNames)
{
var petTf = root.transform.Find(petName);
if (petTf == null)
{
sb.AppendLine($"[FAIL] Companion {petName} missing in scene");
allPassed = false;
continue;
}
var wanderer = petTf.GetComponent<HotUpdate.Gameplay.CampPetWanderer>();
var anim = petTf.GetComponentInChildren<Animator>();
bool hasWanderer = wanderer != null;
bool hasAnim = anim != null && anim.runtimeAnimatorController != null;
bool correctLayer = petTf.gameObject.layer == 29;
bool isEnlarged = petTf.localScale.x >= 2.8f;
if (hasWanderer && hasAnim && correctLayer && isEnlarged)
{
sb.AppendLine($"[PASS] {petName} scaled 4x ({petTf.localScale}), Controller={anim.runtimeAnimatorController.name}, Layer={petTf.gameObject.layer}, WanderRadius={wanderer.wanderRadius}m");
}
else
{
sb.AppendLine($"[FAIL] {petName} check failed: hasWanderer={hasWanderer}, hasAnim={hasAnim}, correctLayer={correctLayer}, isEnlarged={isEnlarged}");
allPassed = false;
}
}
// Phase 2: Companion Forward-Walking Facing Verification
sb.AppendLine("\n[Phase 2: Companion Forward-Walking Facing Verification]");
var fireCatTf = root.transform.Find("Pet_FireCat");
if (fireCatTf != null)
{
var wanderer = fireCatTf.GetComponent<HotUpdate.Gameplay.CampPetWanderer>();
var anim = fireCatTf.GetComponentInChildren<Animator>();
var motionHash = Animator.StringToHash("Motion");
// Initial state
if (!wanderer.IsMoving)
{
sb.AppendLine("[PASS] Pet_FireCat initially idle (IsMoving=False)");
}
else
{
sb.AppendLine("[FAIL] Pet_FireCat initially moving");
allPassed = false;
}
// Trigger Wander MoveTo
Vector3 moveDelta = new Vector3(1.2f, 0, 0.8f);
Vector3 petTarget = fireCatTf.position + moveDelta;
wanderer.MoveTo(petTarget);
// Rotate towards movement target using wanderer facing convention
Vector3 lookDir = wanderer.modelFacesMinusZ ? -moveDelta.normalized : moveDelta.normalized;
fireCatTf.rotation = Quaternion.LookRotation(lookDir, Vector3.up);
// Companion front face is local -Z (Vector3.back in model space)
Vector3 visualFront = fireCatTf.TransformDirection(Vector3.back);
float facingError = Vector3.Angle(visualFront, moveDelta.normalized);
if (wanderer.IsMoving && anim.GetInteger(motionHash) == 1 && facingError < 1.0f)
{
sb.AppendLine($"[PASS] Pet Walk Facing verified: Model front face (-Z) aligns with move direction (+{moveDelta.normalized}), facingError={facingError:F2}° (NOT walking backwards)");
}
else
{
sb.AppendLine($"[FAIL] Pet Walk Facing incorrect: facingError={facingError:F2}°, IsMoving={wanderer.IsMoving}");
allPassed = false;
}
// Stop Pet
wanderer.Stop();
if (!wanderer.IsMoving && anim.GetInteger(motionHash) == 0)
{
sb.AppendLine($"[PASS] Pet Stop triggered: IsMoving=False, Motion parameter = 0 (Idle)");
}
else
{
sb.AppendLine($"[FAIL] Pet Stop did not return to Motion=0: IsMoving={wanderer.IsMoving}, Motion={anim.GetInteger(motionHash)}");
allPassed = false;
}
// Social greeting simulation
if (explorerTf != null)
{
explorerTf.position = fireCatTf.position + new Vector3(1.0f, 0, 0.8f);
Vector3 toExplorer = explorerTf.position - fireCatTf.position;
toExplorer.y = 0;
if (toExplorer.magnitude < wanderer.greetingDistance)
{
Vector3 greetDir = wanderer.modelFacesMinusZ ? -toExplorer.normalized : toExplorer.normalized;
fireCatTf.rotation = Quaternion.LookRotation(greetDir, Vector3.up);
Vector3 greetFront = fireCatTf.TransformDirection(Vector3.back);
float greetError = Vector3.Angle(greetFront, toExplorer.normalized);
if (greetError < 1.0f)
{
sb.AppendLine($"[PASS] Social Greeting: Pet front face directly faces Explorer (dist={toExplorer.magnitude:F2}m, greetError={greetError:F2}°)");
}
else
{
sb.AppendLine($"[FAIL] Social Greeting face error: {greetError:F2}°");
allPassed = false;
}
}
}
}
// Phase 3: Building Interaction & Arrival Callback Simulation
sb.AppendLine("\n[Phase 3: Building Navigation & Arrival Callback Simulation]");
if (explorerTf != null)
{
var explorerCtrl = explorerTf.GetComponent<HotUpdate.Gameplay.CampExplorerController>();
bool arrivalCallbackFired = false;
Vector3 mainHouseEntrance = new Vector3(0f, 0f, 3.5f);
Vector3 mainHouseFacing = Vector3.forward;
explorerTf.position = new Vector3(0f, 0f, -3.5f);
explorerCtrl.MoveTo(mainHouseEntrance, () => { arrivalCallbackFired = true; }, mainHouseFacing);
if (explorerCtrl.IsMoving)
{
sb.AppendLine($"[PASS] MoveTo building entrance initiated: IsMoving=True, Target={explorerCtrl.TargetPosition}");
}
else
{
sb.AppendLine("[FAIL] MoveTo building entrance failed to start");
allPassed = false;
}
// Simulate movement until arrival
int steps = 0;
while (explorerCtrl.IsMoving && steps < 150)
{
Vector3 toTgt = explorerCtrl.TargetPosition - explorerTf.position;
toTgt.y = 0;
float dist = toTgt.magnitude;
if (dist <= explorerCtrl.stopDistance)
{
explorerCtrl.Stop();
break;
}
explorerTf.position += toTgt.normalized * Mathf.Min(explorerCtrl.moveSpeed * 0.05f, dist);
steps++;
}
float finalDist = Vector2.Distance(new Vector2(explorerTf.position.x, explorerTf.position.z), new Vector2(mainHouseEntrance.x, mainHouseEntrance.z));
float facingAngleDiff = Vector3.Angle(explorerTf.forward, mainHouseFacing);
if (!explorerCtrl.IsMoving && finalDist <= explorerCtrl.stopDistance + 0.05f && arrivalCallbackFired && facingAngleDiff < 5.0f)
{
sb.AppendLine($"[PASS] Explorer reached MainHouse entrance in {steps} steps! ArrivalCallbackFired=True, FacingAngleDiff={facingAngleDiff:F1}°, FinalPos={explorerTf.position}");
}
else
{
sb.AppendLine($"[FAIL] Building navigation arrival failed: finalDist={finalDist:F3}, callback={arrivalCallbackFired}, facingDiff={facingAngleDiff:F1}°");
allPassed = false;
}
}
// Phase 4: Click Indicator Validation
sb.AppendLine("\n[Phase 4: Click Indicator Validation]");
if (explorerTf != null)
{
var explorerCtrl = explorerTf.GetComponent<HotUpdate.Gameplay.CampExplorerController>();
explorerCtrl.MoveTo(new Vector3(1.5f, 0, -2.0f));
var indicator = root.transform.Find("ClickIndicator");
if (indicator != null && indicator.gameObject.activeSelf)
{
sb.AppendLine($"[PASS] ClickIndicator instantiated and active at: {indicator.position}");
}
else
{
sb.AppendLine("[FAIL] ClickIndicator not active during movement");
allPassed = false;
}
explorerCtrl.Stop();
if (indicator != null && !indicator.gameObject.activeSelf)
{
sb.AppendLine("[PASS] ClickIndicator deactivated upon arrival/stop");
}
else
{
sb.AppendLine("[FAIL] ClickIndicator failed to deactivate upon stop");
allPassed = false;
}
}
}
finally
{
EditorSceneManager.CloseScene(scene, true);
}
sb.AppendLine($"\nOverall Result: {(allPassed ? "ALL TESTS PASSED" : "TESTS FAILED")}");
return sb.ToString();
}
}
#endif
@@ -0,0 +1,223 @@
#if UNITY_EDITOR
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using UnityEditor;
using UnityEditor.Animations;
using UnityEditor.SceneManagement;
using UnityEngine;
public static class VerifyExplorerAndCampLocomotion
{
const string PrefabPath = "Assets/Bundles/Characters/Human/Explorer/Explorer.prefab";
const string ControllerPath = "Assets/Bundles/Characters/Human/Explorer/Explorer.controller";
const string ScenePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity";
public static string Run()
{
var sb = new StringBuilder();
sb.AppendLine("=== Automated Verification: Explorer Protagonist & Camp Locomotion ===");
bool allPassed = true;
// Phase 1: Explorer Asset & Rigging Validation
sb.AppendLine("\n[Phase 1: Explorer Asset & Controller Validation]");
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(PrefabPath);
if (prefab == null)
{
sb.AppendLine("[FAIL] Explorer.prefab not found at " + PrefabPath);
return sb.ToString();
}
var animator = prefab.GetComponent<Animator>();
if (animator == null || animator.avatar == null || !animator.avatar.isValid)
{
sb.AppendLine("[FAIL] Animator or valid Humanoid Avatar missing on Explorer.prefab");
allPassed = false;
}
else
{
sb.AppendLine($"[PASS] Explorer.prefab has valid Humanoid Avatar: {animator.avatar.name}");
}
var controller = AssetDatabase.LoadAssetAtPath<AnimatorController>(ControllerPath);
if (controller == null)
{
sb.AppendLine("[FAIL] Explorer.controller not found at " + ControllerPath);
allPassed = false;
}
else
{
var sm = controller.layers[0].stateMachine;
var states = sm.states.Select(s => s.state.name).ToArray();
bool hasIdle = states.Contains("Idle");
bool hasWalk = states.Contains("Walk");
bool hasParam = controller.parameters.Any(p => p.name == "isMoving");
if (hasIdle && hasWalk && hasParam)
{
sb.AppendLine($"[PASS] Explorer.controller configured with states: [{string.Join(", ", states)}], default={sm.defaultState.name}, parameter 'isMoving' present");
}
else
{
sb.AppendLine($"[FAIL] Explorer.controller states or parameter missing: hasIdle={hasIdle}, hasWalk={hasWalk}, hasParam={hasParam}");
allPassed = false;
}
}
var smr = prefab.GetComponentInChildren<SkinnedMeshRenderer>();
if (smr == null || smr.sharedMaterial == null)
{
sb.AppendLine("[FAIL] SkinnedMeshRenderer or material missing on Explorer.prefab");
allPassed = false;
}
else
{
var mat = smr.sharedMaterial;
sb.AppendLine($"[PASS] SkinnedMeshRenderer bound to material: {mat.name} (Shader: {mat.shader.name})");
}
// Phase 2: Scene Placement & Locomotion Logic Validation
sb.AppendLine("\n[Phase 2: Scene Placement & Locomotion Step Simulation]");
var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
try
{
var root = scene.GetRootGameObjects().FirstOrDefault(g => g.name == "HomeCamp");
if (root == null)
{
sb.AppendLine("[FAIL] HomeCamp root not found in " + ScenePath);
return sb.ToString();
}
var explorerTf = root.transform.Find("Explorer");
if (explorerTf == null)
{
sb.AppendLine("[FAIL] Explorer not found under HomeCamp scene root");
allPassed = false;
return sb.ToString();
}
sb.AppendLine($"[PASS] Explorer placed in HomeCamp scene at: {explorerTf.position}, rotation: {explorerTf.eulerAngles}");
// Find Controller Type via reflection
var ctrlType = AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetType("HotUpdate.Gameplay.CampExplorerController"))
.FirstOrDefault(t => t != null);
if (ctrlType == null)
{
sb.AppendLine("[FAIL] Type HotUpdate.Gameplay.CampExplorerController not found in AppDomain");
allPassed = false;
return sb.ToString();
}
var ctrl = explorerTf.GetComponent(ctrlType);
if (ctrl == null)
{
sb.AppendLine("[FAIL] CampExplorerController missing on Explorer in scene");
allPassed = false;
return sb.ToString();
}
var isMovingProp = ctrlType.GetProperty("IsMoving");
var targetPosProp = ctrlType.GetProperty("TargetPosition");
var moveToMethod = ctrlType.GetMethod("MoveTo", new[] { typeof(Vector3) });
var stopMethod = ctrlType.GetMethod("Stop");
var stopDistField = ctrlType.GetField("stopDistance");
var moveSpeedField = ctrlType.GetField("moveSpeed");
bool isMoving = (bool)isMovingProp.GetValue(ctrl);
if (isMoving)
{
sb.AppendLine("[FAIL] Explorer initially moving when should be idle");
allPassed = false;
}
else
{
sb.AppendLine("[PASS] Initial state: Explorer is idle (IsMoving=False)");
}
// Issue Move Command
Vector3 startPos = explorerTf.position;
Vector3 targetPos = startPos + new Vector3(2.5f, 0, 1.5f);
moveToMethod.Invoke(ctrl, new object[] { targetPos });
isMoving = (bool)isMovingProp.GetValue(ctrl);
Vector3 curTarget = (Vector3)targetPosProp.GetValue(ctrl);
if (!isMoving)
{
sb.AppendLine("[FAIL] MoveTo did not set IsMoving to true");
allPassed = false;
}
else
{
sb.AppendLine($"[PASS] MoveTo({targetPos}) triggered: IsMoving=True, Target={curTarget}");
}
// Simulate walk
float stopDist = (float)stopDistField.GetValue(ctrl);
float moveSpeed = (float)moveSpeedField.GetValue(ctrl);
float simDt = 0.05f;
int frames = 0;
while ((bool)isMovingProp.GetValue(ctrl) && frames < 100)
{
Vector3 toTarget = curTarget - explorerTf.position;
toTarget.y = 0;
float dist = toTarget.magnitude;
if (dist <= stopDist)
{
stopMethod.Invoke(ctrl, null);
break;
}
explorerTf.rotation = Quaternion.LookRotation(toTarget.normalized, Vector3.up);
explorerTf.position += toTarget.normalized * Mathf.Min(moveSpeed * simDt, dist);
frames++;
}
isMoving = (bool)isMovingProp.GetValue(ctrl);
float finalDist = Vector3.Distance(new Vector3(explorerTf.position.x, 0, explorerTf.position.z), new Vector3(curTarget.x, 0, curTarget.z));
if (!isMoving && finalDist <= stopDist + 0.05f)
{
sb.AppendLine($"[PASS] Explorer successfully walked to target in {frames} steps! Final position: {explorerTf.position}, remaining dist: {finalDist:F3}m, IsMoving={isMoving} (returned to Idle)");
}
else
{
sb.AppendLine($"[FAIL] Explorer failed to reach target: finalDist={finalDist}, IsMoving={isMoving}");
allPassed = false;
}
// Phase 3: Camera Raycast to Ground
sb.AppendLine("\n[Phase 3: Camera Raycast to Ground Verification]");
var camGo = root.transform.Find("HomeCampCamera")?.gameObject;
var camera = camGo?.GetComponent<Camera>();
if (camera == null)
{
sb.AppendLine("[FAIL] HomeCampCamera missing in scene");
allPassed = false;
}
else
{
// Raycast from bottom-center of screen (plaza ground)
Ray ray = camera.ViewportPointToRay(new Vector3(0.5f, 0.35f, 0));
int layerMask = 1 << 29;
if (Physics.Raycast(ray, out RaycastHit hit, 150f, layerMask))
{
sb.AppendLine($"[PASS] Camera raycast hit ground at {hit.point} on collider '{hit.collider.name}' (layer {hit.collider.gameObject.layer})");
}
else
{
sb.AppendLine("[FAIL] Camera raycast missed ground surface");
allPassed = false;
}
}
}
finally
{
EditorSceneManager.CloseScene(scene, true);
}
sb.AppendLine($"\nOverall Result: {(allPassed ? "ALL TESTS PASSED" : "TESTS FAILED")}");
return sb.ToString();
}
}
#endif
@@ -0,0 +1,232 @@
#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using HotUpdate.UI;
public static class VerifyHomeCampAdaptationAndEntrances
{
const string ScenePath = "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity";
const string PrefabPath = "Assets/Bundles/UI/Prefab/UI_MainHUD.prefab";
const float ReferenceAspect = 1080f / 1920f;
static readonly (string name, int w, int h)[] TestResolutions = new[]
{
("Standard 9:16", 1080, 1920),
("Long 9:18", 1080, 2160),
("iPhone 9:19.5", 1080, 2340),
("Android Long 9:20", 1080, 2400),
("Ultra Long 9:22", 1080, 2640),
("Wide 2:3", 1080, 1620),
("Tablet 3:4", 1080, 1440),
};
public static string Run()
{
var sb = new StringBuilder();
sb.AppendLine("=== Automated Verification: HomeCamp Camera Adaptation & Building Entrances ===");
bool allPassed = true;
// 1. Verify UI Prefab & Bindings
sb.AppendLine("\n[Phase 1: UI Prefab & Event Dispatch Verification]");
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(PrefabPath);
if (prefab == null) return "FAIL: UI_MainHUD.prefab not found";
var hudGo = UnityEngine.Object.Instantiate(prefab);
try
{
var hudView = hudGo.GetComponent<MainHudView>() ?? hudGo.AddComponent<MainHudView>();
var group = hudGo.transform.Find("Group_CampBuildings");
if (group == null)
{
sb.AppendLine("FAIL: Group_CampBuildings not found in UI_MainHUD.prefab");
return sb.ToString();
}
var triggeredKeys = new List<string>();
hudView.OnHomeActionClicked += key => triggeredKeys.Add(key);
hudView.Bind();
var expectedButtons = new (string btnName, string expectedKey, string expectedTitle)[]
{
("Btn_Building_MainHouse", "Camp", "营地大厅"),
("Btn_Building_Shop", "Shop", "小镇商店"),
("Btn_Building_Pets", "Pets", "伙伴之家"),
("Btn_Building_Fountain", "Rewards", "祈愿喷泉"),
("Btn_Building_Stall", "Daily", "集市货摊"),
};
foreach (var (btnName, expectedKey, expectedTitle) in expectedButtons)
{
var btnTf = group.Find(btnName);
if (btnTf == null)
{
sb.AppendLine($"[FAIL] Button {btnName} not found under Group_CampBuildings");
allPassed = false;
continue;
}
var btn = btnTf.GetComponent<Button>();
var tmp = btnTf.GetComponentInChildren<TextMeshProUGUI>();
if (btn == null)
{
sb.AppendLine($"[FAIL] Button component missing on {btnName}");
allPassed = false;
continue;
}
if (tmp == null || tmp.text != expectedTitle)
{
sb.AppendLine($"[FAIL] TextMeshProUGUI mismatch on {btnName}: expected '{expectedTitle}', got '{(tmp != null ? tmp.text : "null")}'");
allPassed = false;
}
// Simulate click
triggeredKeys.Clear();
btn.onClick.Invoke();
if (triggeredKeys.Count == 1 && triggeredKeys[0] == expectedKey)
{
sb.AppendLine($"[PASS] {btnName} clicked -> dispatched key '{expectedKey}', title='{tmp?.text}'");
}
else
{
sb.AppendLine($"[FAIL] {btnName} clicked -> dispatched '{string.Join(",", triggeredKeys)}', expected '{expectedKey}'");
allPassed = false;
}
}
// 2. Verify Scene Camera & Multi-resolution Adaptation
sb.AppendLine("\n[Phase 2: Scene Multi-resolution Adaptation Verification]");
var scene = EditorSceneManager.OpenScene(ScenePath, OpenSceneMode.Additive);
try
{
var root = scene.GetRootGameObjects().FirstOrDefault(g => g.name == "HomeCamp");
if (root == null)
{
sb.AppendLine("FAIL: HomeCamp root not found in " + ScenePath);
return sb.ToString();
}
var camGo = root.transform.Find("HomeCampCamera")?.gameObject;
var camera = camGo?.GetComponent<Camera>();
var backdrop = root.transform.Find("DistantLakeWaterfallCastle");
var ground = root.transform.Find("Ground");
if (camera == null || backdrop == null || ground == null)
{
sb.AppendLine("FAIL: Missing essential scene elements (Camera/Backdrop/Ground)");
return sb.ToString();
}
// Buildings in scene
var buildings = new (string name, Transform tf, Vector3 anchor)[]
{
("MainHouse", root.transform.Find("MainHouse"), new Vector3(0, 6.7f, 7.2f)),
("HouseLeft", root.transform.Find("HouseLeft"), new Vector3(-6.8f, 4.0f, 3.6f)),
("HouseRight", root.transform.Find("HouseRight"), new Vector3(7.5f, 4.2f, 4.0f)),
("Fountain", root.transform.Find("Fountain"), new Vector3(0, 2.5f, 0.8f)),
("StallRight", root.transform.Find("StallRight"), new Vector3(4.5f, 2.6f, 2.8f)),
};
foreach (var b in buildings)
{
if (b.tf == null)
{
sb.AppendLine($"[FAIL] Scene building transform missing: {b.name}");
allPassed = false;
}
}
// Simulate presenter's Resize and Anchoring for each test resolution
var hudRt = hudGo.GetComponent<RectTransform>();
foreach (var res in TestResolutions)
{
float aspect = (float)res.w / res.h;
float adaptedFov = 2f * Mathf.Atan(Mathf.Tan(25f * Mathf.Deg2Rad) * Mathf.Max(1f, ReferenceAspect / aspect)) * Mathf.Rad2Deg;
camera.fieldOfView = adaptedFov;
camera.aspect = aspect;
// Presenter runtime backdrop adaptation
const float dist = 75f;
float frustumHalfH = dist * Mathf.Tan(adaptedFov * Mathf.Deg2Rad * 0.5f);
float frustumHalfW = frustumHalfH * aspect;
float bdW = Mathf.Max(72f, frustumHalfW * 2f * 1.15f);
float bdH = Mathf.Max(56f, frustumHalfH * 1.35f);
float topHeight = frustumHalfH * 1.08f;
backdrop.localScale = new Vector3(bdW, bdH, 1f);
backdrop.position = camera.transform.position + camera.transform.forward * dist + camera.transform.up * (topHeight - bdH * 0.5f);
backdrop.rotation = camera.transform.rotation;
// Check backdrop bounds in camera space
Vector3 bdCamPos = camera.transform.InverseTransformPoint(backdrop.position);
float bdHalfW = backdrop.lossyScale.x * 0.5f;
float bdHalfH = backdrop.lossyScale.y * 0.5f;
float bdMinX = bdCamPos.x - bdHalfW;
float bdMaxX = bdCamPos.x + bdHalfW;
float bdMaxY = bdCamPos.y + bdHalfH;
bool leakLeft = bdMinX > -frustumHalfW;
bool leakRight = bdMaxX < frustumHalfW;
bool leakTop = bdMaxY < frustumHalfH;
if (leakLeft || leakRight || leakTop)
{
sb.AppendLine($"[FAIL] {res.name}: Backdrop Leak! Left={leakLeft}, Right={leakRight}, Top={leakTop}");
allPassed = false;
}
else
{
sb.AppendLine($"[PASS] {res.name} (FOV={adaptedFov:F1}°): Backdrop 100% covers visible frustum (X:[{bdMinX:F1},{bdMaxX:F1}] vs Frustum:[{-frustumHalfW:F1},{frustumHalfW:F1}], Y_top:{bdMaxY:F1} vs Frustum:{frustumHalfH:F1})");
}
// Check building world-to-screen UI anchoring
Vector2 canvasSize = new Vector2(1080f, 1080f / aspect);
foreach (var (bName, bTf, anchor) in buildings)
{
Vector3 worldPos = bTf != null ? bTf.position : anchor;
worldPos.x = anchor.x; worldPos.y = anchor.y; worldPos.z = anchor.z;
Vector3 vp = camera.WorldToViewportPoint(worldPos);
if (vp.z <= 0)
{
sb.AppendLine($"[FAIL] {res.name}: {bName} is behind camera");
allPassed = false;
continue;
}
float x = (vp.x - 0.5f) * canvasSize.x;
float y = (vp.y - 0.5f) * canvasSize.y;
float halfW = canvasSize.x * 0.5f;
float halfH = canvasSize.y * 0.5f;
float clampedX = Mathf.Clamp(x, -halfW + 110f + 15f, halfW - 110f - 15f);
float clampedY = Mathf.Clamp(y, -halfH + 280f, halfH - 180f);
// Ensure coordinates are finite and inside safe canvas
if (float.IsNaN(clampedX) || float.IsNaN(clampedY) || Mathf.Abs(clampedX) > halfW || Mathf.Abs(clampedY) > halfH)
{
sb.AppendLine($"[FAIL] {res.name}: {bName} anchoredPosition invalid: ({clampedX}, {clampedY})");
allPassed = false;
}
}
}
}
finally
{
EditorSceneManager.CloseScene(scene, true);
}
}
finally
{
UnityEngine.Object.DestroyImmediate(hudGo);
}
sb.AppendLine($"\nOverall Result: {(allPassed ? "ALL TESTS PASSED" : "TESTS FAILED")}");
return sb.ToString();
}
}
#endif
@@ -1,119 +0,0 @@
#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using AIGame.Review;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public static class VerifyLmGirlAnimationLab
{
const string Root="Assets/Review/CharacterAnimationLab";
static string Output=>Path.Combine(Directory.GetParent(Application.dataPath).Parent.FullName,"Tools/output/lmgirl_tpose_studio/rig_mixamo41");
static void Check(bool ok,string message){if(!ok)throw new InvalidOperationException(message);}
static CharacterAnimationLab Viewer()=>UnityEngine.Object.FindObjectOfType<CharacterAnimationLab>();
public static string Verify()
{
var data=JObject.Parse(File.ReadAllText(Path.Combine(Output,"unity_review_data.json")));
var expected=JObject.Parse(File.ReadAllText(Path.Combine(Output,"walking_comparison.json")));
var root=PrefabUtility.LoadPrefabContents(Root+"/LmGirl/Generated/LmGirlAnimationLab.prefab");
var baked=new Mesh();var quality=QualitySettings.skinWeights;
try
{
QualitySettings.skinWeights=SkinWeights.Unlimited;
var v=root.GetComponent<CharacterAnimationLab>();v.playing=false;v.inPlace=false;v.motion=0;
// Historical bind/weight baseline, deliberately excluding the later
// foot-path correction. Active corrected playback has a gait audit.
foreach(var actor in v.actors)actor.walkingClip=null;
foreach(var actor in v.actors)actor.rig.transform.localScale=Vector3.one;
Check(v.clips[0]==AssetDatabase.LoadAssetAtPath<AnimationClip>(Root+"/Generated/Walking.anim"),"Walking clip must be the same asset.");
Check(v.actors.Length==4&&v.actors[0].renderer.bones.Length==33,"Website 33-bone actor required.");
Check(v.actors.Skip(1).All(a=>a.renderer.bones.Length==41&&a.translationOffsets.Length==41),"TokenRig 41 bones/offsets required.");
var results=new List<object>();
foreach(var variant in data["variants"])
{
string name=(string)variant["name"];
var mesh=AssetDatabase.LoadAssetAtPath<Mesh>(Root+"/LmGirl/Generated/"+name+".asset");
Check(mesh.triangles.Length/3==4999,"Topology changed.");
v.actors[1].renderer.sharedMesh=mesh;
float[] maxima=new float[3];int[] masks={1,2,4};
for(int frame=0;frame<32;frame++)
{
v.time=frame/30f;v.Sample();v.actors[1].renderer.BakeMesh(baked);var points=baked.vertices;
foreach(var edge in variant["auditEdges"])
{
float ratio=Vector3.Distance(points[(int)edge[0]],points[(int)edge[1]])/(float)edge[2];
for(int r=0;r<3;r++)if(((int)edge[3]&masks[r])!=0)maxima[r]=Mathf.Max(maxima[r],ratio);
}
}
string[] regions={"all","hands","neck"};float error=0;
for(int r=0;r<3;r++)error=Mathf.Max(error,Mathf.Abs(maxima[r]-(float)expected[name]["maxStretch"][regions[r]]));
Check(error<.003f,name+" native comparison mismatch: "+error);
results.Add(new{variant=name,frames=32,maxStretch=maxima[0],hands=maxima[1],neck=maxima[2],maxDifference=error});
}
var website=JObject.Parse(File.ReadAllText(Path.Combine(Output,"website/unity_review_data.json")));
var websiteExpected=JObject.Parse(File.ReadAllText(Path.Combine(Output,"website/walking_comparison.json")));
Check(v.actors[0].renderer.sharedMesh.GetBonesPerVertex().ToArray().Max()==5,"Website influences were truncated.");
float[] siteMax=new float[3];int[] siteMasks={1,2,4};
for(int frame=0;frame<32;frame++)
{
v.time=frame/30f;v.Sample();v.actors[0].renderer.BakeMesh(baked);var points=baked.vertices;
foreach(var edge in website["variants"][0]["auditEdges"])
{
float ratio=Vector3.Distance(points[(int)edge[0]],points[(int)edge[1]])/(float)edge[2];
for(int r=0;r<3;r++)if(((int)edge[3]&siteMasks[r])!=0)siteMax[r]=Mathf.Max(siteMax[r],ratio);
}
}
string[] siteRegions={"all","hands","neck"};float siteError=0;
for(int r=0;r<3;r++)siteError=Mathf.Max(siteError,Mathf.Abs(siteMax[r]-(float)websiteExpected["maxStretch"][siteRegions[r]]));
Check(siteError<.003f,"Website rest-axis mapping mismatch: "+siteError);
results.Add(new{variant="mixamo",frames=32,maxStretch=siteMax[0],hands=siteMax[1],neck=siteMax[2],maxDifference=siteError});
var report=new{passed=true,samples=192,bones=41,websiteBones=33,websiteMaxInfluences=5,triangles=4999,sameWalkingClip=true,results};
File.WriteAllText(Path.Combine(Output,"unity_verification.json"),JsonConvert.SerializeObject(report,Formatting.Indented));
return JsonConvert.SerializeObject(report);
}
finally{QualitySettings.skinWeights=quality;UnityEngine.Object.DestroyImmediate(baked);PrefabUtility.UnloadPrefabContents(root);}
}
public static string Controls()
{
var v=Viewer();Check(Application.isPlaying,"Play Mode required.");
var buttons=v.ui.GetComponentsInChildren<Button>(true).ToDictionary(b=>b.name);
void Click(string name)=>buttons["Btn_"+name].onClick.Invoke();
Check(buttons.Count==22,"22 serialized buttons required.");
v.motion=0;v.time=0;v.playing=true;v.inPlace=true;v.Sample();Click("Play");Check(!v.playing,"Pause");
Click("Next");Check(Mathf.Abs(v.time-1f/30)<.00001f,"Next frame");Click("Previous");Check(v.time==0,"Previous frame");
Click("Breathe");Check(v.motion==1,"Breathing");Click("Happy");Check(v.motion==2,"Happy");Click("Walk");
foreach(var speed in new[]{"Speed025","Speed05","Speed1","Speed2"})Click(speed);
Check(v.speed==2,"Speed");Click("Speed1");
var seek=v.ui.GetComponentInChildren<AnimationLabSeekBar>();var corners=new Vector3[4];((RectTransform)seek.transform).GetWorldCorners(corners);
seek.OnPointerDown(new PointerEventData(EventSystem.current){position=RectTransformUtility.WorldToScreenPoint(null,Vector3.Lerp(corners[0],corners[2],.5f))});
Check(Mathf.Abs(v.time-v.Duration*.5f)<.001f&&!v.playing,"Pointer seek");
v.Seek(1);var stationary=v.actors[0].hips.localPosition;Click("Travel");
Check(Vector3.Distance(v.actors[0].hips.localPosition-stationary,v.travel[0]*v.actors[0].translationScale)<.00001f,"Proportional travel");Click("Travel");
Click("Focus4");Click("Detail");Click("Detail");Check(v.focus==3&&v.detail==2&&v.actors[3].rightHand,"Fourth actor hand close-up");
Check(v.actors.Count(a=>a.renderer.enabled)==1,"Focused view must isolate the selected actor.");
Click("Material");Check(v.actors.All(a=>a.renderer.sharedMaterial==v.clayMaterial),"Clay");Click("Material");
Click("Side");Click("Back");Click("Front");Click("All");
Check(v.actors.All(a=>a.renderer.enabled),"All-view must restore four actors.");
var first=v.actors[1].renderer.bones;
foreach(var actor in v.actors.Skip(2))for(int i=0;i<41;i++)
{
Check(Vector3.Distance(first[i].localPosition,actor.renderer.bones[i].localPosition)<.00001f,"Pose translations differ.");
Check(Mathf.Abs(Quaternion.Dot(first[i].localRotation,actor.renderer.bones[i].localRotation))>.99999f,"Pose rotations differ.");
}
var result=new{passed=true,buttons=22,checks=new[]{"pause","frame step","three clips","four speeds","pointer seek","scaled in-place travel","fourth actor focus/detail","materials","views","TokenRig 41-bone pose synchronization"}};
File.WriteAllText(Path.Combine(Output,"unity_controls.json"),JsonConvert.SerializeObject(result,Formatting.Indented));
v.time=0;v.playing=true;v.Sample();return JsonConvert.SerializeObject(result);
}
public static string Pose(int frame,int focus,int detail,int yaw,bool textured)
{
var v=Viewer();v.motion=0;v.time=frame/30f;v.playing=false;v.inPlace=true;v.focus=focus;v.detail=detail;v.yaw=yaw;v.textured=textured;v.Sample();
return JsonConvert.SerializeObject(new{v.time,v.focus,v.detail,v.yaw,v.textured});
}
}
#endif
-112
View File
@@ -1,112 +0,0 @@
#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using UnityEditor;
using UnityEngine;
using AIGame.Review;
public static class VerifyLmGirlGait
{
const string Root="Assets/Review/CharacterAnimationLab/LmGirl/Generated";
static string Output=>Path.Combine(Directory.GetParent(Application.dataPath).Parent.FullName,"Tools/output/lmgirl_tpose_studio/rig_mixamo41");
static Vector3 V(JToken t)=>new Vector3((float)t[0],(float)t[1],(float)t[2]);
static void Check(bool valid,string message){if(!valid)throw new InvalidOperationException(message);}
public static string Verify()
{
var expected=JObject.Parse(File.ReadAllText(Path.Combine(Output,"gait_correction.json")));
var data=JObject.Parse(File.ReadAllText(Path.Combine(Output,"unity_review_data.json")));
var website=JObject.Parse(File.ReadAllText(Path.Combine(Output,"website/unity_review_data.json")));
var root=PrefabUtility.LoadPrefabContents(Root+"/LmGirlAnimationLab.prefab");
var baked=new Mesh();var previousQuality=QualitySettings.skinWeights;
try
{
QualitySettings.skinWeights=SkinWeights.Unlimited;
var v=root.GetComponent<CharacterAnimationLab>();v.playing=false;v.inPlace=false;v.motion=0;v.focus=-1;
Check(v.actors.All(a=>a.walkingClip&&Mathf.Abs(a.walkingClip.length-v.Duration)<.00001f),"Missing mapped walk or wrong timing.");
Check(v.actors.Skip(1).All(a=>a.walkingClip==v.actors[1].walkingClip),"All TokenRig variants must share one corrected motion.");
foreach(var a in v.actors)a.rig.transform.localScale=Vector3.one;
var bones=v.actors.Select(a=>a.renderer.bones.ToDictionary(b=>b.name.Split(':').Last())).ToArray();
float maxPositionError=0,maxLengthDrift=0;var minGaps=Enumerable.Repeat(float.MaxValue,4).ToArray();
var lengths=new float[4,4];
for(int ai=0;ai<4;ai++)
{
var bind=ai==0?website:data;
var rest=bind["bones"].ToDictionary(b=>(string)b["name"],b=>Matrix(b["bindpose"]).inverse.GetColumn(3));
int segment=0;
foreach(string side in new[]{"Left","Right"})foreach(var pair in new[]{new[]{"UpLeg","Leg"},new[]{"Leg","Foot"}})
lengths[ai,segment++]=Vector3.Distance(rest["mixamorig:"+side+pair[0]],rest["mixamorig:"+side+pair[1]]);
}
for(int frame=0;frame<32;frame++)
{
v.time=frame/30f;v.Sample();
for(int ai=0;ai<4;ai++)
{
var a=v.actors[ai];var track=expected["reports"][ai==0?"mixamo":"tokenrig"]["tracks"][frame];
foreach(var p in (JObject)track["positions"])
{
var actual=a.rig.transform.InverseTransformPoint(bones[ai][p.Key].position);
maxPositionError=Mathf.Max(maxPositionError,Vector3.Distance(actual,V(p.Value)));
}
}
}
Check(maxPositionError<.00005f,"Native mapped pose disagrees with independent IK reference: "+maxPositionError);
// 120Hz scan covers interpolation between original 30Hz keyframes.
for(int frame=0;frame<=124;frame++)
{
v.time=frame/120f;v.Sample();
for(int ai=0;ai<4;ai++)
{
var b=bones[ai];var lateral=(b["LeftUpLeg"].position-b["RightUpLeg"].position).normalized;
float gap=Vector3.Dot(b["LeftFoot"].position-b["RightFoot"].position,lateral);minGaps[ai]=Mathf.Min(minGaps[ai],gap);
int segment=0;
foreach(string side in new[]{"Left","Right"})foreach(var pair in new[]{new[]{"UpLeg","Leg"},new[]{"Leg","Foot"}})
maxLengthDrift=Mathf.Max(maxLengthDrift,Mathf.Abs(Vector3.Distance(b[side+pair[0]].position,b[side+pair[1]].position)-lengths[ai,segment++]));
}
}
Check(minGaps.All(g=>g>.08f),"Feet cross or become too close: "+string.Join(",",minGaps));
Check(maxLengthDrift<.0001f,"Leg segment lengths changed: "+maxLengthDrift);
var deformation=new List<object>();
foreach(var variant in data["variants"].Concat(website["variants"]))
{
string name=(string)variant["name"];int ai=name=="mixamo"?0:1;var actor=v.actors[ai];
actor.renderer.sharedMesh=AssetDatabase.LoadAssetAtPath<Mesh>(Root+"/"+name+".asset");
float[] maxima=new float[3];int[] bits={1,2,4};
for(int frame=0;frame<32;frame++)
{
v.time=frame/30f;v.Sample();actor.renderer.BakeMesh(baked);var vertices=baked.vertices;
foreach(var edge in variant["auditEdges"])
{
float ratio=Vector3.Distance(vertices[(int)edge[0]],vertices[(int)edge[1]])/(float)edge[2];
for(int i=0;i<3;i++)if(((int)edge[3]&bits[i])!=0)maxima[i]=Mathf.Max(maxima[i],ratio);
}
}
string[] regions={"all","hands","neck"};float error=0;
for(int i=0;i<3;i++)error=Mathf.Max(error,Mathf.Abs(maxima[i]-(float)expected["deformation"][name]["maxStretch"][regions[i]]));
Check(error<.003f,"Corrected skin mismatch "+name+": "+error);
deformation.Add(new{variant=name,maxStretch=maxima[0],hands=maxima[1],neck=maxima[2],maxDifference=error});
}
var result=new{passed=true,originalFrames=32,interpolationHz=120,interpolationSamples=125*4,
minimumFootSignedGaps=minGaps,maxPositionError,maxLengthDrift,deformationSamples=192,deformation};
File.WriteAllText(Path.Combine(Output,"unity_gait_verification.json"),JsonConvert.SerializeObject(result,Formatting.Indented));
return JsonConvert.SerializeObject(result);
}
finally{QualitySettings.skinWeights=previousQuality;UnityEngine.Object.DestroyImmediate(baked);PrefabUtility.UnloadPrefabContents(root);}
}
static Matrix4x4 Matrix(JToken rows)
{
var m=new Matrix4x4();for(int r=0;r<4;r++)for(int c=0;c<4;c++)m[r,c]=(float)rows[r][c];return m;
}
public static string Pose(bool corrected,int frame,int focus)
{
var v=UnityEngine.Object.FindObjectOfType<CharacterAnimationLab>();
for(int i=0;i<v.actors.Length;i++)v.actors[i].walkingClip=corrected?
AssetDatabase.LoadAssetAtPath<AnimationClip>(Root+"/Walking_LmGirl"+(i==0?"Mixamo33":"41")+".anim"):null;
v.motion=0;v.time=frame/30f;v.playing=false;v.inPlace=true;v.focus=focus;v.detail=0;v.yaw=0;v.textured=false;v.Sample();
return corrected?"Corrected foot-path mapping":"Previous angle-only mapping (temporary Play Mode preview)";
}
}
#endif
@@ -0,0 +1,173 @@
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using AIGame.EditorTools;
using AOT.UI;
using Newtonsoft.Json;
using TMPro;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
public static class VerifyStartupPresentation
{
static string Output => Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/startup_presentation"));
public static string Build() => BuildBootLoading.Build();
public static string Export()
{
if (EditorApplication.isPlaying || BuildPipeline.isBuildingPlayer) throw new Exception("Editor must be idle.");
if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebGL) throw new Exception("Expected WebGL target.");
if (BuildBootLoading.ValidateConfigured() != null) throw new Exception(BuildBootLoading.ValidateConfigured());
Directory.CreateDirectory(Output);
string file = Path.Combine(Output,"export.json");
File.WriteAllText(file,JsonConvert.SerializeObject(new {status="building",utc=DateTime.UtcNow}));
try
{
string result = AOT.Editor.WeChat.ExportWeChatBasePackage.Export();
bool passed = result.StartsWith("ok minigame=",StringComparison.Ordinal);
File.WriteAllText(file,JsonConvert.SerializeObject(new {status=passed?"completed":"failed",result,utc=DateTime.UtcNow},Formatting.Indented));
if (!passed) throw new Exception(result);
return result;
}
catch(Exception error)
{
File.WriteAllText(file,JsonConvert.SerializeObject(new {status="failed",error=error.ToString(),utc=DateTime.UtcNow},Formatting.Indented));
throw;
}
}
const string SceneKey = "AIGame.StartupPresentation.Setup";
public static string Prepare()
{
if (EditorApplication.isPlaying) throw new Exception("Stop Play Mode first.");
for (int i=0; i<UnityEngine.SceneManagement.SceneManager.sceneCount; i++)
if (UnityEngine.SceneManagement.SceneManager.GetSceneAt(i).isDirty) throw new Exception("Existing scene has unsaved changes.");
if (!string.IsNullOrEmpty(SessionState.GetString(SceneKey, ""))) throw new Exception("Restore prior preview first.");
SessionState.SetString(SceneKey, JsonConvert.SerializeObject(EditorSceneManager.GetSceneManagerSetup()));
EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single);
return Resolution(1080,1920,true);
}
public static string Restore()
{
if (EditorApplication.isPlaying) throw new Exception("Stop Play Mode first.");
string saved = SessionState.GetString(SceneKey, "");
if (string.IsNullOrEmpty(saved)) throw new Exception("No scene setup saved.");
EditorSceneManager.RestoreSceneManagerSetup(JsonConvert.DeserializeObject<SceneSetup[]>(saved));
var type = typeof(Editor).Assembly.GetType("UnityEditor.GameView");
var window = EditorWindow.GetWindow(type);
type.GetProperty("selectedSizeIndex", BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic)
.SetValue(window,SessionState.GetInt(SceneKey+".Size",0)); window.Repaint();
SessionState.EraseString(SceneKey);
return "Original scenes and Game View restored.";
}
public static string Phone() => Resolution(1080,2338,false);
public static string Plain() => Resolution(1080,1920,false);
static string Resolution(int width, int height, bool remember)
{
var editor = typeof(Editor).Assembly;
var type = editor.GetType("UnityEditor.GameView");
var window = EditorWindow.GetWindow(type);
var selected = type.GetProperty("selectedSizeIndex",BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic);
if (remember) SessionState.SetInt(SceneKey+".Size",(int)selected.GetValue(window));
var sizesType = editor.GetType("UnityEditor.GameViewSizes");
var sizes = typeof(ScriptableSingleton<>).MakeGenericType(sizesType).GetProperty("instance").GetValue(null);
var group = sizesType.GetMethod("GetGroup").Invoke(sizes,new[]{sizesType.GetProperty("currentGroupType").GetValue(sizes)});
int count = (int)group.GetType().GetMethod("GetTotalCount").Invoke(group,null), index=count;
for (int i=0;i<count;i++)
{
var size = group.GetType().GetMethod("GetGameViewSize").Invoke(group,new object[]{i});
if ((int)size.GetType().GetProperty("width").GetValue(size)==width && (int)size.GetType().GetProperty("height").GetValue(size)==height) { index=i;break; }
}
if(index==count)
{
var size = Activator.CreateInstance(editor.GetType("UnityEditor.GameViewSize"),new object[]{Enum.ToObject(editor.GetType("UnityEditor.GameViewSizeType"),1),width,height,"Startup "+width+"x"+height});
group.GetType().GetMethod("AddCustomSize").Invoke(group,new[]{size});
}
selected.SetValue(window,index);window.Repaint();
return "Preview resolution "+width+"x"+height;
}
public static string Start()
{
if (!EditorApplication.isPlaying) throw new Exception("Enter Play Mode first.");
Application.runInBackground = true;
var camera = new GameObject("StartupPreviewCamera", typeof(Camera)).GetComponent<Camera>();
camera.clearFlags = CameraClearFlags.SolidColor;
camera.backgroundColor = new Color(.54f, .72f, .76f);
camera.cullingMask = 0;
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(BuildBootLoading.PrefabPath);
var view = BootPatchView.Create(prefab.GetComponent<BootPatchView>());
view.SetStatus("正在布置营地…");
view.SetProgress(.76f);
return "Preview started from the real local prefab; no network requests.";
}
public static string Check()
{
var view = UnityEngine.Object.FindObjectOfType<BootPatchView>();
if (view == null) throw new Exception("Loading preview missing.");
var texts = view.GetComponentsInChildren<TMP_Text>();
foreach (var text in texts)
{
text.ForceMeshUpdate();
if (!text.font.HasCharacters(text.text)) throw new Exception("Missing glyphs: " + text.text);
if (text.isTextOverflowing) throw new Exception("Text overflow: " + text.name);
}
var image = view.transform.Find("Artwork").GetComponent<UnityEngine.UI.Image>();
var canvas = view.GetComponent<RectTransform>();
var art = (RectTransform)image.transform;
if (art.rect.width + 1 < canvas.rect.width || art.rect.height + 1 < canvas.rect.height)
throw new Exception("Artwork does not cover the viewport.");
float ratio = image.sprite.rect.width / image.sprite.rect.height;
if (Mathf.Abs(art.rect.width / art.rect.height - ratio) > .001f) throw new Exception("Artwork stretched.");
var font = texts[0].font;
if (font.atlasPopulationMode != AtlasPopulationMode.Static || font.sourceFontFile != null)
throw new Exception("Boot font must not depend on runtime glyph generation.");
float shown = (float)typeof(BootPatchView).GetField("_shown", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(view);
view.SetProgress(.1f);
float target = (float)typeof(BootPatchView).GetField("_target", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(view);
if (target < .75f) throw new Exception("Progress moved backward.");
Directory.CreateDirectory(Output);
string report = JsonConvert.SerializeObject(new { passed=true, screen=new [] {Screen.width,Screen.height}, chineseGlyphs=true,
noTextOverflow=true, aspectPreserved=true, progressMonotonic=true, shown, target,
splash=PlayerSettings.SplashScreen.show, fontAtlas=new[]{font.atlasWidth,font.atlasHeight},
bootReference=BuildBootLoading.ValidateConfigured() }, Formatting.Indented);
File.WriteAllText(Path.Combine(Output, "validation-" + Screen.width + "x" + Screen.height + ".json"), report);
return report;
}
public static string Complete()
{
var view = UnityEngine.Object.FindObjectOfType<BootPatchView>();
view.SetStatus("准备就绪,即将出发"); view.SetProgress(1f); view.Hide();
return "Fade requested; inspect completion on the following frames.";
}
public static string Capture()
{
var canvas = UnityEngine.Object.FindObjectOfType<BootPatchView>().GetComponent<Canvas>();
var camera = GameObject.Find("StartupPreviewCamera").GetComponent<Camera>();
var mode = canvas.renderMode; var worldCamera = canvas.worldCamera; float plane = canvas.planeDistance;
var previous = RenderTexture.active; int mask = camera.cullingMask;
int width = Screen.width, height = Screen.height;
var target = new RenderTexture(width,height,24);
var pixels = new Texture2D(width,height,TextureFormat.RGB24,false);
string path = Path.Combine(Output,"loading-"+width+"x"+height+".png");
try
{
camera.targetTexture=target; camera.cullingMask=1<<LayerMask.NameToLayer("UI");
canvas.renderMode=RenderMode.ScreenSpaceCamera;canvas.worldCamera=camera;canvas.planeDistance=1;
Canvas.ForceUpdateCanvases();camera.Render();RenderTexture.active=target;
pixels.ReadPixels(new Rect(0,0,width,height),0,0);pixels.Apply();
Directory.CreateDirectory(Output);File.WriteAllBytes(path,pixels.EncodeToPNG());
}
finally
{
RenderTexture.active=previous;camera.targetTexture=null;camera.cullingMask=mask;
canvas.renderMode=mode;canvas.worldCamera=worldCamera;canvas.planeDistance=plane;Canvas.ForceUpdateCanvases();
target.Release();UnityEngine.Object.Destroy(target);UnityEngine.Object.Destroy(pixels);
}
return path;
}
public static string CheckHidden()
{
if (UnityEngine.Object.FindObjectOfType<BootPatchView>() != null) throw new Exception("Fade did not finish.");
return "PASS: full progress and fade completed; loading overlay inactive.";
}
}
@@ -4,7 +4,8 @@
"references": [
"YooAsset",
"HybridCLR.Runtime",
"UnityEngine.UI"
"UnityEngine.UI",
"Unity.TextMeshPro"
],
"includePlatforms": [],
"excludePlatforms": [],
@@ -12,6 +12,7 @@ namespace AOT.Boot
public sealed class BootDriver : MonoBehaviour
{
[SerializeField] BootSettings settings = new BootSettings();
[SerializeField] BootPatchView loadingPrefab;
BootPatchView _view;
@@ -27,7 +28,7 @@ namespace AOT.Boot
void Start()
{
_view = BootPatchView.Create();
_view = BootPatchView.Create(loadingPrefab);
StartCoroutine(Bootstrap());
}
@@ -50,7 +51,7 @@ namespace AOT.Boot
yield break;
}
_view?.SetStatus("加载热更代码…");
_view?.SetStatus("正在准备冒险…");
_view?.SetProgress(0.97f);
string loadError = null;
@@ -63,12 +64,11 @@ namespace AOT.Boot
yield break;
}
_view?.SetProgress(1f);
_view?.SetStatus("热更已启动");
Debug.Log($"[Boot] OK app={ctx.AppVersion} res={ctx.ResVersion} pack={ctx.PackVersion} cdn={ctx.CdnRoot}");
// Prefabs/atlases load asynchronously; two frames are not a readiness guarantee.
_view?.SetStatus("加载主界面…");
_view?.SetStatus("正在布置营地…");
_view?.SetProgress(.98f);
float uiDeadline = Time.realtimeSinceStartup + 120f;
while (!ctx.MainUiReady && string.IsNullOrEmpty(ctx.MainUiError) && Time.realtimeSinceStartup < uiDeadline)
yield return null;
@@ -80,6 +80,8 @@ namespace AOT.Boot
yield break;
}
yield return null;
_view?.SetStatus("准备就绪,即将出发");
_view?.SetProgress(1f);
_view?.Hide();
}
}
@@ -25,7 +25,7 @@ namespace AOT.Patch
public IEnumerator Run(Action<BootContext, string> onDone)
{
_view?.SetStatus("检查版本…");
_view?.SetStatus("正在检查更新…");
_view?.SetProgress(0.05f);
VersionInfo version = null;
@@ -55,11 +55,11 @@ namespace AOT.Patch
cdnRoot = _settings.DefaultCdnRoot,
packages = new[] { _settings.PackageName },
};
_view?.SetStatus($"版本回退本地 ({versionError})");
Debug.LogWarning($"[Boot] Local version fallback: {versionError}");
}
else
{
_view?.SetStatus($"远程版本 资源 {version.resVersion} 热更 {version.packVersion}");
Debug.Log($"[Boot] Remote art={version.resVersion} pack={version.packVersion}");
}
if (VersionInfo.CompareVersion(_settings.AppVersion, version.appVersionMin) < 0)
@@ -85,14 +85,14 @@ namespace AOT.Patch
#if UNITY_EDITOR
if (_settings.EditorDirectHotUpdate)
{
_view?.SetStatus("编辑器直通热更(跳过资源补丁)");
_view?.SetStatus("正在准备冒险…");
_view?.SetProgress(0.9f);
onDone?.Invoke(ctx, null);
yield break;
}
#endif
_view?.SetStatus("初始化资源系统…");
_view?.SetStatus("正在准备资源…");
_view?.SetProgress(0.15f);
if (!YooAssets.IsInitialized)
@@ -125,15 +125,15 @@ namespace AOT.Patch
yield break;
}
_view?.SetProgress(0.5f);
_view?.SetStatus("下载资源…");
_view?.SetProgress(0.4f);
_view?.SetStatus("正在下载资源…");
var downloader = package.CreateResourceDownloader(new ResourceDownloaderOptions(10, 3));
if (downloader.TotalDownloadCount > 0)
{
downloader.DownloadProgressChanged += info =>
{
_view?.SetProgress(0.5f + info.Progress * 0.4f);
_view?.SetStatus($"下载 {info.CurrentDownloadCount}/{info.TotalDownloadCount}");
_view?.SetProgress(0.4f + info.Progress * 0.15f);
_view?.SetStatus($"正在下载资源… {info.CurrentDownloadCount}/{info.TotalDownloadCount}");
};
downloader.StartDownload();
yield return downloader;
@@ -155,7 +155,7 @@ namespace AOT.Patch
var companionRoot = cdnRoot.TrimEnd('/');
var slash = companionRoot.LastIndexOf('/');
companionRoot = companionRoot.Substring(0, slash + 1) + packageName;
_view?.SetStatus($"初始化资源包 {packageName}…");
_view?.SetStatus("正在准备营地…");
if (companion.InitializeStatus != EOperationStatus.Succeeded)
{
var companionInit = CreateInitializeOperation(companion, playMode, companionRoot);
@@ -181,7 +181,12 @@ namespace AOT.Patch
var companionDownload = companion.CreateResourceDownloader(new ResourceDownloaderOptions(10, 3));
if (companionDownload.TotalDownloadCount > 0)
{
_view?.SetStatus($"下载资源包 {packageName}…");
_view?.SetStatus("正在下载营地资源…");
companionDownload.DownloadProgressChanged += info =>
{
_view?.SetProgress(.55f + info.Progress * .35f);
_view?.SetStatus($"正在下载资源… {info.CurrentDownloadCount}/{info.TotalDownloadCount}");
};
companionDownload.StartDownload();
yield return companionDownload;
if (companionDownload.Status != EOperationStatus.Succeeded)
@@ -209,7 +214,7 @@ namespace AOT.Patch
var packageVersion = pinnedVersion;
if (string.IsNullOrEmpty(packageVersion))
{
_view?.SetStatus($"请求{label}版本…");
_view?.SetStatus("正在检查资源…");
var versionOp = package.RequestPackageVersionAsync();
yield return versionOp;
if (versionOp.Status != EOperationStatus.Succeeded)
@@ -220,7 +225,7 @@ namespace AOT.Patch
packageVersion = versionOp.PackageVersion;
}
_view?.SetStatus($"更新{label}清单 {packageVersion}");
_view?.SetStatus("正在检查资源…");
var manifestOp = package.LoadPackageManifestAsync(new LoadPackageManifestOptions(packageVersion, 60));
yield return manifestOp;
if (manifestOp.Status != EOperationStatus.Succeeded)
@@ -0,0 +1,29 @@
using UnityEngine;
using UnityEngine.UI;
namespace AOT.UI
{
/// <summary>Fill the screen without stretching the portrait illustration.</summary>
[RequireComponent(typeof(Image))]
public sealed class BootArtworkCover : MonoBehaviour
{
void OnEnable() => Fit();
void LateUpdate() => Fit();
void OnRectTransformDimensionsChange() => Fit();
void Fit()
{
var image = GetComponent<Image>();
if (image == null || image.sprite == null || transform.parent == null) return;
var parent = transform.parent as RectTransform;
if (parent == null || parent.rect.width <= 0 || parent.rect.height <= 0) return;
var rect = (RectTransform)transform;
float aspect = image.sprite.rect.width / image.sprite.rect.height;
float width = Mathf.Max(parent.rect.width, parent.rect.height * aspect);
Vector2 size = new Vector2(width, width / aspect);
rect.anchorMin = rect.anchorMax = rect.pivot = new Vector2(.5f, .5f);
rect.anchoredPosition = Vector2.zero;
if ((rect.sizeDelta - size).sqrMagnitude > .01f) rect.sizeDelta = size;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a6c80e70df189694cb6c4d032daa6154
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+52 -106
View File
@@ -1,132 +1,78 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace AOT.UI
{
/// <summary>
/// 启动更新条(运行时生成,竖屏安全区友好)。
/// </summary>
/// <summary>Local JSON-authored loading screen, available before CDN initialization.</summary>
public sealed class BootPatchView : MonoBehaviour
{
Text _status;
Image _fill;
TMP_Text _status, _percentage;
RectTransform _fill;
CanvasGroup _group;
float _target, _shown;
public static BootPatchView Create()
public static BootPatchView Create(BootPatchView prefab)
{
var root = new GameObject("BootPatchUI");
DontDestroyOnLoad(root);
var canvasGo = new GameObject("Canvas");
canvasGo.transform.SetParent(root.transform, false);
var canvas = canvasGo.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.sortingOrder = 1000;
canvasGo.AddComponent<CanvasScaler>().uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
var scaler = canvasGo.GetComponent<CanvasScaler>();
scaler.referenceResolution = new Vector2(1080, 1920);
scaler.matchWidthOrHeight = 0.5f;
canvasGo.AddComponent<GraphicRaycaster>();
var bg = CreateUiObject("Background", canvasGo.transform);
var bgImage = bg.AddComponent<Image>();
bgImage.color = new Color(0.08f, 0.09f, 0.12f, 1f);
StretchFull(bg.GetComponent<RectTransform>());
var title = CreateUiObject("Title", canvasGo.transform);
var titleText = title.AddComponent<Text>();
titleText.font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
titleText.text = "AIGame";
titleText.alignment = TextAnchor.MiddleCenter;
titleText.fontSize = 64;
titleText.color = Color.white;
var titleRt = title.GetComponent<RectTransform>();
titleRt.anchorMin = new Vector2(0.1f, 0.62f);
titleRt.anchorMax = new Vector2(0.9f, 0.72f);
titleRt.offsetMin = Vector2.zero;
titleRt.offsetMax = Vector2.zero;
var statusGo = CreateUiObject("Status", canvasGo.transform);
var status = statusGo.AddComponent<Text>();
status.font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
status.text = "启动中…";
status.alignment = TextAnchor.MiddleCenter;
status.fontSize = 28;
status.color = new Color(0.85f, 0.88f, 0.92f, 1f);
var statusRt = statusGo.GetComponent<RectTransform>();
statusRt.anchorMin = new Vector2(0.1f, 0.42f);
statusRt.anchorMax = new Vector2(0.9f, 0.5f);
statusRt.offsetMin = Vector2.zero;
statusRt.offsetMax = Vector2.zero;
var barBg = CreateUiObject("ProgressBg", canvasGo.transform);
var barBgImage = barBg.AddComponent<Image>();
barBgImage.color = new Color(1f, 1f, 1f, 0.12f);
var barBgRt = barBg.GetComponent<RectTransform>();
barBgRt.anchorMin = new Vector2(0.15f, 0.36f);
barBgRt.anchorMax = new Vector2(0.85f, 0.39f);
barBgRt.offsetMin = Vector2.zero;
barBgRt.offsetMax = Vector2.zero;
var barFill = CreateUiObject("ProgressFill", barBg.transform);
var fill = barFill.AddComponent<Image>();
fill.color = new Color(0.35f, 0.75f, 0.55f, 1f);
var fillRt = barFill.GetComponent<RectTransform>();
fillRt.anchorMin = Vector2.zero;
fillRt.anchorMax = new Vector2(0f, 1f);
fillRt.offsetMin = Vector2.zero;
fillRt.offsetMax = Vector2.zero;
fillRt.pivot = new Vector2(0f, 0.5f);
var view = root.AddComponent<BootPatchView>();
view._status = status;
view._fill = fill;
if (prefab == null)
{
Debug.LogError("[Boot] Loading prefab missing; run BuildBootLoading.Build before exporting.");
return null;
}
var view = Instantiate(prefab);
DontDestroyOnLoad(view.gameObject);
return view;
}
void Awake()
{
_status = transform.Find("LoadingCard/Txt_Status").GetComponent<TMP_Text>();
_percentage = transform.Find("LoadingCard/Txt_Percentage").GetComponent<TMP_Text>();
_fill = transform.Find("LoadingCard/ProgressTrack/FillClip").GetComponent<RectTransform>();
_group = GetComponent<CanvasGroup>();
SetStatus("正在准备冒险…");
DrawProgress();
}
void Update()
{
_shown = Mathf.MoveTowards(_shown, _target, Time.unscaledDeltaTime * .65f);
DrawProgress();
}
void DrawProgress()
{
if (_fill != null) _fill.anchorMax = new Vector2(_shown, 1f);
if (_percentage != null) _percentage.text = Mathf.FloorToInt(_shown * 100f) + "%";
}
public void SetStatus(string text)
{
if (_status != null)
_status.text = text ?? string.Empty;
if (_status != null) _status.text = text ?? string.Empty;
}
public void SetProgress(float normalized01)
{
if (_fill == null) return;
float v = Mathf.Clamp01(normalized01);
var rt = _fill.rectTransform;
rt.anchorMax = new Vector2(v, 1f);
}
public void SetProgress(float normalized01) => _target = Mathf.Max(_target, Mathf.Clamp01(normalized01));
public void SetError(string message)
{
SetStatus(message);
if (_fill != null)
_fill.color = new Color(0.85f, 0.3f, 0.3f, 1f);
Debug.LogError("[Boot] " + message);
SetStatus("加载失败,请重新进入游戏");
if (_status != null) _status.color = new Color(.72f, .22f, .18f);
}
public void Hide()
public void Hide() => StartCoroutine(FadeOut());
System.Collections.IEnumerator FadeOut()
{
_shown = _target = 1f; DrawProgress();
yield return new WaitForSecondsRealtime(.12f);
for (float time = 0; time < .25f; time += Time.unscaledDeltaTime)
{
if (_group != null) _group.alpha = 1f - time / .25f;
yield return null;
}
gameObject.SetActive(false);
}
public void DestroyUi()
{
Destroy(gameObject);
}
static GameObject CreateUiObject(string name, Transform parent)
{
var go = new GameObject(name, typeof(RectTransform));
go.transform.SetParent(parent, false);
return go;
}
static void StretchFull(RectTransform rt)
{
rt.anchorMin = Vector2.zero;
rt.anchorMax = Vector2.one;
rt.offsetMin = Vector2.zero;
rt.offsetMax = Vector2.zero;
}
public void DestroyUi() => Destroy(gameObject);
}
}
+16 -1
View File
@@ -11,6 +11,7 @@ namespace AOT.UI
{
RectTransform _rect;
Vector2 _position;
Vector2 _offsetMin, _offsetMax;
bool _captured;
static readonly float[] NativeInsets = new float[4];
static int _frame = -1;
@@ -29,13 +30,19 @@ namespace AOT.UI
{
_rect = (RectTransform)transform;
_position = _rect.anchoredPosition;
_offsetMin = _rect.offsetMin;
_offsetMax = _rect.offsetMax;
_captured = true;
Apply(CurrentInsets());
}
void OnDisable()
{
if (_captured && _rect != null) _rect.anchoredPosition = _position;
if (_captured && _rect != null)
{
_rect.offsetMin = _offsetMin;
_rect.offsetMax = _offsetMax;
}
_captured = false;
}
@@ -44,6 +51,14 @@ namespace AOT.UI
void Apply(Vector4 inset)
{
if (!_captured || !(_rect.parent is RectTransform parent)) return;
// Full-screen authored containers shrink to the safe rectangle. Edge
// layouts retain the original offset behavior used by the camp HUD.
if (_rect.anchorMin == Vector2.zero && _rect.anchorMax == Vector2.one)
{
_rect.offsetMin = _offsetMin + new Vector2(parent.rect.width * inset.x, parent.rect.height * inset.y);
_rect.offsetMax = _offsetMax - new Vector2(parent.rect.width * inset.z, parent.rect.height * inset.w);
return;
}
Vector2 delta = Vector2.zero;
if (Mathf.Approximately(_rect.anchorMin.y, 1) && Mathf.Approximately(_rect.anchorMax.y, 1))
delta.y = -parent.rect.height * inset.w;
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: fb54f7259a693fd45a0afef6ab3af54e
guid: 9db0a60c7f3c25f4f90a7ebc68d220ae
folderAsset: yes
DefaultImporter:
externalObjects: {}
File diff suppressed because one or more lines are too long
@@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: 22af15bff8017a843be939f0d7c9d419
guid: 2a54075564ff57941b3f7f9f6bf9492c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2663e6198908123408a9973dedd6fd3d
guid: 6b6aac82fe2582d4e89a18c7a0b61d1a
PrefabImporter:
externalObjects: {}
userData:
+9 -1
View File
@@ -64,7 +64,15 @@ MonoBehaviour:
GroupDesc:
AssetTags: art
ActiveRuleName: EnableGroup
Collectors: []
Collectors:
- CollectPath: Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity
CollectorGUID: 1afb00dfe8573db4cb736f0e24677734
CollectorType: 0
AddressRuleName: AddressByFileName
PackRuleName: PackSeparately
FilterRuleName: CollectScene
AssetTags: art
UserData:
- GroupName: UI
GroupDesc: Candy UI
AssetTags: ui
@@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: 77ad4a31555342a5810bc7c1f2fee0a6
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects:
- first:
type: UnityEngine:Material
assembly: UnityEngine.CoreModule
name: caocao
second: {fileID: 2100000, guid: c16478692a534d41bbda3ea263134fda, type: 2}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 2
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 0
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,55 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: caocao
m_Shader: {fileID: 4800000, guid: cab897163f45445fa34263d6670bfc9e, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _MainTex:
m_Texture: {fileID: 2800000, guid: 12ad356bac8d4e90b6777f71878ea2f4, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MixTex:
m_Texture: {fileID: 2800000, guid: 96d5fd9e165149faa08e322dac4a2f1b, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AO: 1
- _AlphaTest: 0
- _Cutoff: 0.5
- _Metallic: 1
- _Roughness: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: c16478692a534d41bbda3ea263134fda
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
@@ -1,71 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &4280062417507299380
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalScale.x
value: 1.598659
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalScale.y
value: 1.598659
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalScale.z
value: 1.598659
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
propertyPath: m_Name
value: CaoCao
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 77ad4a31555342a5810bc7c1f2fee0a6, type: 3}
@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 40e3dbce20738724294812bf5b8fffaf
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

@@ -1,153 +0,0 @@
fileFormatVersion: 2
guid: 12ad356bac8d4e90b6777f71878ea2f4
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 1024
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 12
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 51
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

@@ -1,153 +0,0 @@
fileFormatVersion: 2
guid: 96d5fd9e165149faa08e322dac4a2f1b
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 1024
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 12
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 51
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4a88bc667d57a5f42982d2a3b1a882de
guid: 4269ec48f87904e4fa025f4b06febe55
folderAsset: yes
DefaultImporter:
externalObjects: {}
@@ -0,0 +1,223 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-8430333310564153894
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: Motion
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 545819560583968937}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-7762721556164551924
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: isMoving
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 545819560583968937}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1101 &-6493051392185512440
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: isMoving
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6028046157939518827}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-6028046157939518827
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Walk
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -7762721556164551924}
- {fileID: -8430333310564153894}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1235213234022721315, guid: 85ead671556b11b4090b07f950c63265, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Explorer
serializedVersion: 5
m_AnimatorParameters:
- m_Name: isMoving
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: speed
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: Motion
m_Type: 3
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 813577267777459335}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &545819560583968937
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Idle
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: -6493051392185512440}
- {fileID: 4037924068624357672}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1235213234022721315, guid: a1c88b225b537ae43b530f8a4fafe3e6, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &813577267777459335
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 545819560583968937}
m_Position: {x: 200, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: -6028046157939518827}
m_Position: {x: 235, y: 65, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 545819560583968937}
--- !u!1101 &4037924068624357672
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 6
m_ConditionEvent: Motion
m_EventTreshold: 1
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -6028046157939518827}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.15
m_TransitionOffset: 0
m_ExitTime: 0.9
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
@@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: 98606ad2f4821714d94a4e87afcf1631
guid: 2569e0a8cbb1c0d48b1a33f05b869e48
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,771 @@
fileFormatVersion: 2
guid: c66b44000c3fb9a4f95e5a696730b2f3
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 0
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 0
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips:
- a1c88b225b537ae43b530f8a4fafe3e6
- 85ead671556b11b4090b07f950c63265
importAnimation: 1
humanDescription:
serializedVersion: 3
human:
- boneName: mixamorig:Hips
humanName: Hips
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftUpLeg
humanName: LeftUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightUpLeg
humanName: RightUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftLeg
humanName: LeftLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightLeg
humanName: RightLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftFoot
humanName: LeftFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightFoot
humanName: RightFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine
humanName: Spine
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine1
humanName: Chest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Neck
humanName: Neck
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Head
humanName: Head
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftShoulder
humanName: LeftShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightShoulder
humanName: RightShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftArm
humanName: LeftUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightArm
humanName: RightUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftForeArm
humanName: LeftLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightForeArm
humanName: RightLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHand
humanName: LeftHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHand
humanName: RightHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftToeBase
humanName: LeftToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightToeBase
humanName: RightToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb1
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb2
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb3
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex1
humanName: Left Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex2
humanName: Left Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex3
humanName: Left Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle1
humanName: Left Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle2
humanName: Left Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle3
humanName: Left Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb1
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb2
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb3
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex1
humanName: Right Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex2
humanName: Right Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex3
humanName: Right Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle1
humanName: Right Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle2
humanName: Right Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle3
humanName: Right Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine2
humanName: UpperChest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
skeleton:
- name: Explorer(Clone)
parentName:
position: {x: 0, y: 0, z: 0}
rotation: {x: 0, y: 0, z: 0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: Armature
parentName: Explorer(Clone)
position: {x: -0.22224486, y: -102.89659, z: -0.41833967}
rotation: {x: -0.00000014106499, y: -0, z: 0, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205045}
- name: mixamorig:Hips
parentName: Armature
position: {x: -0.37022263, y: 185.89287, z: 5.003476}
rotation: {x: -0.0077544115, y: -0.9993307, z: 0.035183605, w: 0.0063408096}
scale: {x: 0.9999997, y: 1, z: 0.99999994}
- name: mixamorig:LeftUpLeg
parentName: mixamorig:Hips
position: {x: 10.328106, y: -5.566781, z: -1.0677642}
rotation: {x: 0.0033447745, y: -0.015342032, z: 0.99833155, w: -0.05556624}
scale: {x: 1.0000159, y: 0.99999976, z: 1.000001}
- name: mixamorig:LeftLeg
parentName: mixamorig:LeftUpLeg
position: {x: -0.00003528269, y: 27.963875, z: -0.000029556453}
rotation: {x: 0.10019777, y: -0.007315265, z: -0.004477953, w: 0.9949306}
scale: {x: 0.9999998, y: 1.0000002, z: 0.9999998}
- name: mixamorig:LeftFoot
parentName: mixamorig:LeftLeg
position: {x: -0.00003734976, y: 34.82838, z: -0.000027887523}
rotation: {x: -0.44087952, y: 0.07572686, z: 0.05847374, w: 0.89245254}
scale: {x: 1.0000002, y: 0.9999997, z: 0.99999976}
- name: mixamorig:LeftToeBase
parentName: mixamorig:LeftFoot
position: {x: -0.00006151199, y: 23.489967, z: -0.00012715161}
rotation: {x: -0.22674958, y: 0.07703583, z: -0.025775313, w: 0.9705595}
scale: {x: 0.9999996, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftToe_End
parentName: mixamorig:LeftToeBase
position: {x: 0.000027706847, y: 14.941516, z: -0.00008380413}
rotation: {x: 0.00000020021156, y: -0.045787185, z: 0.00000011170127, w: 0.99895126}
scale: {x: 0.9999995, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightUpLeg
parentName: mixamorig:Hips
position: {x: -10.156085, y: -5.239155, z: -1.4343863}
rotation: {x: -0.002507165, y: -0.006057601, z: 0.9966414, w: 0.08162729}
scale: {x: 0.99999815, y: 0.99999976, z: 0.99999976}
- name: mixamorig:RightLeg
parentName: mixamorig:RightUpLeg
position: {x: -0.00011272775, y: 27.922354, z: -0.000013910234}
rotation: {x: 0.10649346, y: 0.00808772, z: 0.019622283, w: 0.99408686}
scale: {x: 0.99999994, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightFoot
parentName: mixamorig:RightLeg
position: {x: 0.000028405339, y: 34.48488, z: -0.00002834946}
rotation: {x: -0.4614528, y: -0.07204718, z: -0.057600323, w: 0.88235635}
scale: {x: 0.99999964, y: 1.0000001, z: 0.99999976}
- name: mixamorig:RightToeBase
parentName: mixamorig:RightFoot
position: {x: -0.0000056624413, y: 24.702417, z: -0.00011065602}
rotation: {x: -0.22683857, y: -0.074058376, z: 0.0250654, w: 0.970789}
scale: {x: 0.9999999, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightToe_End
parentName: mixamorig:RightToeBase
position: {x: 0.000056739897, y: 15.71241, z: -0.00015437603}
rotation: {x: -0.00000016161842, y: 0.043130457, z: 0.00000004328857, w: 0.99906945}
scale: {x: 1.0000002, y: 1, z: 1.0000002}
- name: mixamorig:Spine
parentName: mixamorig:Hips
position: {x: 0.00091801584, y: 10.611319, z: 1.3123938}
rotation: {x: -0.010846658, y: 0.0011588212, z: -0.02218634, w: 0.99969435}
scale: {x: 0.9999998, y: 0.9999997, z: 0.9999999}
- name: mixamorig:Spine1
parentName: mixamorig:Spine
position: {x: -0.000003375113, y: 9.583546, z: 0.000008546078}
rotation: {x: -0.09751832, y: -0.0015901525, z: 0.005564505, w: 0.9952169}
scale: {x: 0.99999976, y: 0.9999999, z: 0.9999995}
- name: mixamorig:Spine2
parentName: mixamorig:Spine1
position: {x: -0.000005631009, y: 10.359138, z: 0.000001600667}
rotation: {x: -0.00808515, y: -0.0012169554, z: 0.008934945, w: 0.9999267}
scale: {x: 0.9999996, y: 0.99999964, z: 0.99999994}
- name: mixamorig:LeftShoulder
parentName: mixamorig:Spine2
position: {x: 7.2941895, y: 13.212873, z: 0.30226445}
rotation: {x: 0.52343285, y: 0.35363355, z: 0.6195093, w: -0.46601474}
scale: {x: 0.99999976, y: 1.0000004, z: 1.0000001}
- name: mixamorig:LeftArm
parentName: mixamorig:LeftShoulder
position: {x: -0.000025302172, y: 14.741706, z: 0.00020119548}
rotation: {x: 0.14050621, y: -0.01130807, z: -0.008126807, w: 0.9899819}
scale: {x: 1.0000001, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftForeArm
parentName: mixamorig:LeftArm
position: {x: 0.000062942505, y: 17.352673, z: -0.000041484833}
rotation: {x: 0.030211665, y: -0.10134714, z: 0.036751796, w: 0.99371296}
scale: {x: 0.99999994, y: 0.9999997, z: 0.9999999}
- name: mixamorig:LeftHand
parentName: mixamorig:LeftForeArm
position: {x: 0.0000019073486, y: 19.14441, z: 0.00013247132}
rotation: {x: 0.017002419, y: 0.021385837, z: -0.052845035, w: 0.9982289}
scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandIndex1
parentName: mixamorig:LeftHand
position: {x: -2.3528287, y: 11.235652, z: 0.14606142}
rotation: {x: -0.054718453, y: -0.04174417, z: 0.057684414, w: 0.99595976}
scale: {x: 0.99999964, y: 0.9999998, z: 0.9999999}
- name: mixamorig:LeftHandIndex2
parentName: mixamorig:LeftHandIndex1
position: {x: -0.000010594726, y: 3.4837224, z: 0.000021535903}
rotation: {x: -0.032173194, y: 0.053949524, z: -0.0027717839, w: 0.99802136}
scale: {x: 1, y: 0.9999999, z: 0.9999999}
- name: mixamorig:LeftHandIndex3
parentName: mixamorig:LeftHandIndex2
position: {x: -0.0000050365925, y: 2.345203, z: 0.000020261854}
rotation: {x: 0.00000005681067, y: 0.0000016060656, z: -0.00000012875535, w: 1}
scale: {x: 1.0000001, y: 1, z: 1.0000002}
- name: mixamorig:LeftHandIndex4
parentName: mixamorig:LeftHandIndex3
position: {x: -0.00000071525574, y: 2.1136672, z: -0.0000115484}
rotation: {x: -0.0000013406499, y: -0.00400092, z: 0.000022799893, w: 0.999992}
scale: {x: 0.99999964, y: 0.99999994, z: 0.99999964}
- name: mixamorig:LeftHandMiddle1
parentName: mixamorig:LeftHand
position: {x: 0.0000011920929, y: 10.15485, z: 0.0000282228}
rotation: {x: -0.07176159, y: 0.03636886, z: -0.03320395, w: 0.9962054}
scale: {x: 1, y: 1.0000002, z: 0.9999999}
- name: mixamorig:LeftHandMiddle2
parentName: mixamorig:LeftHandMiddle1
position: {x: 0.000011920929, y: 2.60725, z: -0.000008754432}
rotation: {x: -0.02873752, y: 0.0013733126, z: -0.0018853699, w: 0.99958426}
scale: {x: 0.9999998, y: 0.99999976, z: 0.9999997}
- name: mixamorig:LeftHandMiddle3
parentName: mixamorig:LeftHandMiddle2
position: {x: 0.00001835823, y: 1.9381287, z: -0.000014454126}
rotation: {x: -0.00000045890914, y: -0.00001067808, z: -0.000000084633946, w: 1}
scale: {x: 0.99999976, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandMiddle4
parentName: mixamorig:LeftHandMiddle3
position: {x: -0.00001859665, y: 2.0616395, z: 0.0000028908253}
rotation: {x: 0.00000085839673, y: -0.00456493, z: -0.0006540946, w: 0.9999894}
scale: {x: 1, y: 1.0000001, z: 1}
- name: mixamorig:LeftHandPinky1
parentName: mixamorig:LeftHand
position: {x: 5.643331, y: 8.544061, z: -0.99322236}
rotation: {x: -0.15816844, y: 0.13910672, z: -0.3114301, w: 0.92663014}
scale: {x: 0.9999999, y: 1, z: 0.99999976}
- name: mixamorig:LeftHandPinky2
parentName: mixamorig:LeftHandPinky1
position: {x: 0.000024795532, y: 2.1991758, z: -0.000017404556}
rotation: {x: -0.37169924, y: -0.083060764, z: -0.084571935, w: 0.9207542}
scale: {x: 1, y: 1.0000001, z: 0.99999994}
- name: mixamorig:LeftHandPinky3
parentName: mixamorig:LeftHandPinky2
position: {x: -0.0000019073486, y: 1.2725241, z: 0.00000047683716}
rotation: {x: -0.0000051520815, y: -0.000703283, z: 0.00022744403, w: 0.99999976}
scale: {x: 0.9999999, y: 0.99999934, z: 0.9999997}
- name: mixamorig:LeftHandPinky4
parentName: mixamorig:LeftHandPinky3
position: {x: 0.000002861023, y: 1.433846, z: 0.00000047683716}
rotation: {x: 0.00000056997226, y: -0.0033962335, z: -0.00057017396, w: 0.9999941}
scale: {x: 1.0000001, y: 1.0000002, z: 1.0000001}
- name: mixamorig:LeftHandRing1
parentName: mixamorig:LeftHand
position: {x: 3.4467816, y: 10.646177, z: -0.1370104}
rotation: {x: -0.19365133, y: 0.11488885, z: -0.24944218, w: 0.9418484}
scale: {x: 0.99999976, y: 1, z: 0.9999998}
- name: mixamorig:LeftHandRing2
parentName: mixamorig:LeftHandRing1
position: {x: 0.0000166893, y: 2.6675563, z: 0.000017642975}
rotation: {x: -0.39969337, y: -0.09811549, z: -0.023844322, w: 0.9110708}
scale: {x: 0.9999999, y: 0.99999976, z: 0.99999994}
- name: mixamorig:LeftHandRing3
parentName: mixamorig:LeftHandRing2
position: {x: 0.00000047683716, y: 1.4622104, z: 0.0000009536743}
rotation: {x: -0.00000046379867, y: -0.000011667611, z: 0.0000015534463, w: 1}
scale: {x: 0.9999998, y: 1, z: 0.9999999}
- name: mixamorig:LeftHandRing4
parentName: mixamorig:LeftHandRing3
position: {x: -0.0000076293945, y: 1.6181933, z: -0.0000030994415}
rotation: {x: -0.0000088189345, y: -0.0073851123, z: 0.000769383, w: 0.99997246}
scale: {x: 1, y: 1.0000001, z: 0.9999998}
- name: mixamorig:LeftHandThumb1
parentName: mixamorig:LeftHand
position: {x: -4.002627, y: 2.7676365, z: -2.7068107}
rotation: {x: -0.020715237, y: 0.002581247, z: 0.37198743, w: 0.9280031}
scale: {x: 0.99999964, y: 1, z: 1}
- name: mixamorig:LeftHandThumb2
parentName: mixamorig:LeftHandThumb1
position: {x: 0.0000017285347, y: 2.3402648, z: -0.00005042553}
rotation: {x: 0.01564876, y: 0.026597274, z: -0.037198465, w: 0.99883133}
scale: {x: 0.9999999, y: 0.9999998, z: 0.99999964}
- name: mixamorig:LeftHandThumb3
parentName: mixamorig:LeftHandThumb2
position: {x: 0.000017285347, y: 2.623814, z: -0.0000042915344}
rotation: {x: 0.000002025627, y: -0.0000027362257, z: -0.00000034621922, w: 1}
scale: {x: 1, y: 0.9999997, z: 1}
- name: mixamorig:LeftHandThumb4
parentName: mixamorig:LeftHandThumb3
position: {x: -0.0000042915344, y: 2.0711527, z: -0.000006556511}
rotation: {x: -0.009147552, y: -0.12563689, z: 0.07207275, w: 0.98941255}
scale: {x: 0.99999994, y: 1.0000001, z: 0.99999976}
- name: mixamorig:Neck
parentName: mixamorig:Spine2
position: {x: 0.000032656942, y: 15.764623, z: -0.92092884}
rotation: {x: 0.1471445, y: -0.0059806914, z: -0.027730837, w: 0.98870814}
scale: {x: 1, y: 0.99999976, z: 0.9999999}
- name: mixamorig:Head
parentName: mixamorig:Neck
position: {x: 0.0000044247136, y: 9.739595, z: -2.9651532}
rotation: {x: 0.00000035431032, y: -0.0012969822, z: 0.00046576455, w: 0.99999905}
scale: {x: 1.0000001, y: 1.0000004, z: 1.0000004}
- name: mixamorig:HeadTop_End
parentName: mixamorig:Head
position: {x: 0.00014453381, y: 17.432362, z: -6.262025}
rotation: {x: -0.0000002012822, y: 0.0012969673, z: -0.0004658182, w: 0.99999905}
scale: {x: 0.99999994, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightShoulder
parentName: mixamorig:Spine2
position: {x: -7.434908, y: 13.363748, z: -0.4082315}
rotation: {x: -0.5197783, y: 0.35377866, z: 0.62096524, w: 0.4680528}
scale: {x: 0.9999996, y: 0.99999976, z: 0.9999999}
- name: mixamorig:RightArm
parentName: mixamorig:RightShoulder
position: {x: -0.000024974346, y: 14.493169, z: -0.0001656264}
rotation: {x: 0.13736127, y: 0.007831869, z: -0.00560735, w: 0.99047416}
scale: {x: 0.9999999, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightForeArm
parentName: mixamorig:RightArm
position: {x: 0.000031471252, y: 17.529053, z: 0.00007927418}
rotation: {x: 0.022670321, y: 0.11665267, z: -0.03965164, w: 0.99212193}
scale: {x: 1, y: 0.9999998, z: 1}
- name: mixamorig:RightHand
parentName: mixamorig:RightForeArm
position: {x: 0.00015211105, y: 19.027824, z: 0.000030636787}
rotation: {x: 0.0015444822, y: -0.03999891, z: 0.0872909, w: 0.9953784}
scale: {x: 0.9999998, y: 0.9999998, z: 0.9999998}
- name: mixamorig:RightHandIndex1
parentName: mixamorig:RightHand
position: {x: 2.345358, y: 12.045544, z: 0.7880449}
rotation: {x: -0.075189136, y: 0.01748997, z: -0.030210292, w: 0.99655807}
scale: {x: 0.99999994, y: 1, z: 0.9999998}
- name: mixamorig:RightHandIndex2
parentName: mixamorig:RightHandIndex1
position: {x: -0.0000033974648, y: 3.3267603, z: -0.000010676682}
rotation: {x: -0.036287162, y: -0.007182504, z: -0.0024840003, w: 0.9993125}
scale: {x: 0.99999976, y: 0.9999998, z: 1.0000002}
- name: mixamorig:RightHandIndex3
parentName: mixamorig:RightHandIndex2
position: {x: -0.000007033348, y: 1.7658211, z: -0.0000016093254}
rotation: {x: 0.00000004540199, y: 0.0000026877976, z: -0.00000047450888, w: 1}
scale: {x: 1, y: 0.99999994, z: 0.9999995}
- name: mixamorig:RightHandIndex4
parentName: mixamorig:RightHandIndex3
position: {x: -0.0000030398369, y: 1.591484, z: -0.0000035576522}
rotation: {x: 0.00007005317, y: 0.0067081554, z: 0.0013750611, w: 0.9999766}
scale: {x: 1.0000001, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle1
parentName: mixamorig:RightHand
position: {x: -0.00000047683716, y: 9.905703, z: -0.000008247793}
rotation: {x: -0.045294553, y: -0.06024597, z: 0.06547363, w: 0.9950036}
scale: {x: 0.99999994, y: 0.9999999, z: 0.9999997}
- name: mixamorig:RightHandMiddle2
parentName: mixamorig:RightHandMiddle1
position: {x: 0.000015258789, y: 2.1841674, z: 0.000040650368}
rotation: {x: -0.028868191, y: 0.07864306, z: -0.009304003, w: 0.9964414}
scale: {x: 0.9999998, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle3
parentName: mixamorig:RightHandMiddle2
position: {x: -0.000009261072, y: 1.1954373, z: -0.000009826152}
rotation: {x: 0.0000027485473, y: 0.00002192554, z: -0.00000014595753, w: 1}
scale: {x: 1.0000001, y: 1, z: 0.99999994}
- name: mixamorig:RightHandMiddle4
parentName: mixamorig:RightHandMiddle3
position: {x: 0.000009782612, y: 1.2880814, z: 0.000013801968}
rotation: {x: 0.00005137304, y: 0.006674174, z: -0.00170813, w: 0.9999763}
scale: {x: 0.99999994, y: 1, z: 0.9999999}
- name: mixamorig:RightHandPinky1
parentName: mixamorig:RightHand
position: {x: -4.68492, y: 9.301639, z: -0.6039194}
rotation: {x: -0.14660129, y: -0.16896184, z: 0.35809296, w: 0.9064929}
scale: {x: 0.9999999, y: 0.9999999, z: 0.9999999}
- name: mixamorig:RightHandPinky2
parentName: mixamorig:RightHandPinky1
position: {x: -0.0000014305115, y: 2.36758, z: 0.00000047683716}
rotation: {x: -0.24648736, y: 0.03440386, z: 0.12497026, w: 0.96043885}
scale: {x: 1, y: 1.0000002, z: 1.0000002}
- name: mixamorig:RightHandPinky3
parentName: mixamorig:RightHandPinky2
position: {x: 0.00000333786, y: 0.9927621, z: -0.0000023841858}
rotation: {x: 0.000018970582, y: 0.000065798646, z: -0.000026483096, w: 1}
scale: {x: 1, y: 0.99999946, z: 0.99999976}
- name: mixamorig:RightHandPinky4
parentName: mixamorig:RightHandPinky3
position: {x: 0.0000038146973, y: 1.1186066, z: -0.0000017881393}
rotation: {x: 0.000065763204, y: 0.008447872, z: 0.0022266835, w: 0.99996185}
scale: {x: 0.99999994, y: 1, z: 0.9999997}
- name: mixamorig:RightHandRing1
parentName: mixamorig:RightHand
position: {x: -2.9535933, y: 11.074583, z: 0.22817631}
rotation: {x: -0.1565983, y: -0.1363093, z: 0.2862314, w: 0.93539745}
scale: {x: 0.9999999, y: 0.99999964, z: 0.99999994}
- name: mixamorig:RightHandRing2
parentName: mixamorig:RightHandRing1
position: {x: 0.000024795532, y: 2.4419715, z: 0.0000104904175}
rotation: {x: -0.35058558, y: 0.10631899, z: 0.03226305, w: 0.92991674}
scale: {x: 0.9999998, y: 1.0000001, z: 1}
- name: mixamorig:RightHandRing3
parentName: mixamorig:RightHandRing2
position: {x: 0.0000009536743, y: 1.2144601, z: 0.00000500679}
rotation: {x: -0.0000008456409, y: 0.000017533077, z: -0.00000009126963, w: 1}
scale: {x: 1, y: 0.99999964, z: 1.0000002}
- name: mixamorig:RightHandRing4
parentName: mixamorig:RightHandRing3
position: {x: 0.000022888184, y: 1.344063, z: -0.00000500679}
rotation: {x: 0.000059993825, y: 0.007596232, z: -0.00030074958, w: 0.9999711}
scale: {x: 0.99999976, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb1
parentName: mixamorig:RightHand
position: {x: 4.157431, y: 3.805054, z: -3.3176646}
rotation: {x: -0.01654432, y: 0.03541527, z: -0.37525043, w: 0.92609894}
scale: {x: 0.9999999, y: 0.99999994, z: 1.0000001}
- name: mixamorig:RightHandThumb2
parentName: mixamorig:RightHandThumb1
position: {x: 0.000026881695, y: 2.482547, z: 0.000012814999}
rotation: {x: 0.023514528, y: -0.030231565, z: 0.029939556, w: 0.9988177}
scale: {x: 0.9999999, y: 0.99999946, z: 0.9999998}
- name: mixamorig:RightHandThumb3
parentName: mixamorig:RightHandThumb2
position: {x: 0.00000023841858, y: 2.505015, z: 0.000007033348}
rotation: {x: 0.000003868715, y: -0.00001448952, z: 0.000001148321, w: 1}
scale: {x: 0.9999998, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb4
parentName: mixamorig:RightHandThumb3
position: {x: 0.00000333786, y: 1.977331, z: 0.000003695488}
rotation: {x: -0.009236776, y: 0.12714589, z: -0.0723294, w: 0.98920023}
scale: {x: 1, y: 1.0000001, z: 1.0000004}
- name: LowPolyTarget
parentName: Explorer(Clone)
position: {x: -0.22224468, y: -102.89658, z: -0.41834378}
rotation: {x: -0.00000014233132, y: -0.000000009803429, z: 0.0000000032083953, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205042}
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -7,7 +7,7 @@ Material:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: lmgirl
m_Name: Explorer
m_Shader: {fileID: 4800000, guid: cab897163f45445fa34263d6670bfc9e, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
@@ -24,11 +24,11 @@ Material:
serializedVersion: 3
m_TexEnvs:
- _MainTex:
m_Texture: {fileID: 2800000, guid: b36458a718134fd4ad93427442fe9661, type: 3}
m_Texture: {fileID: 2800000, guid: 79a6c1f669a17854cb2fe44ef92a5b6c, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MixTex:
m_Texture: {fileID: 2800000, guid: e59d0920302543a5a08ee7a020cdeae2, type: 3}
m_Texture: {fileID: 2800000, guid: 2e0c9d2ee85d7d744a53bd31d826c6b0, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
@@ -48,8 +48,8 @@ Material:
- _AO: 1
- _AlphaTest: 0
- _Cutoff: 0.5
- _Metallic: 1
- _Roughness: 1
- _Metallic: 0.8
- _Roughness: 0.6
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 144a3f1917e54be4bb582fde53d5514f
guid: a887654401357ad43b4a5a25fb3d26fe
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
@@ -0,0 +1,408 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &4019478702672016213
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8969417572210971711, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -8707241393673669972, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -8699787447509501512, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalScale.x
value: 0.006808229
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalScale.y
value: 0.006808229
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalScale.z
value: 0.006808229
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8236615327842799068, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -8175127548591214388, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -8139853090755257685, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -7787388127012054652, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -7774620517717459388, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -7484682678926922151, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -7037130781614892758, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -6851848838197607830, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -6360735721235083178, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -6116727749810235759, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -6093313921892373013, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -5956947741087532221, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -5576653895936096725, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -5424213705957445524, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -5370524573826645861, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -4501201811031430588, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -3842908045289527126, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -3638193520734090830, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -3337561737397323663, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -2598182969042596370, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -2453550708452717748, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -2179259875690042104, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -2141135503258565833, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -2025596174578173375, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1930578328450875381, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1731024231264914805, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1693546492923637869, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1322763434854513700, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1107101525102980484, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1091752635582583252, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -1033859536177898853, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -641257812432895841, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: -245923178546811969, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 858333051699750469, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 879379824694670369, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Name
value: Explorer
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 1166754175604888097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 1617399745748130172, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2085122041757578371, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2430876001099946699, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2464098630957027937, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2550471778959469217, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2657195002283232437, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2742706977199014367, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 2987213404974779512, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 3564418365523092104, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: a887654401357ad43b4a5a25fb3d26fe, type: 2}
- target: {fileID: 3897462237488877691, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 3974671095192526231, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 4108234674411243596, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 4280359472741655279, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 4311629582287283170, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 5470694928252452566, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 5866666021909216657, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Controller
value:
objectReference: {fileID: 9100000, guid: 2569e0a8cbb1c0d48b1a33f05b869e48, type: 2}
- target: {fileID: 5866666021909216657, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_ApplyRootMotion
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6386480451222621022, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 6499889929296628410, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 6534160855740820065, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 6584186306538760244, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 7036213049465896255, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 7205873384925501923, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 7246596530385515141, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 7372134353506958267, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 7891850266450665243, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 8040335284366698663, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 8352526780231734871, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 8493651545096302793, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 8916979045543815761, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
- target: {fileID: 9088872756827976528, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
propertyPath: m_Layer
value: 29
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
insertIndex: -1
addedObject: {fileID: 5687293864336007707}
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
insertIndex: -1
addedObject: {fileID: 1923126857674387657}
m_SourcePrefab: {fileID: 100100000, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
--- !u!1 &4254044867384987140 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
m_PrefabInstance: {fileID: 4019478702672016213}
m_PrefabAsset: {fileID: 0}
--- !u!114 &5687293864336007707
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4254044867384987140}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 56e097e35ae00204cb39f05183b5c317, type: 3}
m_Name:
m_EditorClassIdentifier:
moveSpeed: 3.2
turnSpeed: 720
stopDistance: 0.12
minX: -10
maxX: 10
minZ: -14
maxZ: 12
--- !u!136 &1923126857674387657
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4254044867384987140}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.35
m_Height: 1.6
m_Direction: 1
m_Center: {x: 0, y: 0.8, z: 0}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0c2240a454234d44aa7c8a19e9b90a35
guid: b4ed9c22dd0eb9940a8f50bc9180155f
PrefabImporter:
externalObjects: {}
userData:
@@ -0,0 +1,827 @@
fileFormatVersion: 2
guid: a1c88b225b537ae43b530f8a4fafe3e6
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings: "Copied Avatar Rig Configuration mis-match. Bone length in
copied configuration does not match position in animation file:\n\t'mixamorig:LeftUpLeg'
: position error = 126.925934 mm\n\t'mixamorig:LeftLeg' : position error =
296.604736 mm\n\t'mixamorig:LeftFoot' : position error = 369.414795 mm\n\t'mixamorig:LeftToeBase'
: position error = 249.151398 mm\n\t'mixamorig:RightUpLeg' : position error
= 124.123772 mm\n\t'mixamorig:RightLeg' : position error = 296.164429 mm\n\t'mixamorig:RightFoot'
: position error = 365.771149 mm\n\t'mixamorig:RightToeBase' : position error
= 262.011444 mm\n\t'mixamorig:Spine' : position error = 113.443565 mm\n\t'mixamorig:Spine1'
: position error = 101.649849 mm\n\t'mixamorig:Spine2' : position error = 109.876320
mm\n\t'mixamorig:LeftShoulder' : position error = 160.876755 mm\n\t'mixamorig:LeftArm'
: position error = 156.360962 mm\n\t'mixamorig:LeftForeArm' : position error
= 184.054688 mm\n\t'mixamorig:LeftHand' : position error = 203.059158 mm\n\t'mixamorig:LeftHandIndex1'
: position error = 121.872726 mm\n\t'mixamorig:LeftHandIndex2' : position error
= 36.950809 mm\n\t'mixamorig:LeftHandIndex3' : position error = 24.874905 mm\n\t'mixamorig:LeftHandMiddle1'
: position error = 107.709526 mm\n\t'mixamorig:LeftHandMiddle2' : position
error = 27.654367 mm\n\t'mixamorig:LeftHandMiddle3' : position error = 20.557148
mm\n\t'mixamorig:LeftHandThumb1' : position error = 59.963577 mm\n\t'mixamorig:LeftHandThumb2'
: position error = 24.822493 mm\n\t'mixamorig:LeftHandThumb3' : position error
= 27.830009 mm\n\t'mixamorig:Neck' : position error = 167.507416 mm\n\t'mixamorig:Head'
: position error = 108.173225 mm\n\t'mixamorig:RightShoulder' : position error
= 163.045776 mm\n\t'mixamorig:RightArm' : position error = 153.724777 mm\n\t'mixamorig:RightForeArm'
: position error = 185.925476 mm\n\t'mixamorig:RightHand' : position error
= 201.822510 mm\n\t'mixamorig:RightHandIndex1' : position error = 130.538574
mm\n\t'mixamorig:RightHandIndex2' : position error = 35.285988 mm\n\t'mixamorig:RightHandIndex3'
: position error = 18.729544 mm\n\t'mixamorig:RightHandMiddle1' : position
error = 105.066795 mm\n\t'mixamorig:RightHandMiddle2' : position error = 23.166794
mm\n\t'mixamorig:RightHandMiddle3' : position error = 12.679689 mm\n\t'mixamorig:RightHandThumb1'
: position error = 70.296295 mm\n\t'mixamorig:RightHandThumb2' : position error
= 26.331659 mm\n\t'mixamorig:RightHandThumb3' : position error = 26.569925
mm\n"
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations:
- serializedVersion: 16
name: Idle
takeName: Armature|Scene
internalID: 1235213234022721315
firstFrame: 0
lastFrame: 0
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 1
loopBlendOrientation: 1
loopBlendPositionY: 1
loopBlendPositionXZ: 1
keepOriginalOrientation: 0
keepOriginalPositionY: 0
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human:
- boneName: mixamorig:Hips
humanName: Hips
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftUpLeg
humanName: LeftUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightUpLeg
humanName: RightUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftLeg
humanName: LeftLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightLeg
humanName: RightLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftFoot
humanName: LeftFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightFoot
humanName: RightFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine
humanName: Spine
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine1
humanName: Chest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Neck
humanName: Neck
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Head
humanName: Head
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftShoulder
humanName: LeftShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightShoulder
humanName: RightShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftArm
humanName: LeftUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightArm
humanName: RightUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftForeArm
humanName: LeftLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightForeArm
humanName: RightLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHand
humanName: LeftHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHand
humanName: RightHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftToeBase
humanName: LeftToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightToeBase
humanName: RightToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb1
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb2
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb3
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex1
humanName: Left Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex2
humanName: Left Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex3
humanName: Left Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle1
humanName: Left Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle2
humanName: Left Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle3
humanName: Left Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb1
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb2
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb3
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex1
humanName: Right Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex2
humanName: Right Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex3
humanName: Right Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle1
humanName: Right Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle2
humanName: Right Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle3
humanName: Right Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine2
humanName: UpperChest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
skeleton:
- name: Explorer(Clone)
parentName:
position: {x: 0, y: 0, z: 0}
rotation: {x: 0, y: 0, z: 0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: Armature
parentName: Explorer(Clone)
position: {x: -0.22224486, y: -102.89659, z: -0.41833967}
rotation: {x: -0.00000014106499, y: -0, z: 0, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205045}
- name: mixamorig:Hips
parentName: Armature
position: {x: -0.37022263, y: 185.89287, z: 5.003476}
rotation: {x: -0.0077544115, y: -0.9993307, z: 0.035183605, w: 0.0063408096}
scale: {x: 0.9999997, y: 1, z: 0.99999994}
- name: mixamorig:LeftUpLeg
parentName: mixamorig:Hips
position: {x: 10.328106, y: -5.566781, z: -1.0677642}
rotation: {x: 0.0033447745, y: -0.015342032, z: 0.99833155, w: -0.05556624}
scale: {x: 1.0000159, y: 0.99999976, z: 1.000001}
- name: mixamorig:LeftLeg
parentName: mixamorig:LeftUpLeg
position: {x: -0.00003528269, y: 27.963875, z: -0.000029556453}
rotation: {x: 0.10019777, y: -0.007315265, z: -0.004477953, w: 0.9949306}
scale: {x: 0.9999998, y: 1.0000002, z: 0.9999998}
- name: mixamorig:LeftFoot
parentName: mixamorig:LeftLeg
position: {x: -0.00003734976, y: 34.82838, z: -0.000027887523}
rotation: {x: -0.44087952, y: 0.07572686, z: 0.05847374, w: 0.89245254}
scale: {x: 1.0000002, y: 0.9999997, z: 0.99999976}
- name: mixamorig:LeftToeBase
parentName: mixamorig:LeftFoot
position: {x: -0.00006151199, y: 23.489967, z: -0.00012715161}
rotation: {x: -0.22674958, y: 0.07703583, z: -0.025775313, w: 0.9705595}
scale: {x: 0.9999996, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftToe_End
parentName: mixamorig:LeftToeBase
position: {x: 0.000027706847, y: 14.941516, z: -0.00008380413}
rotation: {x: 0.00000020021156, y: -0.045787185, z: 0.00000011170127, w: 0.99895126}
scale: {x: 0.9999995, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightUpLeg
parentName: mixamorig:Hips
position: {x: -10.156085, y: -5.239155, z: -1.4343863}
rotation: {x: -0.002507165, y: -0.006057601, z: 0.9966414, w: 0.08162729}
scale: {x: 0.99999815, y: 0.99999976, z: 0.99999976}
- name: mixamorig:RightLeg
parentName: mixamorig:RightUpLeg
position: {x: -0.00011272775, y: 27.922354, z: -0.000013910234}
rotation: {x: 0.10649346, y: 0.00808772, z: 0.019622283, w: 0.99408686}
scale: {x: 0.99999994, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightFoot
parentName: mixamorig:RightLeg
position: {x: 0.000028405339, y: 34.48488, z: -0.00002834946}
rotation: {x: -0.4614528, y: -0.07204718, z: -0.057600323, w: 0.88235635}
scale: {x: 0.99999964, y: 1.0000001, z: 0.99999976}
- name: mixamorig:RightToeBase
parentName: mixamorig:RightFoot
position: {x: -0.0000056624413, y: 24.702417, z: -0.00011065602}
rotation: {x: -0.22683857, y: -0.074058376, z: 0.0250654, w: 0.970789}
scale: {x: 0.9999999, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightToe_End
parentName: mixamorig:RightToeBase
position: {x: 0.000056739897, y: 15.71241, z: -0.00015437603}
rotation: {x: -0.00000016161842, y: 0.043130457, z: 0.00000004328857, w: 0.99906945}
scale: {x: 1.0000002, y: 1, z: 1.0000002}
- name: mixamorig:Spine
parentName: mixamorig:Hips
position: {x: 0.00091801584, y: 10.611319, z: 1.3123938}
rotation: {x: -0.010846658, y: 0.0011588212, z: -0.02218634, w: 0.99969435}
scale: {x: 0.9999998, y: 0.9999997, z: 0.9999999}
- name: mixamorig:Spine1
parentName: mixamorig:Spine
position: {x: -0.000003375113, y: 9.583546, z: 0.000008546078}
rotation: {x: -0.09751832, y: -0.0015901525, z: 0.005564505, w: 0.9952169}
scale: {x: 0.99999976, y: 0.9999999, z: 0.9999995}
- name: mixamorig:Spine2
parentName: mixamorig:Spine1
position: {x: -0.000005631009, y: 10.359138, z: 0.000001600667}
rotation: {x: -0.00808515, y: -0.0012169554, z: 0.008934945, w: 0.9999267}
scale: {x: 0.9999996, y: 0.99999964, z: 0.99999994}
- name: mixamorig:LeftShoulder
parentName: mixamorig:Spine2
position: {x: 7.2941895, y: 13.212873, z: 0.30226445}
rotation: {x: 0.52343285, y: 0.35363355, z: 0.6195093, w: -0.46601474}
scale: {x: 0.99999976, y: 1.0000004, z: 1.0000001}
- name: mixamorig:LeftArm
parentName: mixamorig:LeftShoulder
position: {x: -0.000025302172, y: 14.741706, z: 0.00020119548}
rotation: {x: 0.14050621, y: -0.01130807, z: -0.008126807, w: 0.9899819}
scale: {x: 1.0000001, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftForeArm
parentName: mixamorig:LeftArm
position: {x: 0.000062942505, y: 17.352673, z: -0.000041484833}
rotation: {x: 0.030211665, y: -0.10134714, z: 0.036751796, w: 0.99371296}
scale: {x: 0.99999994, y: 0.9999997, z: 0.9999999}
- name: mixamorig:LeftHand
parentName: mixamorig:LeftForeArm
position: {x: 0.0000019073486, y: 19.14441, z: 0.00013247132}
rotation: {x: 0.017002419, y: 0.021385837, z: -0.052845035, w: 0.9982289}
scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandIndex1
parentName: mixamorig:LeftHand
position: {x: -2.3528287, y: 11.235652, z: 0.14606142}
rotation: {x: -0.054718453, y: -0.04174417, z: 0.057684414, w: 0.99595976}
scale: {x: 0.99999964, y: 0.9999998, z: 0.9999999}
- name: mixamorig:LeftHandIndex2
parentName: mixamorig:LeftHandIndex1
position: {x: -0.000010594726, y: 3.4837224, z: 0.000021535903}
rotation: {x: -0.032173194, y: 0.053949524, z: -0.0027717839, w: 0.99802136}
scale: {x: 1, y: 0.9999999, z: 0.9999999}
- name: mixamorig:LeftHandIndex3
parentName: mixamorig:LeftHandIndex2
position: {x: -0.0000050365925, y: 2.345203, z: 0.000020261854}
rotation: {x: 0.00000005681067, y: 0.0000016060656, z: -0.00000012875535, w: 1}
scale: {x: 1.0000001, y: 1, z: 1.0000002}
- name: mixamorig:LeftHandIndex4
parentName: mixamorig:LeftHandIndex3
position: {x: -0.00000071525574, y: 2.1136672, z: -0.0000115484}
rotation: {x: -0.0000013406499, y: -0.00400092, z: 0.000022799893, w: 0.999992}
scale: {x: 0.99999964, y: 0.99999994, z: 0.99999964}
- name: mixamorig:LeftHandMiddle1
parentName: mixamorig:LeftHand
position: {x: 0.0000011920929, y: 10.15485, z: 0.0000282228}
rotation: {x: -0.07176159, y: 0.03636886, z: -0.03320395, w: 0.9962054}
scale: {x: 1, y: 1.0000002, z: 0.9999999}
- name: mixamorig:LeftHandMiddle2
parentName: mixamorig:LeftHandMiddle1
position: {x: 0.000011920929, y: 2.60725, z: -0.000008754432}
rotation: {x: -0.02873752, y: 0.0013733126, z: -0.0018853699, w: 0.99958426}
scale: {x: 0.9999998, y: 0.99999976, z: 0.9999997}
- name: mixamorig:LeftHandMiddle3
parentName: mixamorig:LeftHandMiddle2
position: {x: 0.00001835823, y: 1.9381287, z: -0.000014454126}
rotation: {x: -0.00000045890914, y: -0.00001067808, z: -0.000000084633946, w: 1}
scale: {x: 0.99999976, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandMiddle4
parentName: mixamorig:LeftHandMiddle3
position: {x: -0.00001859665, y: 2.0616395, z: 0.0000028908253}
rotation: {x: 0.00000085839673, y: -0.00456493, z: -0.0006540946, w: 0.9999894}
scale: {x: 1, y: 1.0000001, z: 1}
- name: mixamorig:LeftHandPinky1
parentName: mixamorig:LeftHand
position: {x: 5.643331, y: 8.544061, z: -0.99322236}
rotation: {x: -0.15816844, y: 0.13910672, z: -0.3114301, w: 0.92663014}
scale: {x: 0.9999999, y: 1, z: 0.99999976}
- name: mixamorig:LeftHandPinky2
parentName: mixamorig:LeftHandPinky1
position: {x: 0.000024795532, y: 2.1991758, z: -0.000017404556}
rotation: {x: -0.37169924, y: -0.083060764, z: -0.084571935, w: 0.9207542}
scale: {x: 1, y: 1.0000001, z: 0.99999994}
- name: mixamorig:LeftHandPinky3
parentName: mixamorig:LeftHandPinky2
position: {x: -0.0000019073486, y: 1.2725241, z: 0.00000047683716}
rotation: {x: -0.0000051520815, y: -0.000703283, z: 0.00022744403, w: 0.99999976}
scale: {x: 0.9999999, y: 0.99999934, z: 0.9999997}
- name: mixamorig:LeftHandPinky4
parentName: mixamorig:LeftHandPinky3
position: {x: 0.000002861023, y: 1.433846, z: 0.00000047683716}
rotation: {x: 0.00000056997226, y: -0.0033962335, z: -0.00057017396, w: 0.9999941}
scale: {x: 1.0000001, y: 1.0000002, z: 1.0000001}
- name: mixamorig:LeftHandRing1
parentName: mixamorig:LeftHand
position: {x: 3.4467816, y: 10.646177, z: -0.1370104}
rotation: {x: -0.19365133, y: 0.11488885, z: -0.24944218, w: 0.9418484}
scale: {x: 0.99999976, y: 1, z: 0.9999998}
- name: mixamorig:LeftHandRing2
parentName: mixamorig:LeftHandRing1
position: {x: 0.0000166893, y: 2.6675563, z: 0.000017642975}
rotation: {x: -0.39969337, y: -0.09811549, z: -0.023844322, w: 0.9110708}
scale: {x: 0.9999999, y: 0.99999976, z: 0.99999994}
- name: mixamorig:LeftHandRing3
parentName: mixamorig:LeftHandRing2
position: {x: 0.00000047683716, y: 1.4622104, z: 0.0000009536743}
rotation: {x: -0.00000046379867, y: -0.000011667611, z: 0.0000015534463, w: 1}
scale: {x: 0.9999998, y: 1, z: 0.9999999}
- name: mixamorig:LeftHandRing4
parentName: mixamorig:LeftHandRing3
position: {x: -0.0000076293945, y: 1.6181933, z: -0.0000030994415}
rotation: {x: -0.0000088189345, y: -0.0073851123, z: 0.000769383, w: 0.99997246}
scale: {x: 1, y: 1.0000001, z: 0.9999998}
- name: mixamorig:LeftHandThumb1
parentName: mixamorig:LeftHand
position: {x: -4.002627, y: 2.7676365, z: -2.7068107}
rotation: {x: -0.020715237, y: 0.002581247, z: 0.37198743, w: 0.9280031}
scale: {x: 0.99999964, y: 1, z: 1}
- name: mixamorig:LeftHandThumb2
parentName: mixamorig:LeftHandThumb1
position: {x: 0.0000017285347, y: 2.3402648, z: -0.00005042553}
rotation: {x: 0.01564876, y: 0.026597274, z: -0.037198465, w: 0.99883133}
scale: {x: 0.9999999, y: 0.9999998, z: 0.99999964}
- name: mixamorig:LeftHandThumb3
parentName: mixamorig:LeftHandThumb2
position: {x: 0.000017285347, y: 2.623814, z: -0.0000042915344}
rotation: {x: 0.000002025627, y: -0.0000027362257, z: -0.00000034621922, w: 1}
scale: {x: 1, y: 0.9999997, z: 1}
- name: mixamorig:LeftHandThumb4
parentName: mixamorig:LeftHandThumb3
position: {x: -0.0000042915344, y: 2.0711527, z: -0.000006556511}
rotation: {x: -0.009147552, y: -0.12563689, z: 0.07207275, w: 0.98941255}
scale: {x: 0.99999994, y: 1.0000001, z: 0.99999976}
- name: mixamorig:Neck
parentName: mixamorig:Spine2
position: {x: 0.000032656942, y: 15.764623, z: -0.92092884}
rotation: {x: 0.1471445, y: -0.0059806914, z: -0.027730837, w: 0.98870814}
scale: {x: 1, y: 0.99999976, z: 0.9999999}
- name: mixamorig:Head
parentName: mixamorig:Neck
position: {x: 0.0000044247136, y: 9.739595, z: -2.9651532}
rotation: {x: 0.00000035431032, y: -0.0012969822, z: 0.00046576455, w: 0.99999905}
scale: {x: 1.0000001, y: 1.0000004, z: 1.0000004}
- name: mixamorig:HeadTop_End
parentName: mixamorig:Head
position: {x: 0.00014453381, y: 17.432362, z: -6.262025}
rotation: {x: -0.0000002012822, y: 0.0012969673, z: -0.0004658182, w: 0.99999905}
scale: {x: 0.99999994, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightShoulder
parentName: mixamorig:Spine2
position: {x: -7.434908, y: 13.363748, z: -0.4082315}
rotation: {x: -0.5197783, y: 0.35377866, z: 0.62096524, w: 0.4680528}
scale: {x: 0.9999996, y: 0.99999976, z: 0.9999999}
- name: mixamorig:RightArm
parentName: mixamorig:RightShoulder
position: {x: -0.000024974346, y: 14.493169, z: -0.0001656264}
rotation: {x: 0.13736127, y: 0.007831869, z: -0.00560735, w: 0.99047416}
scale: {x: 0.9999999, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightForeArm
parentName: mixamorig:RightArm
position: {x: 0.000031471252, y: 17.529053, z: 0.00007927418}
rotation: {x: 0.022670321, y: 0.11665267, z: -0.03965164, w: 0.99212193}
scale: {x: 1, y: 0.9999998, z: 1}
- name: mixamorig:RightHand
parentName: mixamorig:RightForeArm
position: {x: 0.00015211105, y: 19.027824, z: 0.000030636787}
rotation: {x: 0.0015444822, y: -0.03999891, z: 0.0872909, w: 0.9953784}
scale: {x: 0.9999998, y: 0.9999998, z: 0.9999998}
- name: mixamorig:RightHandIndex1
parentName: mixamorig:RightHand
position: {x: 2.345358, y: 12.045544, z: 0.7880449}
rotation: {x: -0.075189136, y: 0.01748997, z: -0.030210292, w: 0.99655807}
scale: {x: 0.99999994, y: 1, z: 0.9999998}
- name: mixamorig:RightHandIndex2
parentName: mixamorig:RightHandIndex1
position: {x: -0.0000033974648, y: 3.3267603, z: -0.000010676682}
rotation: {x: -0.036287162, y: -0.007182504, z: -0.0024840003, w: 0.9993125}
scale: {x: 0.99999976, y: 0.9999998, z: 1.0000002}
- name: mixamorig:RightHandIndex3
parentName: mixamorig:RightHandIndex2
position: {x: -0.000007033348, y: 1.7658211, z: -0.0000016093254}
rotation: {x: 0.00000004540199, y: 0.0000026877976, z: -0.00000047450888, w: 1}
scale: {x: 1, y: 0.99999994, z: 0.9999995}
- name: mixamorig:RightHandIndex4
parentName: mixamorig:RightHandIndex3
position: {x: -0.0000030398369, y: 1.591484, z: -0.0000035576522}
rotation: {x: 0.00007005317, y: 0.0067081554, z: 0.0013750611, w: 0.9999766}
scale: {x: 1.0000001, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle1
parentName: mixamorig:RightHand
position: {x: -0.00000047683716, y: 9.905703, z: -0.000008247793}
rotation: {x: -0.045294553, y: -0.06024597, z: 0.06547363, w: 0.9950036}
scale: {x: 0.99999994, y: 0.9999999, z: 0.9999997}
- name: mixamorig:RightHandMiddle2
parentName: mixamorig:RightHandMiddle1
position: {x: 0.000015258789, y: 2.1841674, z: 0.000040650368}
rotation: {x: -0.028868191, y: 0.07864306, z: -0.009304003, w: 0.9964414}
scale: {x: 0.9999998, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle3
parentName: mixamorig:RightHandMiddle2
position: {x: -0.000009261072, y: 1.1954373, z: -0.000009826152}
rotation: {x: 0.0000027485473, y: 0.00002192554, z: -0.00000014595753, w: 1}
scale: {x: 1.0000001, y: 1, z: 0.99999994}
- name: mixamorig:RightHandMiddle4
parentName: mixamorig:RightHandMiddle3
position: {x: 0.000009782612, y: 1.2880814, z: 0.000013801968}
rotation: {x: 0.00005137304, y: 0.006674174, z: -0.00170813, w: 0.9999763}
scale: {x: 0.99999994, y: 1, z: 0.9999999}
- name: mixamorig:RightHandPinky1
parentName: mixamorig:RightHand
position: {x: -4.68492, y: 9.301639, z: -0.6039194}
rotation: {x: -0.14660129, y: -0.16896184, z: 0.35809296, w: 0.9064929}
scale: {x: 0.9999999, y: 0.9999999, z: 0.9999999}
- name: mixamorig:RightHandPinky2
parentName: mixamorig:RightHandPinky1
position: {x: -0.0000014305115, y: 2.36758, z: 0.00000047683716}
rotation: {x: -0.24648736, y: 0.03440386, z: 0.12497026, w: 0.96043885}
scale: {x: 1, y: 1.0000002, z: 1.0000002}
- name: mixamorig:RightHandPinky3
parentName: mixamorig:RightHandPinky2
position: {x: 0.00000333786, y: 0.9927621, z: -0.0000023841858}
rotation: {x: 0.000018970582, y: 0.000065798646, z: -0.000026483096, w: 1}
scale: {x: 1, y: 0.99999946, z: 0.99999976}
- name: mixamorig:RightHandPinky4
parentName: mixamorig:RightHandPinky3
position: {x: 0.0000038146973, y: 1.1186066, z: -0.0000017881393}
rotation: {x: 0.000065763204, y: 0.008447872, z: 0.0022266835, w: 0.99996185}
scale: {x: 0.99999994, y: 1, z: 0.9999997}
- name: mixamorig:RightHandRing1
parentName: mixamorig:RightHand
position: {x: -2.9535933, y: 11.074583, z: 0.22817631}
rotation: {x: -0.1565983, y: -0.1363093, z: 0.2862314, w: 0.93539745}
scale: {x: 0.9999999, y: 0.99999964, z: 0.99999994}
- name: mixamorig:RightHandRing2
parentName: mixamorig:RightHandRing1
position: {x: 0.000024795532, y: 2.4419715, z: 0.0000104904175}
rotation: {x: -0.35058558, y: 0.10631899, z: 0.03226305, w: 0.92991674}
scale: {x: 0.9999998, y: 1.0000001, z: 1}
- name: mixamorig:RightHandRing3
parentName: mixamorig:RightHandRing2
position: {x: 0.0000009536743, y: 1.2144601, z: 0.00000500679}
rotation: {x: -0.0000008456409, y: 0.000017533077, z: -0.00000009126963, w: 1}
scale: {x: 1, y: 0.99999964, z: 1.0000002}
- name: mixamorig:RightHandRing4
parentName: mixamorig:RightHandRing3
position: {x: 0.000022888184, y: 1.344063, z: -0.00000500679}
rotation: {x: 0.000059993825, y: 0.007596232, z: -0.00030074958, w: 0.9999711}
scale: {x: 0.99999976, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb1
parentName: mixamorig:RightHand
position: {x: 4.157431, y: 3.805054, z: -3.3176646}
rotation: {x: -0.01654432, y: 0.03541527, z: -0.37525043, w: 0.92609894}
scale: {x: 0.9999999, y: 0.99999994, z: 1.0000001}
- name: mixamorig:RightHandThumb2
parentName: mixamorig:RightHandThumb1
position: {x: 0.000026881695, y: 2.482547, z: 0.000012814999}
rotation: {x: 0.023514528, y: -0.030231565, z: 0.029939556, w: 0.9988177}
scale: {x: 0.9999999, y: 0.99999946, z: 0.9999998}
- name: mixamorig:RightHandThumb3
parentName: mixamorig:RightHandThumb2
position: {x: 0.00000023841858, y: 2.505015, z: 0.000007033348}
rotation: {x: 0.000003868715, y: -0.00001448952, z: 0.000001148321, w: 1}
scale: {x: 0.9999998, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb4
parentName: mixamorig:RightHandThumb3
position: {x: 0.00000333786, y: 1.977331, z: 0.000003695488}
rotation: {x: -0.009236776, y: 0.12714589, z: -0.0723294, w: 0.98920023}
scale: {x: 1, y: 1.0000001, z: 1.0000004}
- name: LowPolyTarget
parentName: Explorer(Clone)
position: {x: -0.22224468, y: -102.89658, z: -0.41834378}
rotation: {x: -0.00000014233132, y: -0.000000009803429, z: 0.0000000032083953, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205042}
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 2
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,827 @@
fileFormatVersion: 2
guid: 85ead671556b11b4090b07f950c63265
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings: "Copied Avatar Rig Configuration mis-match. Bone length in
copied configuration does not match position in animation file:\n\t'mixamorig:LeftUpLeg'
: position error = 126.925949 mm\n\t'mixamorig:LeftLeg' : position error =
296.604736 mm\n\t'mixamorig:LeftFoot' : position error = 369.414795 mm\n\t'mixamorig:LeftToeBase'
: position error = 249.151398 mm\n\t'mixamorig:RightUpLeg' : position error
= 124.123772 mm\n\t'mixamorig:RightLeg' : position error = 296.164459 mm\n\t'mixamorig:RightFoot'
: position error = 365.771149 mm\n\t'mixamorig:RightToeBase' : position error
= 262.011444 mm\n\t'mixamorig:Spine' : position error = 113.443565 mm\n\t'mixamorig:Spine1'
: position error = 101.649849 mm\n\t'mixamorig:Spine2' : position error = 109.876328
mm\n\t'mixamorig:LeftShoulder' : position error = 160.876755 mm\n\t'mixamorig:LeftArm'
: position error = 156.360962 mm\n\t'mixamorig:LeftForeArm' : position error
= 184.054688 mm\n\t'mixamorig:LeftHand' : position error = 203.059158 mm\n\t'mixamorig:LeftHandIndex1'
: position error = 121.872719 mm\n\t'mixamorig:LeftHandIndex2' : position error
= 36.950813 mm\n\t'mixamorig:LeftHandIndex3' : position error = 24.874905 mm\n\t'mixamorig:LeftHandMiddle1'
: position error = 107.709526 mm\n\t'mixamorig:LeftHandMiddle2' : position
error = 27.654369 mm\n\t'mixamorig:LeftHandMiddle3' : position error = 20.557152
mm\n\t'mixamorig:LeftHandThumb1' : position error = 59.963577 mm\n\t'mixamorig:LeftHandThumb2'
: position error = 24.822491 mm\n\t'mixamorig:LeftHandThumb3' : position error
= 27.830013 mm\n\t'mixamorig:Neck' : position error = 167.507416 mm\n\t'mixamorig:Head'
: position error = 108.173225 mm\n\t'mixamorig:RightShoulder' : position error
= 163.045776 mm\n\t'mixamorig:RightArm' : position error = 153.724777 mm\n\t'mixamorig:RightForeArm'
: position error = 185.925476 mm\n\t'mixamorig:RightHand' : position error
= 201.822510 mm\n\t'mixamorig:RightHandIndex1' : position error = 130.538589
mm\n\t'mixamorig:RightHandIndex2' : position error = 35.285988 mm\n\t'mixamorig:RightHandIndex3'
: position error = 18.729544 mm\n\t'mixamorig:RightHandMiddle1' : position
error = 105.066795 mm\n\t'mixamorig:RightHandMiddle2' : position error = 23.166794
mm\n\t'mixamorig:RightHandMiddle3' : position error = 12.679692 mm\n\t'mixamorig:RightHandThumb1'
: position error = 70.296295 mm\n\t'mixamorig:RightHandThumb2' : position error
= 26.331663 mm\n\t'mixamorig:RightHandThumb3' : position error = 26.569925
mm\n"
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations:
- serializedVersion: 16
name: Walk
takeName: Armature|Scene
internalID: 1235213234022721315
firstFrame: 0
lastFrame: 0
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 1
loopBlendOrientation: 1
loopBlendPositionY: 1
loopBlendPositionXZ: 1
keepOriginalOrientation: 0
keepOriginalPositionY: 0
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human:
- boneName: mixamorig:Hips
humanName: Hips
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftUpLeg
humanName: LeftUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightUpLeg
humanName: RightUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftLeg
humanName: LeftLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightLeg
humanName: RightLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftFoot
humanName: LeftFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightFoot
humanName: RightFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine
humanName: Spine
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine1
humanName: Chest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Neck
humanName: Neck
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Head
humanName: Head
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftShoulder
humanName: LeftShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightShoulder
humanName: RightShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftArm
humanName: LeftUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightArm
humanName: RightUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftForeArm
humanName: LeftLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightForeArm
humanName: RightLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHand
humanName: LeftHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHand
humanName: RightHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftToeBase
humanName: LeftToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightToeBase
humanName: RightToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb1
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb2
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb3
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex1
humanName: Left Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex2
humanName: Left Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex3
humanName: Left Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle1
humanName: Left Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle2
humanName: Left Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandMiddle3
humanName: Left Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb1
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb2
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb3
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex1
humanName: Right Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex2
humanName: Right Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex3
humanName: Right Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle1
humanName: Right Middle Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle2
humanName: Right Middle Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandMiddle3
humanName: Right Middle Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine2
humanName: UpperChest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
skeleton:
- name: Explorer(Clone)
parentName:
position: {x: 0, y: 0, z: 0}
rotation: {x: 0, y: 0, z: 0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: Armature
parentName: Explorer(Clone)
position: {x: -0.22224486, y: -102.89659, z: -0.41833967}
rotation: {x: -0.00000014106499, y: -0, z: 0, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205045}
- name: mixamorig:Hips
parentName: Armature
position: {x: -0.37022263, y: 185.89287, z: 5.003476}
rotation: {x: -0.0077544115, y: -0.9993307, z: 0.035183605, w: 0.0063408096}
scale: {x: 0.9999997, y: 1, z: 0.99999994}
- name: mixamorig:LeftUpLeg
parentName: mixamorig:Hips
position: {x: 10.328106, y: -5.566781, z: -1.0677642}
rotation: {x: 0.0033447745, y: -0.015342032, z: 0.99833155, w: -0.05556624}
scale: {x: 1.0000159, y: 0.99999976, z: 1.000001}
- name: mixamorig:LeftLeg
parentName: mixamorig:LeftUpLeg
position: {x: -0.00003528269, y: 27.963875, z: -0.000029556453}
rotation: {x: 0.10019777, y: -0.007315265, z: -0.004477953, w: 0.9949306}
scale: {x: 0.9999998, y: 1.0000002, z: 0.9999998}
- name: mixamorig:LeftFoot
parentName: mixamorig:LeftLeg
position: {x: -0.00003734976, y: 34.82838, z: -0.000027887523}
rotation: {x: -0.44087952, y: 0.07572686, z: 0.05847374, w: 0.89245254}
scale: {x: 1.0000002, y: 0.9999997, z: 0.99999976}
- name: mixamorig:LeftToeBase
parentName: mixamorig:LeftFoot
position: {x: -0.00006151199, y: 23.489967, z: -0.00012715161}
rotation: {x: -0.22674958, y: 0.07703583, z: -0.025775313, w: 0.9705595}
scale: {x: 0.9999996, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftToe_End
parentName: mixamorig:LeftToeBase
position: {x: 0.000027706847, y: 14.941516, z: -0.00008380413}
rotation: {x: 0.00000020021156, y: -0.045787185, z: 0.00000011170127, w: 0.99895126}
scale: {x: 0.9999995, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightUpLeg
parentName: mixamorig:Hips
position: {x: -10.156085, y: -5.239155, z: -1.4343863}
rotation: {x: -0.002507165, y: -0.006057601, z: 0.9966414, w: 0.08162729}
scale: {x: 0.99999815, y: 0.99999976, z: 0.99999976}
- name: mixamorig:RightLeg
parentName: mixamorig:RightUpLeg
position: {x: -0.00011272775, y: 27.922354, z: -0.000013910234}
rotation: {x: 0.10649346, y: 0.00808772, z: 0.019622283, w: 0.99408686}
scale: {x: 0.99999994, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightFoot
parentName: mixamorig:RightLeg
position: {x: 0.000028405339, y: 34.48488, z: -0.00002834946}
rotation: {x: -0.4614528, y: -0.07204718, z: -0.057600323, w: 0.88235635}
scale: {x: 0.99999964, y: 1.0000001, z: 0.99999976}
- name: mixamorig:RightToeBase
parentName: mixamorig:RightFoot
position: {x: -0.0000056624413, y: 24.702417, z: -0.00011065602}
rotation: {x: -0.22683857, y: -0.074058376, z: 0.0250654, w: 0.970789}
scale: {x: 0.9999999, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightToe_End
parentName: mixamorig:RightToeBase
position: {x: 0.000056739897, y: 15.71241, z: -0.00015437603}
rotation: {x: -0.00000016161842, y: 0.043130457, z: 0.00000004328857, w: 0.99906945}
scale: {x: 1.0000002, y: 1, z: 1.0000002}
- name: mixamorig:Spine
parentName: mixamorig:Hips
position: {x: 0.00091801584, y: 10.611319, z: 1.3123938}
rotation: {x: -0.010846658, y: 0.0011588212, z: -0.02218634, w: 0.99969435}
scale: {x: 0.9999998, y: 0.9999997, z: 0.9999999}
- name: mixamorig:Spine1
parentName: mixamorig:Spine
position: {x: -0.000003375113, y: 9.583546, z: 0.000008546078}
rotation: {x: -0.09751832, y: -0.0015901525, z: 0.005564505, w: 0.9952169}
scale: {x: 0.99999976, y: 0.9999999, z: 0.9999995}
- name: mixamorig:Spine2
parentName: mixamorig:Spine1
position: {x: -0.000005631009, y: 10.359138, z: 0.000001600667}
rotation: {x: -0.00808515, y: -0.0012169554, z: 0.008934945, w: 0.9999267}
scale: {x: 0.9999996, y: 0.99999964, z: 0.99999994}
- name: mixamorig:LeftShoulder
parentName: mixamorig:Spine2
position: {x: 7.2941895, y: 13.212873, z: 0.30226445}
rotation: {x: 0.52343285, y: 0.35363355, z: 0.6195093, w: -0.46601474}
scale: {x: 0.99999976, y: 1.0000004, z: 1.0000001}
- name: mixamorig:LeftArm
parentName: mixamorig:LeftShoulder
position: {x: -0.000025302172, y: 14.741706, z: 0.00020119548}
rotation: {x: 0.14050621, y: -0.01130807, z: -0.008126807, w: 0.9899819}
scale: {x: 1.0000001, y: 0.9999998, z: 0.99999976}
- name: mixamorig:LeftForeArm
parentName: mixamorig:LeftArm
position: {x: 0.000062942505, y: 17.352673, z: -0.000041484833}
rotation: {x: 0.030211665, y: -0.10134714, z: 0.036751796, w: 0.99371296}
scale: {x: 0.99999994, y: 0.9999997, z: 0.9999999}
- name: mixamorig:LeftHand
parentName: mixamorig:LeftForeArm
position: {x: 0.0000019073486, y: 19.14441, z: 0.00013247132}
rotation: {x: 0.017002419, y: 0.021385837, z: -0.052845035, w: 0.9982289}
scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandIndex1
parentName: mixamorig:LeftHand
position: {x: -2.3528287, y: 11.235652, z: 0.14606142}
rotation: {x: -0.054718453, y: -0.04174417, z: 0.057684414, w: 0.99595976}
scale: {x: 0.99999964, y: 0.9999998, z: 0.9999999}
- name: mixamorig:LeftHandIndex2
parentName: mixamorig:LeftHandIndex1
position: {x: -0.000010594726, y: 3.4837224, z: 0.000021535903}
rotation: {x: -0.032173194, y: 0.053949524, z: -0.0027717839, w: 0.99802136}
scale: {x: 1, y: 0.9999999, z: 0.9999999}
- name: mixamorig:LeftHandIndex3
parentName: mixamorig:LeftHandIndex2
position: {x: -0.0000050365925, y: 2.345203, z: 0.000020261854}
rotation: {x: 0.00000005681067, y: 0.0000016060656, z: -0.00000012875535, w: 1}
scale: {x: 1.0000001, y: 1, z: 1.0000002}
- name: mixamorig:LeftHandIndex4
parentName: mixamorig:LeftHandIndex3
position: {x: -0.00000071525574, y: 2.1136672, z: -0.0000115484}
rotation: {x: -0.0000013406499, y: -0.00400092, z: 0.000022799893, w: 0.999992}
scale: {x: 0.99999964, y: 0.99999994, z: 0.99999964}
- name: mixamorig:LeftHandMiddle1
parentName: mixamorig:LeftHand
position: {x: 0.0000011920929, y: 10.15485, z: 0.0000282228}
rotation: {x: -0.07176159, y: 0.03636886, z: -0.03320395, w: 0.9962054}
scale: {x: 1, y: 1.0000002, z: 0.9999999}
- name: mixamorig:LeftHandMiddle2
parentName: mixamorig:LeftHandMiddle1
position: {x: 0.000011920929, y: 2.60725, z: -0.000008754432}
rotation: {x: -0.02873752, y: 0.0013733126, z: -0.0018853699, w: 0.99958426}
scale: {x: 0.9999998, y: 0.99999976, z: 0.9999997}
- name: mixamorig:LeftHandMiddle3
parentName: mixamorig:LeftHandMiddle2
position: {x: 0.00001835823, y: 1.9381287, z: -0.000014454126}
rotation: {x: -0.00000045890914, y: -0.00001067808, z: -0.000000084633946, w: 1}
scale: {x: 0.99999976, y: 1.0000001, z: 1.0000001}
- name: mixamorig:LeftHandMiddle4
parentName: mixamorig:LeftHandMiddle3
position: {x: -0.00001859665, y: 2.0616395, z: 0.0000028908253}
rotation: {x: 0.00000085839673, y: -0.00456493, z: -0.0006540946, w: 0.9999894}
scale: {x: 1, y: 1.0000001, z: 1}
- name: mixamorig:LeftHandPinky1
parentName: mixamorig:LeftHand
position: {x: 5.643331, y: 8.544061, z: -0.99322236}
rotation: {x: -0.15816844, y: 0.13910672, z: -0.3114301, w: 0.92663014}
scale: {x: 0.9999999, y: 1, z: 0.99999976}
- name: mixamorig:LeftHandPinky2
parentName: mixamorig:LeftHandPinky1
position: {x: 0.000024795532, y: 2.1991758, z: -0.000017404556}
rotation: {x: -0.37169924, y: -0.083060764, z: -0.084571935, w: 0.9207542}
scale: {x: 1, y: 1.0000001, z: 0.99999994}
- name: mixamorig:LeftHandPinky3
parentName: mixamorig:LeftHandPinky2
position: {x: -0.0000019073486, y: 1.2725241, z: 0.00000047683716}
rotation: {x: -0.0000051520815, y: -0.000703283, z: 0.00022744403, w: 0.99999976}
scale: {x: 0.9999999, y: 0.99999934, z: 0.9999997}
- name: mixamorig:LeftHandPinky4
parentName: mixamorig:LeftHandPinky3
position: {x: 0.000002861023, y: 1.433846, z: 0.00000047683716}
rotation: {x: 0.00000056997226, y: -0.0033962335, z: -0.00057017396, w: 0.9999941}
scale: {x: 1.0000001, y: 1.0000002, z: 1.0000001}
- name: mixamorig:LeftHandRing1
parentName: mixamorig:LeftHand
position: {x: 3.4467816, y: 10.646177, z: -0.1370104}
rotation: {x: -0.19365133, y: 0.11488885, z: -0.24944218, w: 0.9418484}
scale: {x: 0.99999976, y: 1, z: 0.9999998}
- name: mixamorig:LeftHandRing2
parentName: mixamorig:LeftHandRing1
position: {x: 0.0000166893, y: 2.6675563, z: 0.000017642975}
rotation: {x: -0.39969337, y: -0.09811549, z: -0.023844322, w: 0.9110708}
scale: {x: 0.9999999, y: 0.99999976, z: 0.99999994}
- name: mixamorig:LeftHandRing3
parentName: mixamorig:LeftHandRing2
position: {x: 0.00000047683716, y: 1.4622104, z: 0.0000009536743}
rotation: {x: -0.00000046379867, y: -0.000011667611, z: 0.0000015534463, w: 1}
scale: {x: 0.9999998, y: 1, z: 0.9999999}
- name: mixamorig:LeftHandRing4
parentName: mixamorig:LeftHandRing3
position: {x: -0.0000076293945, y: 1.6181933, z: -0.0000030994415}
rotation: {x: -0.0000088189345, y: -0.0073851123, z: 0.000769383, w: 0.99997246}
scale: {x: 1, y: 1.0000001, z: 0.9999998}
- name: mixamorig:LeftHandThumb1
parentName: mixamorig:LeftHand
position: {x: -4.002627, y: 2.7676365, z: -2.7068107}
rotation: {x: -0.020715237, y: 0.002581247, z: 0.37198743, w: 0.9280031}
scale: {x: 0.99999964, y: 1, z: 1}
- name: mixamorig:LeftHandThumb2
parentName: mixamorig:LeftHandThumb1
position: {x: 0.0000017285347, y: 2.3402648, z: -0.00005042553}
rotation: {x: 0.01564876, y: 0.026597274, z: -0.037198465, w: 0.99883133}
scale: {x: 0.9999999, y: 0.9999998, z: 0.99999964}
- name: mixamorig:LeftHandThumb3
parentName: mixamorig:LeftHandThumb2
position: {x: 0.000017285347, y: 2.623814, z: -0.0000042915344}
rotation: {x: 0.000002025627, y: -0.0000027362257, z: -0.00000034621922, w: 1}
scale: {x: 1, y: 0.9999997, z: 1}
- name: mixamorig:LeftHandThumb4
parentName: mixamorig:LeftHandThumb3
position: {x: -0.0000042915344, y: 2.0711527, z: -0.000006556511}
rotation: {x: -0.009147552, y: -0.12563689, z: 0.07207275, w: 0.98941255}
scale: {x: 0.99999994, y: 1.0000001, z: 0.99999976}
- name: mixamorig:Neck
parentName: mixamorig:Spine2
position: {x: 0.000032656942, y: 15.764623, z: -0.92092884}
rotation: {x: 0.1471445, y: -0.0059806914, z: -0.027730837, w: 0.98870814}
scale: {x: 1, y: 0.99999976, z: 0.9999999}
- name: mixamorig:Head
parentName: mixamorig:Neck
position: {x: 0.0000044247136, y: 9.739595, z: -2.9651532}
rotation: {x: 0.00000035431032, y: -0.0012969822, z: 0.00046576455, w: 0.99999905}
scale: {x: 1.0000001, y: 1.0000004, z: 1.0000004}
- name: mixamorig:HeadTop_End
parentName: mixamorig:Head
position: {x: 0.00014453381, y: 17.432362, z: -6.262025}
rotation: {x: -0.0000002012822, y: 0.0012969673, z: -0.0004658182, w: 0.99999905}
scale: {x: 0.99999994, y: 0.9999999, z: 0.99999964}
- name: mixamorig:RightShoulder
parentName: mixamorig:Spine2
position: {x: -7.434908, y: 13.363748, z: -0.4082315}
rotation: {x: -0.5197783, y: 0.35377866, z: 0.62096524, w: 0.4680528}
scale: {x: 0.9999996, y: 0.99999976, z: 0.9999999}
- name: mixamorig:RightArm
parentName: mixamorig:RightShoulder
position: {x: -0.000024974346, y: 14.493169, z: -0.0001656264}
rotation: {x: 0.13736127, y: 0.007831869, z: -0.00560735, w: 0.99047416}
scale: {x: 0.9999999, y: 0.99999994, z: 0.99999994}
- name: mixamorig:RightForeArm
parentName: mixamorig:RightArm
position: {x: 0.000031471252, y: 17.529053, z: 0.00007927418}
rotation: {x: 0.022670321, y: 0.11665267, z: -0.03965164, w: 0.99212193}
scale: {x: 1, y: 0.9999998, z: 1}
- name: mixamorig:RightHand
parentName: mixamorig:RightForeArm
position: {x: 0.00015211105, y: 19.027824, z: 0.000030636787}
rotation: {x: 0.0015444822, y: -0.03999891, z: 0.0872909, w: 0.9953784}
scale: {x: 0.9999998, y: 0.9999998, z: 0.9999998}
- name: mixamorig:RightHandIndex1
parentName: mixamorig:RightHand
position: {x: 2.345358, y: 12.045544, z: 0.7880449}
rotation: {x: -0.075189136, y: 0.01748997, z: -0.030210292, w: 0.99655807}
scale: {x: 0.99999994, y: 1, z: 0.9999998}
- name: mixamorig:RightHandIndex2
parentName: mixamorig:RightHandIndex1
position: {x: -0.0000033974648, y: 3.3267603, z: -0.000010676682}
rotation: {x: -0.036287162, y: -0.007182504, z: -0.0024840003, w: 0.9993125}
scale: {x: 0.99999976, y: 0.9999998, z: 1.0000002}
- name: mixamorig:RightHandIndex3
parentName: mixamorig:RightHandIndex2
position: {x: -0.000007033348, y: 1.7658211, z: -0.0000016093254}
rotation: {x: 0.00000004540199, y: 0.0000026877976, z: -0.00000047450888, w: 1}
scale: {x: 1, y: 0.99999994, z: 0.9999995}
- name: mixamorig:RightHandIndex4
parentName: mixamorig:RightHandIndex3
position: {x: -0.0000030398369, y: 1.591484, z: -0.0000035576522}
rotation: {x: 0.00007005317, y: 0.0067081554, z: 0.0013750611, w: 0.9999766}
scale: {x: 1.0000001, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle1
parentName: mixamorig:RightHand
position: {x: -0.00000047683716, y: 9.905703, z: -0.000008247793}
rotation: {x: -0.045294553, y: -0.06024597, z: 0.06547363, w: 0.9950036}
scale: {x: 0.99999994, y: 0.9999999, z: 0.9999997}
- name: mixamorig:RightHandMiddle2
parentName: mixamorig:RightHandMiddle1
position: {x: 0.000015258789, y: 2.1841674, z: 0.000040650368}
rotation: {x: -0.028868191, y: 0.07864306, z: -0.009304003, w: 0.9964414}
scale: {x: 0.9999998, y: 0.9999999, z: 1.0000001}
- name: mixamorig:RightHandMiddle3
parentName: mixamorig:RightHandMiddle2
position: {x: -0.000009261072, y: 1.1954373, z: -0.000009826152}
rotation: {x: 0.0000027485473, y: 0.00002192554, z: -0.00000014595753, w: 1}
scale: {x: 1.0000001, y: 1, z: 0.99999994}
- name: mixamorig:RightHandMiddle4
parentName: mixamorig:RightHandMiddle3
position: {x: 0.000009782612, y: 1.2880814, z: 0.000013801968}
rotation: {x: 0.00005137304, y: 0.006674174, z: -0.00170813, w: 0.9999763}
scale: {x: 0.99999994, y: 1, z: 0.9999999}
- name: mixamorig:RightHandPinky1
parentName: mixamorig:RightHand
position: {x: -4.68492, y: 9.301639, z: -0.6039194}
rotation: {x: -0.14660129, y: -0.16896184, z: 0.35809296, w: 0.9064929}
scale: {x: 0.9999999, y: 0.9999999, z: 0.9999999}
- name: mixamorig:RightHandPinky2
parentName: mixamorig:RightHandPinky1
position: {x: -0.0000014305115, y: 2.36758, z: 0.00000047683716}
rotation: {x: -0.24648736, y: 0.03440386, z: 0.12497026, w: 0.96043885}
scale: {x: 1, y: 1.0000002, z: 1.0000002}
- name: mixamorig:RightHandPinky3
parentName: mixamorig:RightHandPinky2
position: {x: 0.00000333786, y: 0.9927621, z: -0.0000023841858}
rotation: {x: 0.000018970582, y: 0.000065798646, z: -0.000026483096, w: 1}
scale: {x: 1, y: 0.99999946, z: 0.99999976}
- name: mixamorig:RightHandPinky4
parentName: mixamorig:RightHandPinky3
position: {x: 0.0000038146973, y: 1.1186066, z: -0.0000017881393}
rotation: {x: 0.000065763204, y: 0.008447872, z: 0.0022266835, w: 0.99996185}
scale: {x: 0.99999994, y: 1, z: 0.9999997}
- name: mixamorig:RightHandRing1
parentName: mixamorig:RightHand
position: {x: -2.9535933, y: 11.074583, z: 0.22817631}
rotation: {x: -0.1565983, y: -0.1363093, z: 0.2862314, w: 0.93539745}
scale: {x: 0.9999999, y: 0.99999964, z: 0.99999994}
- name: mixamorig:RightHandRing2
parentName: mixamorig:RightHandRing1
position: {x: 0.000024795532, y: 2.4419715, z: 0.0000104904175}
rotation: {x: -0.35058558, y: 0.10631899, z: 0.03226305, w: 0.92991674}
scale: {x: 0.9999998, y: 1.0000001, z: 1}
- name: mixamorig:RightHandRing3
parentName: mixamorig:RightHandRing2
position: {x: 0.0000009536743, y: 1.2144601, z: 0.00000500679}
rotation: {x: -0.0000008456409, y: 0.000017533077, z: -0.00000009126963, w: 1}
scale: {x: 1, y: 0.99999964, z: 1.0000002}
- name: mixamorig:RightHandRing4
parentName: mixamorig:RightHandRing3
position: {x: 0.000022888184, y: 1.344063, z: -0.00000500679}
rotation: {x: 0.000059993825, y: 0.007596232, z: -0.00030074958, w: 0.9999711}
scale: {x: 0.99999976, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb1
parentName: mixamorig:RightHand
position: {x: 4.157431, y: 3.805054, z: -3.3176646}
rotation: {x: -0.01654432, y: 0.03541527, z: -0.37525043, w: 0.92609894}
scale: {x: 0.9999999, y: 0.99999994, z: 1.0000001}
- name: mixamorig:RightHandThumb2
parentName: mixamorig:RightHandThumb1
position: {x: 0.000026881695, y: 2.482547, z: 0.000012814999}
rotation: {x: 0.023514528, y: -0.030231565, z: 0.029939556, w: 0.9988177}
scale: {x: 0.9999999, y: 0.99999946, z: 0.9999998}
- name: mixamorig:RightHandThumb3
parentName: mixamorig:RightHandThumb2
position: {x: 0.00000023841858, y: 2.505015, z: 0.000007033348}
rotation: {x: 0.000003868715, y: -0.00001448952, z: 0.000001148321, w: 1}
scale: {x: 0.9999998, y: 0.99999994, z: 0.9999998}
- name: mixamorig:RightHandThumb4
parentName: mixamorig:RightHandThumb3
position: {x: 0.00000333786, y: 1.977331, z: 0.000003695488}
rotation: {x: -0.009236776, y: 0.12714589, z: -0.0723294, w: 0.98920023}
scale: {x: 1, y: 1.0000001, z: 1.0000004}
- name: LowPolyTarget
parentName: Explorer(Clone)
position: {x: -0.22224468, y: -102.89658, z: -0.41834378}
rotation: {x: -0.00000014233132, y: -0.000000009803429, z: 0.0000000032083953, w: 1}
scale: {x: 1.0205044, y: 1.0205045, z: 1.0205042}
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: c66b44000c3fb9a4f95e5a696730b2f3, type: 3}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 2
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7d6119e735b89684dafc0b2165c832d5
guid: 79a6c1f669a17854cb2fe44ef92a5b6c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 3f6b2e21d41881145bacdcd8c5e9256f
guid: 2e0c9d2ee85d7d744a53bd31d826c6b0
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 18fb1c95a8226b9499925099fea88e77
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: 378fcd3e38fa4ed5b4fd243020863879
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects:
- first:
type: UnityEngine:Material
assembly: UnityEngine.CoreModule
name: lmgirl
second: {fileID: 2100000, guid: 035547fdfb144d949116df13abab5fa3, type: 2}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 2
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 0
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 035547fdfb144d949116df13abab5fa3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
@@ -1,71 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &2877603688111701539
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalScale.x
value: 1.4043803
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalScale.y
value: 1.4043803
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalScale.z
value: 1.4043803
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
propertyPath: m_Name
value: LmGirl
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 378fcd3e38fa4ed5b4fd243020863879, type: 3}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

@@ -1,153 +0,0 @@
fileFormatVersion: 2
guid: b36458a718134fd4ad93427442fe9661
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 1024
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 12
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 51
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

@@ -1,153 +0,0 @@
fileFormatVersion: 2
guid: e59d0920302543a5a08ee7a020cdeae2
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 1024
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 12
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 51
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 1024
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,596 +0,0 @@
fileFormatVersion: 2
guid: ff6bd5c51748a9c4789bfbd5b3c8bc45
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 3
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human:
- boneName: mixamorig:Hips
humanName: Hips
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftUpLeg
humanName: LeftUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightUpLeg
humanName: RightUpperLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftLeg
humanName: LeftLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightLeg
humanName: RightLowerLeg
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftFoot
humanName: LeftFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightFoot
humanName: RightFoot
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine
humanName: Spine
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine1
humanName: Chest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Neck
humanName: Neck
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Head
humanName: Head
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftShoulder
humanName: LeftShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightShoulder
humanName: RightShoulder
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftArm
humanName: LeftUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightArm
humanName: RightUpperArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftForeArm
humanName: LeftLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightForeArm
humanName: RightLowerArm
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHand
humanName: LeftHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHand
humanName: RightHand
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftToeBase
humanName: LeftToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightToeBase
humanName: RightToes
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb1
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb2
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandThumb3
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex1
humanName: Left Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex2
humanName: Left Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:LeftHandIndex3
humanName: Left Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb1
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb2
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandThumb3
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex1
humanName: Right Index Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex2
humanName: Right Index Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:RightHandIndex3
humanName: Right Index Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: mixamorig:Spine2
humanName: UpperChest
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
skeleton:
- name: CampGuideStudio(Clone)
parentName:
position: {x: 0, y: 0, z: 0}
rotation: {x: 0, y: 0, z: 0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: CampGuideStudio
parentName: CampGuideStudio(Clone)
position: {x: -0, y: 0, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Hips
parentName: CampGuideStudio(Clone)
position: {x: -0.0011632094, y: 0.533597, z: 0.02997686}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Spine
parentName: mixamorig:Hips
position: {x: -0, y: 0.04929197, z: -0.0039822664}
rotation: {x: -0.04029622, y: 0, z: -0, w: 0.99918777}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Spine1
parentName: mixamorig:Spine
position: {x: -0, y: 0.057694644, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Spine2
parentName: mixamorig:Spine1
position: {x: -0, y: 0.06593672, z: 1.3877788e-17}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Neck
parentName: mixamorig:Spine2
position: {x: -0, y: 0.07417879, z: 8.8872437e-10}
rotation: {x: 0.04029624, y: 0, z: -0, w: 0.99918777}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:Head
parentName: mixamorig:Neck
position: {x: -0, y: 0.050247908, z: -0.0022475189}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:HeadTop_End
parentName: mixamorig:Head
position: {x: -0, y: 0.27020252, z: -0.012085783}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightShoulder
parentName: mixamorig:Spine2
position: {x: 0.035060268, y: 0.06042911, z: -0.0011752236}
rotation: {x: -0.5662496, y: -0.41697985, z: 0.5840463, w: -0.40543708}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightArm
parentName: mixamorig:RightShoulder
position: {x: 1.3877788e-17, y: 0.075372845, z: 0}
rotation: {x: -0.135082, y: -0.00037338253, z: 0.0027387724, w: 0.9908306}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightForeArm
parentName: mixamorig:RightArm
position: {x: 1.3877788e-17, y: 0.12545893, z: 0}
rotation: {x: 0.0011367945, y: 0.0014517374, z: 0.03576546, w: 0.99935853}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHand
parentName: mixamorig:RightForeArm
position: {x: 6.938894e-18, y: 0.08591529, z: 0}
rotation: {x: -0.016670126, y: 0.01799976, z: -0.014833612, w: 0.99958897}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandIndex1
parentName: mixamorig:RightHand
position: {x: -3.469447e-18, y: 0.06597305, z: 0.0000645891}
rotation: {x: 0.027265245, y: -0.003039418, z: -0.013221414, w: 0.9995362}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandIndex2
parentName: mixamorig:RightHandIndex1
position: {x: 0.0025691614, y: 0.019909685, z: 0}
rotation: {x: 0.012430842, y: 0.0005963581, z: -0.030757757, w: 0.99944943}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandIndex3
parentName: mixamorig:RightHandIndex2
position: {x: -0.0001251379, y: 0.013439409, z: 0}
rotation: {x: -0.01226492, y: 0.0052259862, z: -0.10538083, w: 0.9943426}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandIndex4
parentName: mixamorig:RightHandIndex3
position: {x: -0.0024440235, y: 0.008211823, z: -1.110223e-16}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandThumb1
parentName: mixamorig:RightHand
position: {x: -0.014098173, y: 0.016799752, z: 0.009322663}
rotation: {x: 0.08662187, y: 0.011101932, z: 0.31593823, w: 0.9447521}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandThumb2
parentName: mixamorig:RightHandThumb1
position: {x: -0.001698951, y: 0.01898872, z: 0}
rotation: {x: 0.03769535, y: -0.006626477, z: -0.019117326, w: 0.9990844}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandThumb3
parentName: mixamorig:RightHandThumb2
position: {x: -0.004350158, y: 0.028197452, z: 1.110223e-16}
rotation: {x: -0.015345585, y: -0.0074487305, z: 0.19346112, w: 0.98095965}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightHandThumb4
parentName: mixamorig:RightHandThumb3
position: {x: 0.006049109, y: 0.02023542, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftShoulder
parentName: mixamorig:Spine2
position: {x: -0.035060268, y: 0.060418773, z: -0.001047267}
rotation: {x: 0.5673914, y: -0.41612816, z: 0.58305943, w: 0.4061355}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftArm
parentName: mixamorig:LeftShoulder
position: {x: -1.3877788e-17, y: 0.07537284, z: 1.110223e-16}
rotation: {x: -0.13549362, y: -0.00032954532, z: 0.0024097469, w: 0.9907752}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftForeArm
parentName: mixamorig:LeftArm
position: {x: -0, y: 0.12547736, z: 1.110223e-16}
rotation: {x: 0.00085306173, y: -0.0015480046, z: -0.041725036, w: 0.99912757}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHand
parentName: mixamorig:LeftForeArm
position: {x: -1.3877788e-17, y: 0.086023495, z: 0}
rotation: {x: -0.0116280345, y: 0.018550139, z: 0.030554395, w: 0.9992933}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandIndex1
parentName: mixamorig:LeftHand
position: {x: 1.3877788e-17, y: 0.07147856, z: 0.00019159679}
rotation: {x: 0.008958892, y: 0.0029056482, z: 0.015904116, w: 0.9998292}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandIndex2
parentName: mixamorig:LeftHandIndex1
position: {x: -0.0016985931, y: 0.01693047, z: 1.110223e-16}
rotation: {x: 0.031728197, y: -0.0023183736, z: 0.04081814, w: 0.99866}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandIndex3
parentName: mixamorig:LeftHandIndex2
position: {x: 0.00028907415, y: 0.012008013, z: 1.110223e-16}
rotation: {x: -0.031666014, y: -0.025538068, z: 0.09773257, w: 0.9943809}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandIndex4
parentName: mixamorig:LeftHandIndex3
position: {x: 0.001409519, y: 0.0055359844, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandThumb1
parentName: mixamorig:LeftHand
position: {x: 0.014851103, y: 0.015644014, z: 0.010979895}
rotation: {x: 0.09979333, y: -0.032477148, z: -0.3678039, w: 0.9239626}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandThumb2
parentName: mixamorig:LeftHandThumb1
position: {x: 0.0004168517, y: 0.019358978, z: 0}
rotation: {x: 0.039066378, y: 0.00024039854, z: -0.0070391204, w: 0.99921185}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandThumb3
parentName: mixamorig:LeftHandThumb2
position: {x: -0.00022181951, y: 0.027643763, z: -1.110223e-16}
rotation: {x: -0.018606024, y: 1.3875386e-17, z: 2.5821045e-19, w: 0.9998269}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftHandThumb4
parentName: mixamorig:LeftHandThumb3
position: {x: -0.00019503217, y: 0.023752617, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightUpLeg
parentName: mixamorig:Hips
position: {x: 0.061945636, y: -0.027330458, z: -0.0016424097}
rotation: {x: -0.0003663456, y: -0.0093701845, z: 0.99919266, w: -0.039065383}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightLeg
parentName: mixamorig:RightUpLeg
position: {x: -0, y: 0.22114347, z: 0}
rotation: {x: -0.007181718, y: -0.00030226482, z: 0.04204978, w: 0.99908966}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightFoot
parentName: mixamorig:RightLeg
position: {x: 1.3877788e-17, y: 0.19484961, z: 0}
rotation: {x: 0.41309112, y: -0.046677943, z: 0.021206865, w: 0.9092454}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightToeBase
parentName: mixamorig:RightFoot
position: {x: 1.3877788e-17, y: 0.12242485, z: -1.3877788e-17}
rotation: {x: 0.35176355, y: -0.104485855, z: 0.039546356, w: 0.9293983}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:RightToe_End
parentName: mixamorig:RightToeBase
position: {x: -0, y: 0.04718845, z: -1.7347235e-18}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftUpLeg
parentName: mixamorig:Hips
position: {x: -0.061945636, y: -0.027330458, z: -0.0013156906}
rotation: {x: 0.0004395926, y: -0.011244528, z: 0.99917346, w: 0.0390616}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftLeg
parentName: mixamorig:LeftUpLeg
position: {x: -0, y: 0.22116049, z: -3.469447e-18}
rotation: {x: -0.0071871784, y: 0.00030244072, z: -0.042042296, w: 0.99908996}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftFoot
parentName: mixamorig:LeftLeg
position: {x: -0, y: 0.19487472, z: -1.7347235e-18}
rotation: {x: 0.41781902, y: 0.046114888, z: -0.021240715, w: 0.9071106}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftToeBase
parentName: mixamorig:LeftFoot
position: {x: -2.7755576e-17, y: 0.12331192, z: 0}
rotation: {x: 0.3490021, y: 0.09975249, z: -0.03739212, w: 0.9310472}
scale: {x: 1, y: 1, z: 1}
- name: mixamorig:LeftToe_End
parentName: mixamorig:LeftToeBase
position: {x: -1.3877788e-17, y: 0.04902629, z: 0}
rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1}
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 1
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,88 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &4284382604120206758
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
propertyPath: m_Name
value: CampGuideStudio
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
insertIndex: -1
addedObject: {fileID: 5736135053118029275}
m_SourcePrefab: {fileID: 100100000, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
--- !u!1 &4013910780175945975 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
m_PrefabInstance: {fileID: 4284382604120206758}
m_PrefabAsset: {fileID: 0}
--- !u!95 &5736135053118029275
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4013910780175945975}
m_Enabled: 1
m_Avatar: {fileID: 9000000, guid: ff6bd5c51748a9c4789bfbd5b3c8bc45, type: 3}
m_Controller: {fileID: 9100000, guid: 824c2805b106e5b40b5ba8823dfc4a38, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 786ad638b2bf44543969516669c6ea90
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,63 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &169626891436472797
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_Name
value: LmGirlTpose
objectReference: {fileID: 0}
- target: {fileID: 5866666021909216657, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
propertyPath: m_Controller
value:
objectReference: {fileID: 9100000, guid: 824c2805b106e5b40b5ba8823dfc4a38, type: 2}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6b8c483a67959a142856c92140d0b492, type: 3}
@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: aaf0a33d2166a9844b8a7868270db9f5
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,116 +0,0 @@
fileFormatVersion: 2
guid: 6b8c483a67959a142856c92140d0b492
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings: "Copied Avatar Rig Configuration mis-match. Bone length in
copied configuration does not match position in animation file:\n\t'mixamorig:LeftUpLeg'
: position error = 21.305685 mm\n\t'mixamorig:LeftLeg' : position error = 117.460693
mm\n\t'mixamorig:LeftFoot' : position error = 158.540787 mm\n\t'mixamorig:LeftToeBase'
: position error = 55.213737 mm\n\t'mixamorig:RightUpLeg' : position error
= 20.915768 mm\n\t'mixamorig:RightLeg' : position error = 117.497704 mm\n\t'mixamorig:RightFoot'
: position error = 158.726181 mm\n\t'mixamorig:RightToeBase' : position error
= 52.470634 mm\n"
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 3
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 1
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

@@ -1,153 +0,0 @@
fileFormatVersion: 2
guid: bde1b3564800cf54abdd09ee59446773
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 1
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 12
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 51
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: 50
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 1
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 903110619c7e8c34a95330d890a68da7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,114 +0,0 @@
fileFormatVersion: 2
guid: c81262602281d2d499c5df212c05fbc1
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects:
- first:
type: UnityEngine:Material
assembly: UnityEngine.CoreModule
name: LmGirlTokenRig_Body
second: {fileID: 2100000, guid: 144a3f1917e54be4bb582fde53d5514f, type: 2}
materials:
materialImportMode: 1
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 0
importLights: 0
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 1
maxBonesPerVertex: 4
minBoneWeight: 0
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 0
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3
humanoidOversampling: 1
avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,55 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: LmGirlTokenRig
m_Shader: {fileID: 4800000, guid: cab897163f45445fa34263d6670bfc9e, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _MainTex:
m_Texture: {fileID: 2800000, guid: 7d6119e735b89684dafc0b2165c832d5, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MixTex:
m_Texture: {fileID: 2800000, guid: 3f6b2e21d41881145bacdcd8c5e9256f, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AO: 1
- _AlphaTest: 0
- _Cutoff: 0.5
- _Metallic: 1
- _Roughness: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
m_BuildTextureStacks: []
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 6d0cb16619679d249ad6a386257be998
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,109 +0,0 @@
fileFormatVersion: 2
guid: 7d5158900de62f94f90219244251d16e
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,88 +0,0 @@
{
"bones": 78,
"names": [
"Root",
"Hips",
"Spine1",
"Spine2",
"Chest",
"Neck1",
"Neck2",
"Head",
"HeadEnd",
"Jaw",
"LeftEye",
"RightEye",
"LeftShoulder",
"LeftArm",
"LeftForeArm",
"LeftHand",
"LeftHandThumb1",
"LeftHandThumb2",
"LeftHandThumb3",
"LeftHandThumbEnd",
"LeftHandIndex1",
"LeftHandIndex2",
"LeftHandIndex3",
"LeftHandIndex4",
"LeftHandIndexEnd",
"LeftHandMiddle1",
"LeftHandMiddle2",
"LeftHandMiddle3",
"LeftHandMiddle4",
"LeftHandMiddleEnd",
"LeftHandRing1",
"LeftHandRing2",
"LeftHandRing3",
"LeftHandRing4",
"LeftHandRingEnd",
"LeftHandPinky1",
"LeftHandPinky2",
"LeftHandPinky3",
"LeftHandPinky4",
"LeftHandPinkyEnd",
"RightShoulder",
"RightArm",
"RightForeArm",
"RightHand",
"RightHandThumb1",
"RightHandThumb2",
"RightHandThumb3",
"RightHandThumbEnd",
"RightHandIndex1",
"RightHandIndex2",
"RightHandIndex3",
"RightHandIndex4",
"RightHandIndexEnd",
"RightHandMiddle1",
"RightHandMiddle2",
"RightHandMiddle3",
"RightHandMiddle4",
"RightHandMiddleEnd",
"RightHandRing1",
"RightHandRing2",
"RightHandRing3",
"RightHandRing4",
"RightHandRingEnd",
"RightHandPinky1",
"RightHandPinky2",
"RightHandPinky3",
"RightHandPinky4",
"RightHandPinkyEnd",
"LeftLeg",
"LeftShin",
"LeftFoot",
"LeftToeBase",
"LeftToeEnd",
"RightLeg",
"RightShin",
"RightFoot",
"RightToeBase",
"RightToeEnd"
],
"height": 1.7641,
"up": "Z-in-blender",
"front": "+Y-in-blender",
"left": "-X",
"source": "D:\\UD\\AI\\AIGame\\Tools\\output\\campguide_studio\\rig_fixed\\kimodo_regen\\Walk\\kimodo_motion.bvh"
}
@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 3bc245748b95ce54a8383c797b4a0600
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,109 +0,0 @@
fileFormatVersion: 2
guid: 934992566fbf2474797386057c648e82
ModelImporter:
serializedVersion: 22200
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 1
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 1
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations: []
isReadable: 0
meshes:
lODScreenPercentages: []
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1
importBlendShapes: 1
importCameras: 1
importLights: 1
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 0
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 0
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 55daa9e9e60e53d4a94d519b409b8136
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: d211e25c4d05fca4ba65704f4db0ec9e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More