BITFALL/Assets/GSpawn - Level Designer/Scripts/Prefabs/PrefabMeshObject.cs

67 lines
2.8 KiB
C#
Raw Normal View History

2024-01-27 04:09:57 +08:00
#if UNITY_EDITOR
using UnityEngine;
using System;
namespace GSpawn
{
[Serializable]
public class PrefabMeshObject
{
[SerializeField]
private GameObject _gameObject;
[SerializeField]
private MeshFilter _meshFilter;
[SerializeField]
private MeshRenderer _meshRenderer;
[SerializeField]
private SkinnedMeshRenderer _skinnedMeshRenderer;
[SerializeField]
private Mesh _mesh;
[SerializeField]
private Material[] _sharedMaterials;
[SerializeField]
private Vector3 _rootRelativePosition;
[SerializeField]
private Quaternion _rootRelativeRotation;
[SerializeField]
private Vector3 _rootRelativeScale;
public int numSharedMaterials { get { return _sharedMaterials.Length; } }
public Vector3 rootRelativePosition { get { return _rootRelativePosition; } }
public Quaternion rootRelativeRotation { get { return _rootRelativeRotation; } }
public Vector3 rootRelativeScale { get { return _rootRelativeScale; } }
public Mesh mesh { get { return _mesh; } }
public GameObject gameObject { get { return _gameObject; } }
public PrefabMeshObject(GameObject gameObject, GameObject prefabRoot)
{
_gameObject = gameObject;
_meshFilter = gameObject.getMeshFilter();
_skinnedMeshRenderer = gameObject.getSkinnedMeshRenderer();
if (_meshFilter != null)
{
_mesh = _meshFilter.sharedMesh;
_meshRenderer = gameObject.getMeshRenderer();
if (_meshRenderer != null) _sharedMaterials = _meshRenderer.sharedMaterials;
}
else if (_skinnedMeshRenderer != null)
{
_mesh = _skinnedMeshRenderer.sharedMesh;
_sharedMaterials = _skinnedMeshRenderer.sharedMaterials;
}
Transform objectTransform = gameObject.transform;
Transform rootTransform = prefabRoot.transform;
_rootRelativePosition = rootTransform.InverseTransformPoint(objectTransform.position);
_rootRelativeRotation = Quaternion.Inverse(objectTransform.rotation) * rootTransform.rotation;
_rootRelativeScale = Vector3.Scale(rootTransform.lossyScale, objectTransform.lossyScale);
}
public Material getSharedMaterial(int index)
{
return _sharedMaterials[index];
}
}
}
#endif