效果展示
拖拽可操作的元件
选中操作元件,挂载拖拽脚本SwitchDrag 。鼠标左键按住进行拖拽,鼠标右键接触拖拽。
using cakeslice;
using UnityEngine;
public class SwitchDrag : MonoBehaviour
{
public bool isdrag = false;//用来判断物体是否被拖拽
Vector3 targetPos;
Vector3 lastPos;
Vector3 originalPos;
private Outline outline;
private SwitchPart switchPart;
public bool flag = false;
void Start()
{
switchPart = GetComponent<SwitchPart>();
originalPos = this.transform.position;
}
//当鼠标移动到物体上
void OnMouseEnter()
{
if (!isdrag)
{
outline = GetComponent<Outline>();
outline.eraseRenderer = false;
}
}
//当鼠标按下物体
void OnMouseDown()
{
if (!isdrag)
{
lastPos = Camera.main.ScreenToViewportPoint(Input.mousePosition) - Camera.main.WorldToViewportPoint(transform.position);
}
//flag = !flag;
flag = true;
}
private void OnMouseOver()
{
if (Input.GetMouseButtonDown(1))
{
isdrag = false;
flag = false;
this.transform.position = originalPos;
}
}
//当鼠标拖拽物体
void OnMouseDrag()
{
targetPos = Camera.main.ViewportToWorldPoint(Camera.main.ScreenToViewportPoint(Input.mousePosition) - lastPos);
transform.position = new Vector3(targetPos.x, targetPos.y, targetPos.z);
isdrag = true;
SwitchOperation.Instance.currentIndex = SwitchOperation.Instance.GetSwitchParts().FindIndex(p => p.ObjName == switchPart.mSwitchParts.ObjName);
}
//当鼠标离开物体
void OnMouseExit()
{
if (!isdrag)
{
outline = GetComponent<Outline>();
outline.eraseRenderer = true;
}
}
void OnMouseUp()
{
isdrag = false;
}
}
修改SwitchOperation 在Initdata为元件增加SwitchDrag。
t.gameObject.AddComponent<SwitchDrag>();
下篇文章设置标注隐藏显示。