Unity3D鼠标操作实现旋转(相机围绕目标物体)、缩放观察物体

更新时间:2023-06-17 11:08:34 阅读: 评论:0

Unity3D⿏标操作实现旋转(相机围绕⽬标物体)、缩放观察物
//放在摄像头上,实现旋转、缩放观察物体
using UnityEngine;
public class BaCam : MonoBehaviour
公务员照片尺寸
{
dad是什么意思中文  ///缩放距离
  public float ZoomSpeed=30;
  //拖动速度
  public float MovingSpeed=0.5f;
  //视⾓和摆动速度
  public float RotateSpeed=1;
  //摄像机旋转速度
  public float distance=30;
  public Transform rotateCenter;
public Vector3 mouPos1;                          //记录⿏标点下去瞬间的位置
public Vector3 mouPos2;                          //记录⿏标任何时刻的位置
public Quaternion start_qua;                        //⾓度使⽤四元数
public Vector3 start_pos;                          //位置坐标
// U this for initialization
void Start()
{
/
华夏希望c
/记录相机开始的⾓度与位置
start_qua = ation;
start_pos = transform.position;
}
  Quaternion rotation;
  Vector3 position;
  float delta_x,delta_y,delta_z;
  float delta_rotation_x,delta_rotation_y;
// Update is called once per frame
void Update()
{水果的英文
扔鸡蛋
    //拖动
    if(Input.GetMouButton(2))
    {
      delta_x=Input.GetAxis("Mou X")*MovingSpeed;
      delta_y=Input.GetAxis("Mou Y")*MovingSpeed;
      rotation=Quaternion.Euler(ation.eulerAngles.y,0);
      transform.position=rotation*new Vector3(-delta_x,-delta_y,0)+transform.position;
    }
    //缩放
    if(Input.GetAxis("Mou ScrollWheel")!=0)
    {
      delta_z=-Input.GetAxis("Mou ScrollWheel")*ZoomSpeed;
      transform.Translate(0,0,-delta_z);
      //distance+=delta_z;
    }
//记录⿏标实时移动的点
mouPos2 = uPosition;
    //旋转中⼼为⾃⾝(相机)
    if(Input.GetMouButton(1))
    {
      delta_rotation_x=Input.GetAxis("Mou X")*RotateSpeed;
      delta_rotation_y=-Input.GetAxis("Mou Y")*RotateSpeed;
      ation*new Vector3(0,0,distance)+transform.position;
polytron      transform.Rotate(0,delta_rotation_x,0,Space.World);
      transform.Rotate(delta_rotation_y,0,0);
      transform.ation*new Vector3(0,0,-distance)+position;
    }
believe什么意思
  }
void OnGUI()
{
//⿏标左键
if (Input.GetMouButton(0))
{
mouPos1 = uPosition;            //记录⿏标点击瞬间的点
Vector3 offt = mouPos1 - mouPos2;    //记录⿏标移动的距离灵修培训班
//上下与左右旋转分开,绝对值⽐较
if (Mathf.Abs(offt.x) > Mathf.Abs(offt.y))
{
//以物体上⽅为旋转轴(Vector3.up == new Vector3(0, 1.0f, 0)),物体左右旋转⾓度与⿏标横向移动距离相关,变化速率2f
transform.RotateAround(new Vector3(0, 0, 0), Vector3.up, Time.deltaTime * offt.x * 2f);
         // transform.RotateAround(rotateCenter.localPosition, Vector3.up, Time.deltaTime * offt.x * 2f); //旋转中⼼为⽬标物体rotateCenter            }
el
{
//以世界坐标右⽅为旋转轴(transform.right,是会变化的量),物体上下旋转⾓度与⿏标纵向移动距离相关,变化速率2f
transform.RotateAround(new Vector3(0, 0, 0), transform.right, -Time.deltaTime * offt.y * 2f);//旋转中⼼为世界
// transform.RotateAround(rotateCenter.localPosition, transform.right, -Time.deltaTime * offt.y * 2f);//旋转中⼼为⽬标物体rotateCenter
}
//打印数据transform.right变量
Debug.Log("pos: " + transform.right);
}
////⿏标中键,物体恢复原来的⾓度与位置
// if (Input.GetMouButton(2))
/
/ {
//  ation = start_qua;
//  transform.position = start_pos;corporation是什么意思
// }
////⿏标中键滑动,物体缩放,摄像头前后移动距离范围在2f~5f,变化速率3f
// if (Input.GetAxis("Mou ScrollWheel") > 0f && Vector3.Distance(transform.position, new Vector3(0, 0, 0)) > 2f)
// {
//  transform.Translate(Vector3.forward * Time.deltaTime * Input.GetAxis("Mou ScrollWheel") * 5f);
// }
// if (Input.GetAxis("Mou ScrollWheel") < 0f && Vector3.Distance(transform.position, new Vector3(0, 0, 0)) <5f)
// {
// transform.Translate(Vector3.back * Time.deltaTime * (-Input.GetAxis("Mou ScrollWheel")) * 5f);beard
//}//
}
}

本文发布于:2023-06-17 11:08:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/975064.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:旋转   物体   移动   距离   缩放
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图