Question by
KAW0 · May 21, 2021 at 04:23 PM ·
transformvector3matrix4x4localspace
How to translate World <->Local position without Transform component with Matrix4x4?
I have to calculate global position with local coordinates without using the transform component. My code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
public class VirtualTransform
{
public Vector3 LocalPosition;
public Vector3 LocalScale;
public Quaternion LocalRotation;
public VirtualTransform Parent;
public VirtualTransform(Vector3 localPosition, Vector3 localScale, Quaternion localRotation)
{
LocalPosition = localPosition;
LocalScale = localScale;
LocalRotation = localRotation;
}
public VirtualTransform(Vector3 localPosition, Vector3 localScale, Quaternion localRotation, VirtualTransform parent)
{
LocalPosition = localPosition;
LocalScale = localScale;
LocalRotation = localRotation;
Parent = parent;
}
public Matrix4x4 Matrix
{
get
{
var matrix = Matrix4x4.TRS(LocalPosition, LocalRotation, LocalScale);
if (Parent != null)
{
return matrix * Parent.Matrix;
}
return matrix;
}
}
public Vector3 GlobalPos
{
get
{
return PosFromMatrix(Matrix);
}
}
static Vector3 PosFromMatrix(Matrix4x4 matrix)
{
var pos = matrix.GetColumn(3);
return new Vector3(pos.x, pos.y, pos.z);
}
}
Tested with:
var obj1 = new VirtualTransform(new Vector3(2, 2, 0), new Vector3(1, 3, 1), Quaternion.Euler(0, 0, 90));
var obj2 = new VirtualTransform(new Vector3(5, 5, 0), new Vector3(1, 0.5f, 1), Quaternion.Euler(0, 0, 45), obj1);
var obj3 = new VirtualTransform(new Vector3(3, 3, 0), new Vector3(1, 1f, 1), Quaternion.Euler(0, 0, 50), obj2);
Debug.Log(obj3.Matrix.lossyScale);
Result: (0.5, 3.0, 1.0)
Expected result: (2.151782, 0.6361648, 1)
Comment
Your answer
Follow this Question
Related Questions
Need help getting randomly moving particles to head to the nearest of 4 coordinates. 1 Answer
Helicopter Move Local Position,Local Position 1 Answer
Moving GameObject a specific distance in the Z direction and back again - regardless of rotation 1 Answer
InverseTransformPoint() help 0 Answers
How to find nearby objects? 2 Answers