Vector3的拖拽
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControlTheMouseMove : MonoBehaviour {
private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标
private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标
private Transform _trans;// 目标物体的空间变换组件
private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标
private Vector3 _vec3Offset;// 偏移
GameObject obj;
float speed = 5f;
bool isClick = false;
private Transform m_Transform;
// Use this for initialization
void Awake() {
_trans = transform;
}
void Start () {
m_Transform = gameObject.GetComponent<Transform>();
obj = GameObject.Find("Cube");
}
// Update is called once per frame
void Update () {
MoveControl();
if(Input.GetKey(KeyCode.Mouse1))
{
isClick = true;
}
if(isClick)
{
obj.transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
void MoveControl()
{
m_Transform.Rotate(Vector3.up, Input.GetAxis("Mouse X"));
m_Transform.Rotate(Vector3.left, Input.GetAxis("Mouse Y"));
m_Transform.Rotate(Vector3.forward, Input.GetAxis("Mouse forward"));
m_Transform.Rotate(Vector3.back, Input.GetAxis("Mouse back"));
}
IEnumerator OnMouseDown()
{
// 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标
_vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);
// 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
_vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
// 计算目标物体与鼠标物体在世界空间中的偏移量
_vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);
// 鼠标左键按下
while (Input.GetMouseButton(0))
{
// 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标)
_vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);
// 把鼠标的屏幕空间坐标转换到世界空间坐标(Z值使用目标物体的屏幕空间坐标),加上偏移量,以此作为目标物体的世界空间坐标
_vec3TargetWorldSpace = Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace) + _vec3Offset;
// 更新目标物体的世界空间坐标
_trans.position = _vec3TargetWorldSpace;
// 等待固定更新
yield return new WaitForFixedUpdate();
}
}
}
Vector2的拖拽
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class ImageMove : MonoBehaviour, IBeginDragHandler, IDragHandler {
//鼠标第一次点击的位置
Vector2 firstMousePos = Vector3.zero;
//鼠标拖拽的位置
Vector2 secondMousePos = Vector3.zero;
//偏移量
Vector3 offsetPos = Vector3.zero;
public void OnBeginDrag(PointerEventData eventData) {
firstMousePos = Input.mousePosition;
print(123);
}
public void OnDrag(PointerEventData eventData) {
secondMousePos = Input.mousePosition;
//需要移动的 向量
offsetPos = secondMousePos - firstMousePos;
float x = transform.localPosition.x;
float y = transform.localPosition.y;
//向量偏移
x = x + offsetPos.x; y = y + offsetPos.y;
//x = Mathf.Clamp(x, 380, 1550);
//y = Mathf.Clamp(y, 210, 850);
transform.localPosition = new Vector3(x, y, transform.localPosition.z);
firstMousePos = secondMousePos;
print(firstMousePos);
print(secondMousePos);
}
}
网友评论