当前位置: 首页 > article >正文

Unity——鼠标控制摄像机移动,(距离)缩放,旋转

如题,在此简单记录主要代码,使用时可以视情况自己再封装。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoScal : MonoBehaviour {

    public float xSpeed = 100;//旋转速度
    public float ySpeed = 100;
    public float yMinLimit = -20;//旋转限制
    public float yMaxLimit = 80;
    public float x = 0.0f;
    public float y = 0.0f;
    public float scroll = 3;
    public float axisraw = 10;

    void Start()
    {
        Vector2 angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;

    }

    void Update()
    {
        if (Input.GetMouseButton(1))
        {
                x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
                y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
        }
        Ctrl_Cam_Move();              
    }
     //镜头的远离和接近
    private void Ctrl_Cam_Move()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 p0 = Camera.main.transform.position;
            Vector3 p01 = p0 - Camera.main.transform.right * Input.GetAxisRaw("Mouse X") * axisraw * Time.timeScale;
            Vector3 p03 = p01 - Camera.main.transform.up * Input.GetAxisRaw("Mouse Y") * axisraw * Time.timeScale;
            Camera.main.transform.position = p03;
        }
        else
        {
            float wheel = Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * scroll;
            transform.Translate(Vector3.forward * wheel);
        }        
                   
    }

    public void LateUpdate()
    {
        y = ClampAngle(y, yMinLimit, yMaxLimit);
        Quaternion rotation = Quaternion.Euler(y, x, 0);
        transform.rotation = rotation;

    }

    /// <summary>
    /// Y值的限制
    /// </summary>
    float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
            angle += 360;

        if (angle > 360)
            angle -= 360;

        return Mathf.Clamp(angle, min, max);
    }
}


http://www.kler.cn/a/161587.html

相关文章:

  • 前端--> nginx-->gateway产生的跨域问题分析
  • Android Framework AMS(16)进程管理
  • 带你掌握springboot集成SpringSecurity安全框架
  • Unity3D
  • docker之容器设置开机自启(4)
  • 【Linux】进程池实现指南:掌控并发编程的核心
  • Linux篇之在Centos环境下搭建Nvidia显卡驱动
  • MacOS VSCode 配置远程服务器ssh remote链接,并上传文件文件服务器
  • 力扣150题 |80.删除有序数组中的重复项II
  • Boost:asio多io_service,多线程run
  • Unity中Batching优化的GPU实例化(3)
  • 万户协同办公平台ezoffice wpsservlet接口任意文件上传漏洞
  • uni-app 微信小程序之好看的ui登录页面(四)
  • JM中ref_pic_list_modification bug记录
  • 金融行业文件摆渡,如何兼顾安全和效率?
  • 视频封面提取:精准截图,如何从指定时长中提取某一帧图片
  • 性能优化一条龙
  • Spring Boot的日志
  • 【PyTorch】模型的基本操作
  • html电子签名
  • vue+echarts实现桑吉图的效果
  • 策略模式终极解决方案之策略机
  • Jquery easyui异步提交表单的两种方式
  • Vue练习 v-model 指令在状态和表单输入之间创建双向绑定
  • Vue3集成ThreeJS实现3D效果,threejs+Vite+Vue3+TypeScript 实战课程【一篇文章精通系列】
  • stm32f103使用hal库函数读写内部flash