如何将对象捕捉到顶点位置

问题描述

最近,我在使用Unity的顶点捕捉工具时遇到了很多问题,因此我决定制作自己的简单工具。我已经让一切都期待最后一件事,那就是将对象移动到选定的顶点。

在下面您可以看到完整的脚本,它的工作方式是拖放目标对象和参考对象。选择目标顶点,然后参考顶点和目标应对齐到所选参考顶点。不过,我不确定该怎么做。

这不是最好的脚本,但是目前我只是想让它工作,然后可以对其进行一些改进。

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class SnappingTool : EditorWindow
{
    GameObject target;
    GameObject reference;

    bool selected;

    [MenuItem("Window/Snapping Tool")]
    public static void OpenWindow()
    {
        var window = EditorWindow.Getwindow<SnappingTool>();
        window.Show();
    }

    private void OnEnable()
    {
        SceneView.duringSceneGui += OnSceneGUI;
    }
    private void Ondisable()
    {
        SceneView.duringSceneGui -= OnSceneGUI;
    }

    private void OnGUI()
    {
        target = (GameObject)EditorGUILayout.ObjectField(new GUIContent("Target"),target,typeof(GameObject),allowSceneObjects: true);
        reference = (GameObject)EditorGUILayout.ObjectField(new GUIContent("Reference"),reference,allowSceneObjects: true);
    }

    void OnSceneGUI(SceneView sv)
    {
        if (!target || !reference) { return; }

        var tFilter    = target.GetComponent<MeshFilter>();
        var rFilter    = reference.GetComponent<MeshFilter>();

        if (!tFilter || !rFilter) { return; }

        if (selected)
        {
            DrawHandles(reference,rFilter.sharedMesh);
        }
        else
        {
            DrawHandles(target,tFilter.sharedMesh);
        }
    }
    void DrawHandles(GameObject obj,Mesh mesh)
    {
        Matrix4x4 localToWorld = obj.transform.localToWorldMatrix;

        for (int i = 0; i < mesh.vertices.Length; i++)
        {
            var pos         = localToWorld.MultiplyPoint3x4(mesh.vertices[i]);
            Handles.color   = Color.red;
            bool pressed = Handles.Button(pos,Quaternion.identity,.025f,0.025f,Handles.SphereHandleCap);

            if (pressed && !selected)
            {
                selected = true;
            }
            if (pressed && selected)
            {
                selected = false;
                //snap.
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...