90 lines
1.7 KiB
C#
90 lines
1.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace PhysicsTools
|
|
{
|
|
[Serializable]
|
|
public class LinkMesh
|
|
{
|
|
[HideInInspector]
|
|
public Mesh modifiedMesh;
|
|
|
|
[HideInInspector]
|
|
public Matrix4x4 transform;
|
|
|
|
[HideInInspector]
|
|
public Mesh defaultMesh;
|
|
|
|
[HideInInspector]
|
|
public Material defaultMeshMaterial;
|
|
|
|
[HideInInspector]
|
|
public Matrix4x4 defaultTransform;
|
|
|
|
public Mesh mesh;
|
|
|
|
public Material meshMaterial;
|
|
|
|
public Vector3 position;
|
|
|
|
public Vector3 rotation;
|
|
|
|
public Vector3 scale;
|
|
|
|
public LinkMesh()
|
|
{
|
|
mesh = null;
|
|
position = new Vector3(0f, 0f, 0f);
|
|
rotation = new Vector3(0f, 0f, 0f);
|
|
scale = new Vector3(1f, 1f, 1f);
|
|
defaultTransform = default(Matrix4x4);
|
|
defaultTransform.SetTRS(position, Quaternion.Euler(rotation), scale);
|
|
transform = default(Matrix4x4);
|
|
transform.SetTRS(position, Quaternion.Euler(rotation), scale);
|
|
}
|
|
|
|
public void update()
|
|
{
|
|
if (mesh == null)
|
|
{
|
|
mesh = defaultMesh;
|
|
transform = defaultTransform;
|
|
Quaternion rot;
|
|
Utility.MatrixToTRS(transform, out position, out rot, out scale);
|
|
rotation = rot.eulerAngles;
|
|
}
|
|
if (mesh != null)
|
|
{
|
|
modifiedMesh = UnityEngine.Object.Instantiate(mesh);
|
|
}
|
|
if (modifiedMesh != null)
|
|
{
|
|
transform.SetTRS(position, Quaternion.Euler(rotation), scale);
|
|
ScaleMesh();
|
|
}
|
|
}
|
|
|
|
public void ScaleMesh()
|
|
{
|
|
Vector3[] vertices = modifiedMesh.vertices;
|
|
for (int i = 0; i < vertices.Length; i++)
|
|
{
|
|
Vector3 point = vertices[i];
|
|
point = transform.MultiplyPoint(point);
|
|
vertices[i] = point;
|
|
}
|
|
modifiedMesh.vertices = vertices;
|
|
}
|
|
|
|
public Mesh getMesh()
|
|
{
|
|
return modifiedMesh;
|
|
}
|
|
|
|
public Material getMaterial()
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|