Hello.
First of all thanks for that coding tip.
I know I am troubling you a lot, but please I really need help regarding Matrix4x4 you mentioned.
Is this code correct? Because those small spheres are still floating in air.
This is the MatrixUtils class:
First of all thanks for that coding tip.
I know I am troubling you a lot, but please I really need help regarding Matrix4x4 you mentioned.
Code:
private void HandleGlitters()
{
if (glittersList.Count <= 0)
return;
for (int i = 0; i < glittersList.Count; i++)
{
Matrix4x4 particlesMatrix = Matrix4x4.TRS(slimeActor.GetParticlePosition(glittersList[i].particleIndex), slimeActor.GetParticleOrientation(glittersList[i].particleIndex), Vector3.one);
glittersList[i].transform.position = MatrixUtils.ExtractPosition(particlesMatrix) - glittersList[i].particleAttachOffset;
glittersList[i].transform.rotation = MatrixUtils.ExtractRotation(particlesMatrix);
}
}
Is this code correct? Because those small spheres are still floating in air.
This is the MatrixUtils class:
Code:
using UnityEngine;
public static class MatrixUtils
{
public static Quaternion ExtractRotation(this Matrix4x4 matrix)
{
Vector3 forward;
forward.x = matrix.m02;
forward.y = matrix.m12;
forward.z = matrix.m22;
Vector3 upwards;
upwards.x = matrix.m01;
upwards.y = matrix.m11;
upwards.z = matrix.m21;
return Quaternion.LookRotation(forward, upwards);
}
public static Vector3 ExtractPosition(this Matrix4x4 matrix)
{
Vector3 position;
position.x = matrix.m03;
position.y = matrix.m13;
position.z = matrix.m23;
return position;
}
public static Vector3 ExtractScale(this Matrix4x4 matrix)
{
Vector3 scale;
scale.x = new Vector4(matrix.m00, matrix.m10, matrix.m20, matrix.m30).magnitude;
scale.y = new Vector4(matrix.m01, matrix.m11, matrix.m21, matrix.m31).magnitude;
scale.z = new Vector4(matrix.m02, matrix.m12, matrix.m22, matrix.m32).magnitude;
return scale;
}
}