Вручную редактировать координаты коллайдера Unity3D?

попытка создать 2D-игру, где мне нужен 2D-полигональный коллайдер с точной симметрией, поэтому я хотел бы установить координаты вручную/численно, а не с помощью мыши.

Как это можно сделать?

Я полагаю, что игра может настроить координаты при запуске, но я бы предпочел, чтобы они исправили "время разработки", если это возможно. Кроме того, если я должен сделать это программно при запуске, я был бы признателен за руководство или подходящую ссылку, чтобы помочь в этом.

2 ответов


вы можете установить вершины коллайдера в скрипте, используя PolygonCollider2D.точки или вы можете включить режим отладки в инспекторе и ввести их вручную, но это только для unity 4:

enter image description here

для Unity 5 Вы можете использовать этот способ. Поместите скрипт ниже в папку редактора.

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(PolygonCollider2D))]
public class PolygonCollider2DEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        var collider = (PolygonCollider2D)target;
        var points = collider.points;
        for (int i = 0; i < points.Length; i++)
        {
            points[i] = EditorGUILayout.Vector2Field(i.ToString(), points[i]);
        }
        collider.points = points;
        EditorUtility.SetDirty(target);
    }
}

Я решаю это, создавая другой скрипт для добавления с PolygonCollider2D. Это дополнительный скрипт, который редактирует полигональные точки. Итак, это скрипт для редактирования другой и кнопки "Редактировать коллайдер".

печать:http://i.stack.imgur.com/UN2s8.jpg

[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonCollider2DManualPoins : MonoBehaviour { }

[UnityEditor.CustomEditor(typeof(PolygonCollider2DManualPoins))]
public class PolygonCollider2DManualPoinsEditor : UnityEditor.Editor {
    public override void OnInspectorGUI() {
        base.OnInspectorGUI();
        var collider = ((PolygonCollider2DManualPoins)target).GetComponent<PolygonCollider2D>();
        var points = collider.points;
        for (int i = 0; i < points.Length; i++){
            points[i] = UnityEditor.EditorGUILayout.Vector2Field(i.ToString(), points[i]);
        }
        collider.points = points;
        UnityEditor.EditorUtility.SetDirty(collider);
    }
}