问题描述
最近,我在使用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 (将#修改为@)