Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动编辑Unity3D碰撞器坐标?_Unity3d_Collision Detection_Unity3d 2dtools - Fatal编程技术网

手动编辑Unity3D碰撞器坐标?

手动编辑Unity3D碰撞器坐标?,unity3d,collision-detection,unity3d-2dtools,Unity3d,Collision Detection,Unity3d 2dtools,尝试创建一个2D游戏,其中我需要一个具有精确对称性的2D多边形碰撞器,因此我希望通过手动/数字方式设置坐标,而不是使用鼠标 如何做到这一点 我想游戏可以在启动时调整坐标,但如果可能的话,我更希望它们是正确的“设计时间”。另外,如果我想在启动时以编程方式进行,我希望有一个操作指南或合适的链接来提供帮助。您可以使用 也可以在inspector中启用调试模式并手动输入,但这仅适用于unity 4: 对于Unity 5,您可以使用此变通方法。将下面的脚本放到编辑器文件夹中 using UnityEng

尝试创建一个2D游戏,其中我需要一个具有精确对称性的2D多边形碰撞器,因此我希望通过手动/数字方式设置坐标,而不是使用鼠标

如何做到这一点


我想游戏可以在启动时调整坐标,但如果可能的话,我更希望它们是正确的“设计时间”。另外,如果我想在启动时以编程方式进行,我希望有一个操作指南或合适的链接来提供帮助。

您可以使用 也可以在inspector中启用调试模式并手动输入,但这仅适用于unity 4:

对于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);
    }
}
使用UnityEngine;
使用UnityEditor;
[CustomEditor(typeof(PolygonCallider2D))]
公共类PolygonCallider2dEditor:编辑器
{
公共覆盖无效OnInspectorGUI()
{
base.OnInspectorGUI();
var对撞机=(PolygonCallider2D)目标;
var points=collider.points;
对于(int i=0;i
我通过创建其他脚本以添加PolygonCallider2D来解决这个问题。此附加脚本用于编辑多边形点。所以,这是一个脚本来编辑其他和“编辑碰撞器”按钮停留

打印:

[RequireComponent(typeof(polygonCallider2D))]
公共类PolygonCallider2dManualPoins:MonoBehavior{}
[UnityEditor.CustomEditor(typeof(polygoncallider2dmanualpoins))]
公共类PolygonCallider2DManualPoinsEditor:UnityEdit.Editor{
公共覆盖无效OnInspectorGUI(){
base.OnInspectorGUI();
var collider=((PolygonCallider2dManualPoins)目标).GetComponent();
var points=collider.points;
对于(int i=0;i
嗯。。。已尝试调试模式,但仍无法访问点。我使用的是Unity 5.0.1f1。版本差异还是我需要做的不仅仅是设置调试模式?我的屏幕截图来自4.6.4f1,看起来他们在unity 5中禁用了此功能。更正了答案。很好!但是,Semms将删除标准图形编辑模式的按钮。有没有办法同时拥有这两种功能?要做到这一点,您需要从内部UnityEdit.PolygonCallider2dEditor类继承,这是不可能的。如果你真的想要它,你可以反编译它并保存为你自己的,但是你需要ColliderDeditorBase,它继承自ColliderReditorBase,它需要另一个类。。。你明白了。另一种可能是从Unity授权源代码。我明白了。这就行了。谢谢!
[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);
    }
}