Transform.position incorrect

The issue is that the transform.position in Inspector doesn’t seem to be the same as the position in code

Here’s a rundown on what is going on:
I have a class called MushroomPosition, which inherits from ItemPositionBase (MonoBehaviour)
MushroomPosition doesn’t have any code in it (at least not yet), so it is 100% depending on code in ItemPositionBase

I have the following Editor:

[CustomEditor(typeof(MushroomPosition), true)]
public class ItemPositionEditor : Editor
{
    public override void OnInspectorGUI()
    {
        EditorGUI.BeginChangeCheck();

        ItemPositionBase item = target as ItemPositionBase;
        SerializedObject targetSerialized = new SerializedObject(target);

        item.Row = EditorGUILayout.IntSlider("Row", item.Row, -15, 15);
        item.Column = EditorGUILayout.IntSlider("Column", item.Column, -15, 15);
        item.RowSpace = EditorGUILayout.FloatField("Row space", item.RowSpace);
        item.ColumnSpace = EditorGUILayout.FloatField("column space", item.ColumnSpace);
        item.PositionName = EditorGUILayout.TextField("Position name", item.PositionName);

        item.name = item.PositionName + " position:" + item.Row + "," + item.Column;
        
        if (EditorGUI.EndChangeCheck())
        {
            targetSerialized.ApplyModifiedProperties();
            EditorUtility.SetDirty(item);

            EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
        }
    }
}

In the ItemPositionBase I have the following methods that is being called when Row or Column is changed:

private void FixRowColumn()
    {
        this.transform.position = GetPositionInformationForItem(Row, Column);
        Debug.Log("X: " + this.transform.position.x);
        Debug.Log("Y: " + this.transform.position.y);
        Debug.Log("Z: " + this.transform.position.z);
        Debug.Log("-------------------");
    }

    public Vector3 GetPositionInformationForItem(int row, int column)
    {
        Vector3 result = new Vector3((column * columnSpace), transform.position.y, (row * rowSpace));
    
        return result;
    }

Basically it will set the transform.Position of the selected MushroomPosition object based on the properties.

In the image below the method FixRowColumn was called, where the almost correct (some float rounding issue?) position values are shown in the debug window. Unfortunately it seems like the actual Position values are WAY off. X position is off by 604,1, while the others are not so crazy, but still a bit off

Anybody who has any ideas on why this.transform.Position is not the same as Transform.Position in the Inspector?

EDIT with answer: I found the answer. To set the position of an object to be correctly for child objects, you need to use this.transform.localPosition instead of this.transform.position

3 Answers

3

From the look of it, it seems like the position weirdness comes from the grandparent object. If I set the grandparent object to position 0, 0, 0 my object is now positioned correctly

Why would the the grandparent object change the actual values of my object?
I understand that by change the position of the grandparent, the object would also move around (but without changing the position values, as the object would still be in the same position compared to grandparent/parent object). But from my understanding, if I set the position of the object to something it would not change depending on parents/grandparents position
By this I mean, why would my objects position be set to it’s calculated position - position of grandparent?

EDIT with answer:
I found the answer. To set the position of an object to be correctly for child objects, you need to use this.transform.localPosition instead of this.transform.position

Thanks. This solved my issue.

I have the same problem in my code but this.transform.localPosition is the same as without can you pls help thank you very much!!!

transform.localPosition will get scaled by the scale of all ancestors. So for example if your parent object is scaled at (1, 0.5, 1), the transform.localPosition.y of the child object will be multiplied by 0.5. That's what happened to me.

–

Those don't really work for this situation? One example has you draw a straight image from point A to point B, and the other example has you draw a circle in a set radious without gaps in it. How are either of those accomplished easily with a particle system? Especially the first example, particle systems don't have a target point to direct their particles to, do they?

–