namespace script {
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
///
/// 移动
///
public class Ts : MonoBehaviour {
public Texture2D mouseTexture; //鼠标样式纹理图
public Vector3 mousePos;
void Start() {
}
void OnMouseEnter() {
//更换鼠标的样式
Cursor.SetCursor(this.mouseTexture, Vector2.zero, CursorMode.Auto);
}
void OnMouseExit() {
//恢复回鼠标的样式
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
}
//通过鼠标移动物体Cube
IEnumerator OnMouseDown() {
Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position); //三维物体坐标转屏幕坐标
//将鼠标屏幕坐标转为三维坐标,再计算物体位置与鼠标之间的距离
var offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));
print("down");
while (Input.GetMouseButton(0)) {
Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);
var curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;
transform.position = curPosition;
yield return new WaitForFixedUpdate();
}
}
}
}
另外的实现方式
// 拖拽
private void OnMouseDrag() {
//得到摄像机到物体的向量
Vector3 CO_Direction = transform.position - Camera.main.transform.position;
//得到摄像机与物体所在平面的距离
float cPlane = Vector3.Dot(CO_Direction, Camera.main.transform.forward);
transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, cPlane));
}
摄影机跟随物体旋转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* 摄影机绕物体旋转
*/
public class ThirdPCamC : MonoBehaviour {
public float mouseSensitivity = 2;
public Transform targetTrans; // 跟随的物体
public Transform thirdPCamAxle; // 轴心
Vector3 thirdPCamEuler;
Camera thirdPCam;
float camForwardMaxDistance = 9;
float camForwardDistance;
float camBackDistance;
void Start() {
thirdPCamEuler = thirdPCamAxle.localEulerAngles;
thirdPCam = Camera.main;
}
void Update() {
//以 0.05f 的步幅增加/减少。GetAxisRaw 立即从 0 变为 1 或 -1,因此没有步幅 ,往左是-,右是+
// print(Input.GetAxis("Mouse X"));
thirdPCamAxle.position = targetTrans.position;
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
thirdPCamEuler.y += mouseX;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
thirdPCamEuler.x += mouseY;
// if (thirdPCamEuler.x < 90 && mouseY > 0) { thirdPCamEuler.x += mouseY; }
// if (thirdPCamEuler.x > -90 && mouseY < 0) { thirdPCamEuler.x += mouseY; }
thirdPCamAxle.localEulerAngles = thirdPCamEuler;
}
}