重要是做一个记录,思路不是太好,也不一定符合其他应用场景,应用不建议参考。
一、说明
场景:
有多个物体(模型)
目的:
平移模型、旋转模型、缩放模型
要求:
可单独操作某一个模型,而且不影响其他模型的操作(平移单独平移,旋转单独旋转)
点击在物体上操作的是平移,点击在物体外操作的是旋转(前提是要确定点击物体
)
二、实现
平移代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Position_Script : MonoBehaviour {
//偏移值
Vector3 m_Offset;
//当前物体对应的屏幕坐标
Vector3 m_TargetScreenVec;
//记录上一个点击的物体名字
public string objectName = "Cube";
private void Start()
{
}
private void Update()
{
//当鼠标点击左键或者手触摸屏幕
if (Input.GetMouseButtonDown(0)) //这个接口可能会报一个警告,不影响使用
{
//也可以使用另一个接口,Input.GetTouch(0)
//确定点击物体
ClickObject();
}
}
private IEnumerator OnMouseDown() //这个函数是在鼠标按下的时候执行
{
//当前物体对应的屏幕坐标
m_TargetScreenVec = Camera.main.WorldToScreenPoint(transform.position);
//偏移值=物体的世界坐标,减去转化之后的鼠标世界坐标(z轴的值为物体屏幕坐标的z值)
m_Offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3
(Input.mousePosition.x, Input.mousePosition.y, m_TargetScreenVec.z));
//当鼠标左键点击
while (Input.GetMouseButton(0))
{
//当前坐标等于转化鼠标为世界坐标(z轴的值为物体屏幕坐标的z值)+ 偏移量
transform.position = Camera.main.ScreenToWorldPoint(new