What’s the math formula to use when calculating the new transform (position, rotation and scale) values (aka relative transform values) after moving a gameobject under a parent gameobject? The formula will be used to calculate the new relative position and rotation values so that I can move the GB to the world coordinates I want the object to be.

**Scenerio**

**Original gameobject Transform values (not under any parent GB)**

**Position**

x : 100

y : 20

z: 50

**Rotation**

x: 0.15

y: 0.2

z: 2

**Scale**

x: 20

y: 5

z: 10

**Parent gameobject**

**Position**

x : 25

y: 10

z: 100

**Rotation**

x : 0.8

y: 0.1

z: 0.3

**Scale**

x: 10

y: 20

z: 5

What will be the new gameobject **relative (to parent)** transform values when moved to world coordinates

**Position**

x: 120

y: 50

z: 100

**Rotation**

x: 0.25

y: 0.75

z: 0.30

Thank you!

1 Like

Transform.worldToLocalMatrix:

This is a transform matrix that can transform from world (global position/rotation/scale) to local space of said Transform.

Matrix4x4 has a few different methods on it to transform points, directions, rotations, etc:

[edit]

weird, I’m noticing it doesn’t have a rotation transform method… that’s stupid.

In this case, you can just take the inverse of the world rotation of the parent, and multiply the child’s world rotation by it.

```
localRot = Quaternion.Inverse(theTargetParent.transform.rotation) * theTargetChild.transform.rotation);
```

1 Like

Hi, how can I apply a matrix4x4 to my gameibject?

The Matrix4x4 has scale and rotation properties on it:

https://docs.unity3d.com/ScriptReference/Matrix4x4.html

So you can just set those on your Transform.

As for position, well there isn’t a specific property for it (for some reason), but it’s just last column of the matrix. So you can just read it out. I have methods for this here:

https://github.com/lordofduct/spacepuppy-unity-framework-3.0/blob/master/SpacepuppyUnityFramework/Utils/TransformUtil.cs#L51

…

What I’m wondering though is why? What are you specifically using Matrix4x4 for that you need to set Transform’s by it?

1 Like

Because the hierarchical relationship needs to be set in the thread, but transfrom can only be in the ui thread. I read this framework, and the Trans class is very well written, but it is a pity that the parent of Trans cannot be set. Otherwise this would be a perfect solution to simulate the transform hierarchy, which can be used in the thread and then create the gameobject in the ui thread