я бы попробовал так
Код
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(Transform))]
public class Allign : Editor
{
Transform obj;
void Awake()
{
obj = target as Transform;
}
void OnSceneGUI ()
{
if(obj.transform.position.x < (1.0e-05) && obj.transform.position.x > (-1.0e-05)) obj.transform.position = new Vector3(0,obj.transform.position.y,obj.transform.position.z);
if(obj.transform.position.y < (1.0e-05) && obj.transform.position.y > (-1.0e-05)) obj.transform.position = new Vector3(obj.transform.position.x,0,obj.transform.position.z);
if(obj.transform.position.z < (1.0e-05) && obj.transform.position.z > (-1.0e-05)) obj.transform.position = new Vector3(obj.transform.position.x,obj.transform.position.y,0);
}
}
код не тестил именно для e-0... ввиду отсутствия таковых в текущих проектах.
для обычных значений работает, причем для выбранного объекта, т.е. чтобы координаты объекты сбросились на ноль нужно выбрать объект хотя бы раз
можно вместо "1.0e-05" использовать превращение этого значения в строку, затем поиск e в строке, и если есть то... задавать новую позицию объекту. но это лишь размышленияДобавлено (06 апреля 2015, 10:35)
---------------------------------------------
кста, при помощи этого кода в инспекторе можно задавать запретные зоны, в которых не разрешается размещать объекты.
заменив if (obj.transform.position.x < (1.0e-05) && obj.transform.position.x > (-1.0e-05))... на obj.transform.position.x < (10.0f) && obj.transform.position.x > (-10.0f))....
и для оставшихся двух осей, то получим кубик 10х10х10, в который в редакторе не удастся разместить объект.
скрипт может быть улучшен, если учитывать размеры самого объекта, поскольку в настоящий момент учитывается лишь координата центра объекта (pivot егойный).
может, кому пригодится...