Land Explorer in HomeCamp with boot loading, journal UI, and CDN publish tooling.
Co-authored-by: Cursor <cursoragent@cursor.com>
@@ -7,6 +7,8 @@ Tools/**/*.pyc
|
||||
.env
|
||||
Tools/*.env
|
||||
Tools/*.env.local
|
||||
Tools/.cdn-deploy/
|
||||
Tools/cdn_publish.local.json
|
||||
|
||||
# 混元3D 登录凭证与任务中间文件(勿提交)
|
||||
Tools/data/hunyuan/storage_state.json
|
||||
|
||||
@@ -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.");
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using AOT.Editor.YooAssetTools;
|
||||
|
||||
public static class PublishCdn
|
||||
{
|
||||
public static string Build() => CdnPublisher.BuildPackages();
|
||||
public static string Status() => CdnPublisher.Status;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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: {}
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 22af15bff8017a843be939f0d7c9d419
|
||||
guid: 2a54075564ff57941b3f7f9f6bf9492c
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2663e6198908123408a9973dedd6fd3d
|
||||
guid: 6b6aac82fe2582d4e89a18c7a0b61d1a
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@@ -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:
|
||||
|
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:
|
||||
|
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:
|
||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d6119e735b89684dafc0b2165c832d5
|
||||
guid: 79a6c1f669a17854cb2fe44ef92a5b6c
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
|
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}
|
||||
|
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:
|
||||
|
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:
|
||||
|
Before Width: | Height: | Size: 509 KiB |
|
Before Width: | Height: | Size: 911 KiB |
|
Before Width: | Height: | Size: 275 KiB |
|
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:
|
||||
|
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: []
|
||||
|
Before Width: | Height: | Size: 1.5 MiB |
|
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:
|
||||