2015-04-23 118 views
9

试图创建一个2D游戏,我需要一个具有精确对称性的2D多边形对撞机,所以我想用手/数字来设置坐标,而不是使用鼠标。手动编辑Unity3D碰撞器坐标?

这怎么办?

我想游戏可以在启动时调整坐标,但如果可能的话,我宁愿让它们纠正“设计时间”。此外,如果我要在启动时以编程方式执行此操作,我将非常感谢这样的指导或合适的链接。

回答

11

您可以在脚本中使用PolygonCollider2D.points 设置撞机的顶点,也可以在检查启用调试模式和手动输入,但是这仅仅是为了统一4:

enter image description here

对于Unity 5,你可以使用此解决方法。将脚本放置在Editor文件夹下面。

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

呃... ...试过调试模式,但仍然无法访问的点。我正在使用Unity 5.0.1f1。版本差异还是我需要做更多比设置调试模式? –

+0

我的截图是从4.6.4f1开始的,看起来他们统一禁用了这个功能。5.更正了答案。 – Olivia

+0

不错!尽管如此,Semms将删除标准图形编辑模式的按钮。任何方式都有? –

2

我通过创建其他脚本来添加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); 
    } 
}