using UnityEngine;
using System;
using System.Collections.Generic;
using KindRetargeting;
///
/// 아바타 Head 본 콜라이더 자동 생성 및 타겟 관리
///
[Serializable]
public class AvatarHeadManager
{
[Tooltip("아바타 Head 본에 자동으로 SphereCollider를 생성합니다 (DOF 타겟, 레이캐스트 등에 활용)")]
public bool autoCreateHeadColliders = true;
[Tooltip("Head 콜라이더 반경")]
public float headColliderRadius = 0.1f;
[NonSerialized]
private List avatarHeadTargets = new List();
private Action log;
private Action logError;
public void Initialize(Action log, Action logError)
{
this.log = log;
this.logError = logError;
if (autoCreateHeadColliders)
{
RefreshAvatarHeadColliders();
}
}
public void RefreshAvatarHeadColliders()
{
avatarHeadTargets.Clear();
var retargetingScripts = UnityEngine.Object.FindObjectsByType(FindObjectsSortMode.None);
log?.Invoke($"아바타 Head 콜라이더 검색: CustomRetargetingScript {retargetingScripts.Length}개 발견");
foreach (var script in retargetingScripts)
{
if (script.targetAnimator == null) continue;
Transform headBone = script.targetAnimator.GetBoneTransform(HumanBodyBones.Head);
if (headBone == null) continue;
if (!headBone.TryGetComponent(out _))
{
var collider = headBone.gameObject.AddComponent();
collider.radius = headColliderRadius;
collider.isTrigger = true;
log?.Invoke($"Head 콜라이더 생성: {headBone.name} ({script.targetAnimator.gameObject.name})");
}
avatarHeadTargets.Add(headBone);
}
log?.Invoke($"총 {avatarHeadTargets.Count}개의 아바타 Head 타겟 등록 완료");
}
public List GetAvatarHeadTargets()
{
return avatarHeadTargets;
}
}