手动编辑 Unity3D 对撞机坐标?
Manually edit Unity3D collider coordinates?
尝试创建一个 2D 游戏,我需要一个具有精确对称性的 2D 多边形对撞机,所以我想通过 hand/numerically 设置坐标,而不是使用鼠标。
如何做到这一点?
我想游戏可以在启动时调整坐标,但如果可能的话,我更愿意让它们更正 "design time"。此外,如果我要在启动时以编程方式执行此操作,我将不胜感激操作方法或合适的 link 来提供帮助。
您可以使用 PolygonCollider2D.points 在脚本中设置碰撞顶点
或者您可以在检查器中启用调试模式并手动输入它们,但这仅适用于 unity 4:
对于 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);
}
}
我通过创建要与 PolygonCollider2D 添加的其他脚本来解决此问题。这个编辑多边形点的额外脚本。所以,这是一个编辑其他和 "Edit Collider" 按钮的脚本。
打印: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);
}
}
尝试创建一个 2D 游戏,我需要一个具有精确对称性的 2D 多边形对撞机,所以我想通过 hand/numerically 设置坐标,而不是使用鼠标。
如何做到这一点?
我想游戏可以在启动时调整坐标,但如果可能的话,我更愿意让它们更正 "design time"。此外,如果我要在启动时以编程方式执行此操作,我将不胜感激操作方法或合适的 link 来提供帮助。
您可以使用 PolygonCollider2D.points 在脚本中设置碰撞顶点 或者您可以在检查器中启用调试模式并手动输入它们,但这仅适用于 unity 4:
对于 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);
}
}
我通过创建要与 PolygonCollider2D 添加的其他脚本来解决此问题。这个编辑多边形点的额外脚本。所以,这是一个编辑其他和 "Edit Collider" 按钮的脚本。
打印: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);
}
}