71 lines
2.9 KiB
C#
71 lines
2.9 KiB
C#
#if UNITY_EDITOR
|
|
using System;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEditor.SceneManagement;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using Object = UnityEngine.Object;
|
|
|
|
public static class AuditAnimalWalk
|
|
{
|
|
const string Root = "Assets/Bundles/Characters/Animal/RockBall";
|
|
static GameObject Spawn(string path) => Object.Instantiate(AssetDatabase.LoadAssetAtPath<GameObject>(path));
|
|
public static string Capture()
|
|
{
|
|
string dir = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/rockball_walk_audit"));
|
|
Directory.CreateDirectory(dir);
|
|
var scene = EditorSceneManager.NewPreviewScene();
|
|
try
|
|
{
|
|
var unit = Spawn(Root + "/RockBall_Rigged.prefab");
|
|
SceneManager.MoveGameObjectToScene(unit, scene);
|
|
var anim = unit.GetComponentInChildren<Animator>();
|
|
anim.enabled = false;
|
|
var clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(Root + "/Clips/Walk.anim");
|
|
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(45, -30, 0);
|
|
var cam = new GameObject("AuditCamera").AddComponent<Camera>();
|
|
SceneManager.MoveGameObjectToScene(cam.gameObject, scene);
|
|
cam.scene = scene;
|
|
cam.clearFlags = CameraClearFlags.SolidColor;
|
|
cam.backgroundColor = new Color(.45f,.53f,.59f);
|
|
cam.transform.position = new Vector3(1.1f,.75f,-1.6f);
|
|
cam.transform.LookAt(new Vector3(0,.28f,0));
|
|
cam.orthographic = true;
|
|
cam.orthographicSize = .43f;
|
|
cam.nearClipPlane = .01f;
|
|
var rt = new RenderTexture(512,512,24);
|
|
cam.targetTexture = rt;
|
|
var tex = new Texture2D(512,512,TextureFormat.RGB24,false);
|
|
var previous = RenderTexture.active;
|
|
try
|
|
{
|
|
for (int i = -1; i < 4; i++)
|
|
{
|
|
if (i >= 0) clip.SampleAnimation(anim.gameObject, clip.length * i / 4f);
|
|
cam.Render();
|
|
RenderTexture.active = rt;
|
|
tex.ReadPixels(new Rect(0,0,512,512),0,0);
|
|
tex.Apply();
|
|
File.WriteAllBytes(Path.Combine(dir, i < 0 ? "bind.png" : "walk_" + i + ".png"), tex.EncodeToPNG());
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
RenderTexture.active = previous;
|
|
cam.targetTexture = null;
|
|
rt.Release();
|
|
Object.DestroyImmediate(rt);
|
|
Object.DestroyImmediate(tex);
|
|
}
|
|
}
|
|
finally { EditorSceneManager.ClosePreviewScene(scene); }
|
|
return dir;
|
|
}
|
|
}
|
|
#endif
|