2015-04-23 23 views
9

Tam simetriye sahip bir 2D çokgen çarpıştırıcısına ihtiyacım olan bir 2D oyun oluşturmaya çalışıyorum, bu yüzden bir fare kullanmak yerine koordinatları el ile/sayısal olarak ayarlamak istiyorum.Unity3D collider koordinatlarını elle düzenleyin?

Bu nasıl yapılabilir?

Oyunun başlangıçta koordinatları ayarlayabileceğini varsayalım, ancak mümkünse "tasarım zamanı" nı düzeltmeyi tercih ederim. Ayrıca, programlı olarak başlangıçta yapacağım takdirde, bunun nasıl yapılacağına ya da uygun bir bağlantıya sahip olmanızı takdir ediyorum.

cevap

11

Sen PolygonCollider2D.points kullanarak komut çarpıştırıcı köşe ayarlayabilir veya denetiminde hata ayıklama modunu etkinleştirmek ve manuel olarak girebilirsiniz, ancak bu sadece birlik 4 içindir:

enter image description here

Unity 5 için kullanabileceğiniz Bu geçici çözüm. Aşağıdaki komut dosyasını Editör klasörüne yerleştirin.

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); 
    } 
} 
+0

http://i.stack.imgur.com/UN2s8.jpg Uhm ... noktalarını erişemez hala hata ayıklama modu çalıştı ama. Unity 5.0.1f1 kullanıyorum. Sürüm farkı veya ayarlanmış Debug modundan başka bir şey yapmam gerekiyor mu? –

+0

Ekran görüntüsüim 4.6.4f1 iken, bu işlevsellik birliğini 5. olarak devre dışı bırakmış görünüyorlar. Yanıtı düzeltildi. – Olivia

+0

Güzel! Yine de, standart grafik düzenleme modu için düğmeyi kaldıracak olan semmeler. İkisi de var mı? –

2

Bunu PolygonCollider2D ile eklenecek başka bir komut dosyası oluşturarak çözüyorum. Çokgen noktalarını düzenleyen bu ekstra komut dosyası. Yani, diğer düzenlemek ve "Edit Collider" düğmesini kalmak için bir komut dosyası.

baskı:

[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); 
    } 
}