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

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.
– remy5623Those 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?
– ArchSinccubus