控制拖动物体移动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveTree : MonoBehaviour
{
GameObject gobj = null;
Plane objPlane; Vector3 mo;
Ray GenerateMouseRay()
{
Vector3 mousePosFar = new Vector3(
Input.mousePosition.x,
Input.mousePosition.y,
Camera.main.farClipPlane);
Vector3 mousePosNear = new Vector3(
Input.mousePosition.x,
Input.mousePosition.y,
Camera.main.nearClipPlane);
Vector3 mousePosF = Camera.main.ScreenToWorldPoint(mousePosFar);
Vector3 mousePosN = Camera.main.ScreenToWorldPoint(mousePosNear);
Ray mr = new Ray(mousePosN, mousePosF - mousePosN); return mr;
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray mouseRay = GenerateMouseRay();
RaycastHit hit;
if (Physics.Raycast(mouseRay.origin, mouseRay.direction, out hit))
{
gobj = hit.transform.gameObject;
objPlane = new Plane(Camera.main.transform.forward * -1, gobj.transform.position);
//calc mouse offser
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
float rayDistance;
objPlane.Raycast(mRay, out rayDistance);
mo = gobj.transform.position - mRay.GetPoint(rayDistance);
}
}
else if (Input.GetMouseButton(0) && gobj)
{
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
float rayDistance;
if (objPlane.Raycast(mRay, out rayDistance))
{
gobj.transform.position = mRay.GetPoint(rayDistance) + mo;
}
else if (Input.GetMouseButtonUp(0) && gobj)
{
gobj = null;
}
}
}
}