Unity3D旋转

简介: Unity3D旋转

前提将脚本挂载到Camera上

拖拽的原理 :点击左键记录坐标P1,滑动记录当前坐标P2

计算P1、P2的坐标差dx、dy,
                 根据dx和dy正负确定移动方向

缩放原理:根据滚轮控制摄像机视野和摄像机的正交投影

旋转原理:鼠标右键不太好控制,于是指定了键盘

就是直接给旋转赋值

完整代码如下:

using System.Collections; using System.Collections.Generic; using UnityEngine;
public class MouseMoveandScale : MonoBehaviour { Vector2 p1, p2,p3,p4;//用来记录鼠标的位置,以便计算移动距离 void Start () {
}  
void Update () {
    translationDrag();
    zoom();
    rotate();
}
private void translationDrag()
{
    //通过鼠标X坐标拖动场景
    if (Input.GetMouseButtonDown(0))
    {
        //鼠标左键按下时记录鼠标位置p1 
        p1 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    }
    if (Input.GetMouseButton(0))
    {
        //鼠标左键拖动时记录鼠标位置p2   
        p2 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        float dx = (float)0.8 * (p2.x - p1.x);
        float dy = (float)0.8 * (p2.y - p1.y);
        //鼠标左右移动  
        if (dx >= 0)
        {
            transform.Translate(-dx * Vector3.right * Time.deltaTime);
        }
        else
        {
            transform.Translate(dx * Vector3.left * Time.deltaTime);
        }
         //上下 移动
        if (dy >= 0)
        {
            transform.Translate(dy * Vector3.down * Time.deltaTime);
        }
        else
        {
            transform.Translate(-dy * Vector3.up * Time.deltaTime);
        }
    }
}
private void zoom() 
{
    //通过鼠标滚轮实现场景缩放
    //鼠标滚轮的效果
    //Camera.main.fieldOfView 摄像机的视野
    //Camera.main.orthographicSize 摄像机的正交投影
    //Zoom out
    if (Input.GetAxis("Mouse ScrollWheel") < 0)
    {
        if (Camera.main.fieldOfView <= 100)
            Camera.main.fieldOfView += 2;
        if (Camera.main.orthographicSize <= 20)
            Camera.main.orthographicSize += 0.5F;
    }
    //Zoom in
    if (Input.GetAxis("Mouse ScrollWheel") > 0)
    {
        if (Camera.main.fieldOfView > 2)
            Camera.main.fieldOfView -= 2;
        if (Camera.main.orthographicSize >= 1)
            Camera.main.orthographicSize -= 0.5F;
    }
}
private void rotate() 
{
    if (Input.GetKey(KeyCode.C))
    {
        transform.Rotate(0, 0, -25 * Time.deltaTime, Space.Self);
    }
    if (Input.GetKey(KeyCode.Z))
    {
        transform.Rotate(0, 0, 25 * Time.deltaTime, Space.Self);
    }
    //通过鼠标X坐标拖动场景
    if (Input.GetMouseButtonDown(1))
    {
        //鼠标左键按下时记录鼠标位置p1 
        p3 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    }
    if (Input.GetMouseButton(1))
    {
        //鼠标左键拖动时记录鼠标位置p2   
        p4 = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
        float dx = (float)0.8 * (p4.x - p3.x);
        float dy = (float)0.8 * (p4.y - p3.y);
        if (dx >= 0)
        {
            transform.Rotate(0, 0, -25 * Time.deltaTime, Space.Self);
        }
        else
        {
            transform.Rotate(0, 0, 25 * Time.deltaTime, Space.Self);
        }
        //上下 移动
        if (dy >= 0)
        {
            transform.Rotate(0, 0, -25 * Time.deltaTime, Space.Self);
        }
        else
        {
            transform.Rotate(0, 0, 25 * Time.deltaTime, Space.Self);
        }
    }
}


相关文章
|
11月前
【Unity3D--自由观察模型】模型自动旋转+触屏旋转和缩放
展示3D模型,同时实现模型自动旋转和触屏旋转和缩放
237 0
|
11月前
|
图形学
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
unity基础-坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
259 0
|
图形学
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
933 0
鼠标控制物体旋转、移动、缩放(Unity3D)
Unity3D对于鼠标操作物体的旋转、移动、缩放的功能点使用的比较多。 今天就分享如何使用Unity实现鼠标对于物体的旋转、移动、缩放。
Unity-移动旋转
move CharacterController:Rigidbody:AddForce,MovePositionTranslate:不检测碰撞rotate Rotation:Rigidbody:MoveRotation示例 王者荣耀式: using System.
1069 0
|
API C#
Unity常用旋转API
Unity中的旋转通常可以用Transform 直接控制和 rotation 控制两种方式。 一、Transform控制(工程中的scene1) 1.1 Transform.Rotate 旋转某个角度 函数定义 [csharp] view plain copy public void Rotate...
11653 0
|
图形学
Unity在UI界面上显示3D模型/物体,控制模型旋转
Unity3D物体在UI界面的显示 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —...
5049 0
|
图形学
Unity中的平移 缩放 旋转
Unity中的平移 缩放 旋转 1.最近想实现Unity中的平移 缩放 旋转功能, 类似于Unity编辑器状态下的效果.尝试了好几个方式,效果都有瑕疵,网友们谁有好的实现方式,请教我. 下面是我的一种实现方式: using System.
2195 0