一.如何将插件中的世界轴变为本地轴向
1.首先找到抽象类Gizmo 添加一个参数 和一个方法
private bool _localTransform;
public bool LocalTransform
{
get { return _localTransform; }
set
{
_localTransform = value;
}
}
public void SetGizmoLocalAxes(bool Islocal)
{
List<GameObject> topParents = GetParentsFromControlledObjects(true);
if (Islocal&&topParents.Count > 0)
{
_gizmoTransform.right = topParents[0].transform.right;
_gizmoTransform.up = topParents[0].transform.up;
_gizmoTransform.forward = topParents[0].transform.forward;
}
else
{
_gizmoTransform.right = Vector3.right;
_gizmoTransform.up = Vector3.up;
_gizmoTransform.forward = Vector3.forward;
}
}
2.找到TranslationGizmoInspectorGUI类添加gui显示项,让它能够在面板显示出来
newBoolValue = EditorGUILayout.ToggleLeft("LocalTransform", _translationGizmo.LocalTransform);
if (newBoolValue != _translationGizmo.LocalTransform)
{
UnityEditorUndoHelper.RecordObjectForInspectorPropertyChange(_translationGizmo);
_translationGizmo.LocalTransform = newBoolValue;
}
3.最后一步 还是在Gizmo 类中找到 protected int[] GetSortedGizmoAxesIndices()这个方法, 把上面刚刚写的SetGizmoLocalAxes方法引用到这个方法里,写在第一行
protected int[] GetSortedGizmoAxesIndices()
{
SetGizmoLocalAxes(_localTransform);
}
这样就ok了
二. 点击ui能够选中物体
一般场景ui脚本绑定一个物体,需要点击ui自动选中物体,包括插件的轴和框选范围shader,
(1)第一种方法
使用插件给的固有方法
FindObjectOfType<EditorObjectSelection>().ClearSelection(true);
FindObjectOfType<EditorObjectSelection>().AddObjectToSelection(gameObject, true);
(2)第二种方法
我们只需要修改EditorObjectSelection场景中 OnInputDeviceFirstButtonDown方法
public void OnInputDeviceFirstButtonDown(GameObject AddSelect=null)
{
}
最后试一试吧,在UI里调用这个函数
FindObjectOfType<EditorObjectSelection().OnInputDeviceFirstButtonDown(gameObject);
|