LaboratoryProtection/Assets/UnityTest/Common/Scripts/Object/ObjectItemColliderSetter.cs

57 lines
1.5 KiB
C#

using PMaker.Extension;
using Sirenix.OdinInspector;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ObjectItemColliderSetter : BaseBehaviour
{
#if UNITY_EDITOR
public ObjectItem[] objectItems;
public MeshRenderer[] meshRenderers;
public SkinnedMeshRenderer[] skinnedMeshRenderers;
public Collider[] colliders;
[Button]
public void Init()
{
objectItems = this.transform.GetComponentsInChildren<ObjectItem>(true);
meshRenderers = objectItems.SelectMany(_ => _.objects).SelectMany(_ => _.GetComponentsInChildren<MeshRenderer>(true)).ToArray();
skinnedMeshRenderers = objectItems.SelectMany(_ => _.objects).SelectMany(_ => _.GetComponentsInChildren<SkinnedMeshRenderer>(true)).ToArray();
this.SetDirty();
}
[Button]
public void CreateCollider()
{
var list = new List<Collider>();
foreach (var item in meshRenderers)
{
if (item.TryGetComponent<Collider>(out var collider) != true)
{
collider = item.gameObject.AddComponent<MeshCollider>();
list.Add(collider);
}
}
foreach (var item in skinnedMeshRenderers)
{
if (item.TryGetComponent<Collider>(out var collider) != true)
{
collider = item.gameObject.AddComponent<BoxCollider>();
list.Add(collider);
}
}
colliders = list.ToArray();
this.SetDirty();
}
#endif
}