49 lines
1.9 KiB
C#
49 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// OptiTrack 스켈레톤의 본 매핑과 T-포즈를 에셋으로 영구 저장합니다.
|
|
/// 런타임에 Start()에서 자동 로드되며, CacheRestPose() 없이 즉시 복원이 가능합니다.
|
|
/// </summary>
|
|
[CreateAssetMenu(fileName = "OptitrackRestPoseData", menuName = "OptiTrack/Skeleton Setup")]
|
|
public class OptitrackRestPoseData : ScriptableObject
|
|
{
|
|
// ── 본 매핑 ───────────────────────────────────────────────────────────────
|
|
|
|
/// <summary>
|
|
/// OptiTrack 본 이름 ↔ FBX 노드 이름 매핑 목록.
|
|
/// Transform 참조(cachedTransform)는 씬 오브젝트라 SO에 저장되지 않으며,
|
|
/// 런타임 Start()에서 자동으로 채워집니다.
|
|
/// </summary>
|
|
public List<OptiTrackBoneMapping> boneMappings = new List<OptiTrackBoneMapping>();
|
|
|
|
// ── T-포즈 (기준 포즈) ────────────────────────────────────────────────────
|
|
|
|
[Serializable]
|
|
public class RestPoseEntry
|
|
{
|
|
public string boneName;
|
|
public Vector3 localPosition;
|
|
public Quaternion localRotation;
|
|
}
|
|
|
|
public List<RestPoseEntry> restPoseEntries = new List<RestPoseEntry>();
|
|
|
|
/// <summary>
|
|
/// T-포즈 데이터를 런타임 딕셔너리에 복사합니다.
|
|
/// </summary>
|
|
public void LoadRestPoseIntoRuntime(
|
|
Dictionary<string, Quaternion> rotations,
|
|
Dictionary<string, Vector3> positions)
|
|
{
|
|
rotations.Clear();
|
|
positions.Clear();
|
|
foreach (var e in restPoseEntries)
|
|
{
|
|
rotations[e.boneName] = e.localRotation;
|
|
positions[e.boneName] = e.localPosition;
|
|
}
|
|
}
|
|
}
|