using UnityEngine;
using System.Collections;
using UnityEditor;
public class PressHold2Drag : MonoBehaviour
{
RaycastHit hit;
Ray ray;
bool isDrag; //是否拖拽
GameObject target; //移动目标
Vector3 offset; //偏移量
void Update()
{
//通过鼠标点击的位置生成射线
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButton(0))
{
Vector3 mousePos = Input.mousePosition;
if (!isDrag)
{
//碰撞检测
if (Physics.Raycast(ray, out hit))
{
//绘制射线,方便观察
Debug.DrawLine(ray.origin, hit.point, Color.red, 5f);
target = hit.collider.gameObject;
//将射线碰撞到的物体从世界坐标转为屏幕坐标
Vector3 screenTarget = Camera.main.WorldToScreenPoint(target.transform.position);
mousePos.z = screenTarget.z;
//计算点击位置和目标的偏移量
offset = target.transform.position - Camera.main.ScreenToWorldPoint(mousePos);
isDrag = true;
}
}
else
{
Vector3 screenTarget = Camera.main.WorldToScreenPoint(target.transform.position);
mousePos.z = screenTarget.z;
//将mousePos从屏幕坐标转为世界坐标 + 偏移量 = 要移动的物体坐标
target.transform.position = Camera.main.ScreenToWorldPoint(mousePos) + offset;
}
}
else
{
isDrag = false;
}
//UGUI中的拖拽
//transform.GetComponent<RectTransform>().position = Input.mousePosition;
}
}
点击物体并跟随鼠标移动
最新推荐文章于 2024-07-17 19:50:36 发布