Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理

185 篇文章 97 订阅
订阅专栏

 

Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理

 

目录

Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理

一、简单介绍

二、实现原理

三、使用注意

四、效果预览

五、实现步骤

六、关键代码


 

一、简单介绍

Unity中的一些基础知识点。

本节介绍,在Unity 应用的时候,使用鼠标控制玩家Camera 的旋转移动和 视角fov 的功能,在这里简单做个整理,方便后期使用,如果能帮到您,那就太好了。

 

二、实现原理

1、Input.GetAxis("Mouse X") 和 Input.GetAxis("Mouse Y") 获取鼠标的移动信息,对应进行角度和移动数据转换,然后赋值到相机上

2、Input.GetAxis("Mouse ScrollWheel") 获取鼠标滚轮的信息,对应进行角度和移动数据转换,然后赋值到相机上

 

三、使用注意

1、这里只是抛砖引玉的作用,大家可以根据自己的需要,获取自己需要的鼠标数据进行其他拓展,其实第一人称游戏大概就会摸索出一些感觉来了

 

四、效果预览

 

五、实现步骤

1、打开Unity,新建一个空工程

 

2、简单的摆设一下场景,便于演示使用

 

3、新建一个脚本实现 鼠标控制 camera 的移动旋转和 fov 变化的功能

 

4、把脚本挂载到场景的 MainCamera 上

 

5、运行场景,既可以有控制效果

 

六、关键代码

1、MouseOperationCameraRotationFovMove

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

public class MouseOperationCameraRotationFovMove : MonoBehaviour
{
    public enum MouseState { 
        None,
        MidMouseBtn,
        LeftMouseBtn
    }



    private MouseState mMouseState = MouseState.None;
    private Camera mCamera;


    private void Awake()
    {
        mCamera = GetComponent<Camera>();
        if (mCamera==null)
        {
            Debug.LogError(GetType()+"camera Get Error ……");
        }

        GetDefaultFov();
    }

    private void LateUpdate()
    {
        CameraRotate();

        CameraFOV();

        CameraMove();
    }

    #region Camera Rotation

    //旋转最大角度
    public int yRotationMinLimit = -20;
    public int yRotationMaxLimit = 80;
    //旋转速度
    public float xRotationSpeed = 250.0f;
    public float yRotationSpeed = 120.0f;
    //旋转角度
    private float xRotation = 0.0f;
    private float yRotation = 0.0f;

    /// <summary>
    /// 鼠标移动进行旋转
    /// </summary>
    void CameraRotate()
    {
        if (mMouseState == MouseState.None)
        {
           
            //Input.GetAxis("MouseX")获取鼠标移动的X轴的距离
            xRotation -= Input.GetAxis("Mouse X") * xRotationSpeed * 0.02f;
            yRotation += Input.GetAxis("Mouse Y") * yRotationSpeed * 0.02f;

            yRotation = ClampValue(yRotation, yRotationMinLimit, yRotationMaxLimit);//这个函数在结尾
                                                    //欧拉角转化为四元数
            Quaternion rotation = Quaternion.Euler(-yRotation, -xRotation, 0);
            transform.rotation = rotation;

        }
    }

    #endregion

    #region Camera fov

    //fov 最大最小角度
    public int fovMinLimit = 25;
    public int fovMaxLimit = 75;
    //fov 变化速度
    public float fovSpeed = 50.0f;
    //fov 角度
    private float fov = 0.0f;

    void GetDefaultFov() {
        fov = mCamera.fieldOfView;
    }

    /// <summary>
    /// 滚轮控制相机视角缩放
    /// </summary>
    public void CameraFOV()
    {
        //获取鼠标滚轮的滑动量
        fov += Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 100 * fovSpeed;

        // fov 限制修正
        fov = ClampValue(fov,fovMinLimit, fovMaxLimit);

        //改变相机的 fov
        mCamera.fieldOfView = (fov);
    }

    #endregion


    #region Camera Move

    float _mouseX = 0;
    float _mouseY = 0;
    public float moveSpeed = 1;
    /// <summary>
    /// 中键控制拖动
    /// </summary>
    public void CameraMove()
    {
        if (Input.GetMouseButton(2))
        {
            _mouseX = Input.GetAxis("Mouse X");
            _mouseY = Input.GetAxis("Mouse Y");

            //相机位置的偏移量(Vector3类型,实现原理是:向量的加法)
            Vector3 moveDir = (_mouseX * - transform.right + _mouseY * - transform.forward);

            //限制y轴的偏移量
            moveDir.y = 0;
            transform.position += moveDir * 0.5f * moveSpeed;
        }
        else if (Input.GetMouseButtonDown(2))
        {
            mMouseState = MouseState.MidMouseBtn;
            Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString());
        }
        else if (Input.GetMouseButtonUp(2))
        {
            mMouseState = MouseState.None;
            Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString()); 
        }
       
    }

    #endregion

    #region tools ClampValue

    //值范围值限定
    float ClampValue(float value, float min, float max)//控制旋转的角度
    {
        if (value < -360)
            value += 360;
        if (value > 360)
            value -= 360;
        return Mathf.Clamp(value, min, max);//限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
    }


    #endregion
}

 

图片支持滚轮缩放(缩放中心为鼠标位置)_Unity_用鼠标控制相机旋转、拖拽、视角缩放...
weixin_36401868的博客
01-29 1036
一、滚轮控制视角缩放/// <summary> /// 滚轮控制相机视角缩放 /// </summary> public void CameraFOV() { //获取鼠标滚轮的滑动量 float wheel = Input.GetAxis("Mouse ScrollWheel") * Time.deltaTi...
unity鼠标控制镜头旋转_Unity3D实现鼠标控制视角转动
weixin_39841002的博客
12-19 1665
前面,学了物体的移动功能,现在来学一下C#实现鼠标控制摄像机(视角)移动。代码如下:C#脚本(在Unity 5.5.1 下能运行):using System.Collections;using System.Collections.Generic;using UnityEngine;public class MouseView : MonoBehaviour {public enum Rotati...
Unity实现鼠标控制Camera旋转功能
12-30
Unity实现鼠标控制Camera旋转功能,简单易用,方便快捷,只需要将脚本拖拽到场景中的Camera上。
Unity——鼠标控制摄像机移动,(距离)缩放,旋转
羽阿呆的博客
12-07 1163
如题,在此简单记录主要代码,使用时可以视情况自己再封装。
unity 简单鼠标控制相机(拖动,旋转,缩放 ),类似2.5D,适合数字孪生
最新发布
weixin_49824818的博客
08-09 274
【代码】unity 简单鼠标控制相机(拖动,旋转,缩放 ),类似2.5D,适合数字孪生。
Unity鼠标【上下左右滑动时】控制相机【左右张望】和【上下抬头】
穿裤子的云
06-08 3252
相机旋转,看着是小事,但是却关系到用户的直观体验。旋转对了母慈子孝,旋转错了则翻江倒海。
Unity3d C# 实现纯鼠标平滑控制场景摄像头(相机)实现自由旋转移动和围绕节点移动旋转等功能(含源码工程)
qq_33789001的博客
09-29 5786
相机控制前言效果漫游效果围绕节点效果实现过程功能范围搭建场景编码实现变量设置自由漫游观察节点功能使用项目工程瑕疵 前言 在很多情况下我们都会用到如题的功能,在一般情况下我们可以漫游场景,自由的在场景中移动旋转等,而特殊情况下我们会进行围绕某一物体查看的操作。之前的实现一般都是按需求来实现,现在做了一些整理和优化,并将实现方法和过程分享出来。 效果 漫游效果 前进后退效果: 上下左右移动旋转效果: 围绕节点效果 围绕Cube前后移动: 围绕Cube旋转: 围绕胶囊前后移动: 围绕胶囊旋转
unity实现用鼠标右键控制摄像机视角上下左右移动
08-02 1061
using System;using System.Collections.Generic;using UnityEngine;public class ViewControl{   enum RotationAxes   {     MouseXAndY,     MouseX,     MouseY   }   R...
Unity鼠标控制摄像头的旋转,滚轮控制摄像机的推进
m0_71624363的博客
05-25 782
/鼠标滚轮控制摄像头的推进。
Unity使用鼠标控制相机移动
weixin_44709803的博客
03-25 987
Unity实现鼠标控制相机移动
unity鼠标控制摄像机视角,旋转,拉近,平移
weixin_46472622的博客
12-31 4727
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraControal : MonoBehaviour { private float xRotation; private float yRotation; public int yRotationMinLimit = -20; public int yRotationMaxLimit...
unity 鼠标控制camera移动
11-29
unity 鼠标控制camera移动+bezier曲线,可实现camera手动移动
unity 键鼠控制摄像机移动 脚本
08-22
可以用鼠标右键控制摄像机旋转,WASD和shift、ctrl控制摄像机移动。 特点是:在用dotween或其它工具给摄像机播放了动画后 用这个脚本仍然能正常控制摄像机移动 不会出现画面乱跳的情况)
unity相机控制
03-19
`MyScripts`目录中的脚本可能包含了这样的逻辑,例如使用Input.GetAxis("Mouse X")和Input.GetAxis("Mouse Y")获取鼠标的水平和垂直移动,然后相应地改变相机的本地旋转角度。 3. 平滑跟随:平滑跟随是一种常用的...
unity鼠标控制镜头旋转_Unity_用鼠标控制相机旋转、拖拽、视角缩放
weixin_36051235的博客
02-22 3452
一、滚轮控制视角缩放/// /// 滚轮控制相机视角缩放/// public void CameraFOV(){//获取鼠标滚轮的滑动量float wheel = Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 100;//改变相机的位置_mainCamera.transform.Translate(Vector3.forward * w...
Unity学习3 鼠标滚轮控制摄像机远近
qq_35766794的博客
09-05 1684
using UnityEngine; using System.Collections; public class CubeStatic : MonoBehaviour { public float minFov = 15f; public float maxFov = 90f; public float sensitivity = 10f; void Update() {
UnityUnity3D控制Camera移动
simplenthpower的博客
01-13 814
控制Unity3D中Camera移动(WASD前后左右、滚轮上下、拖拽旋转
Unity使用RawImage和RenderTexture在UI界面上投影其他相机拍摄的内容,并实现控制投影在RawImage中摄像机移动
qq_43511290的博客
12-09 9699
Unity使用RawImage和RenderTexture在UI界面上投影其他相机拍摄的内容物体A跟随物体B移动1.在Project界面创建RenderTexture2.在Hierarchy界面创建RawImage3.选中第二个摄像机,将New Render Texture挂载上4.选中RawImage,将New Render Texture挂载上 物体A跟随物体B移动 个人认为所谓的 “ 物体...
unity webgl第一人称鼠标控制相机旋转
09-01
Unity使用WebGL来实现第一人称鼠标控制相机旋转可以按照以下步骤进行。 首先,在Unity编辑器中,创建一个摄像机对象,并将其设置为主摄像机。确保这个摄像机与玩家角色相对应,并具有合适的位置和旋转。 然后,为了捕捉并响应鼠标输入,需要编写一段脚本。创建一个名为"MouseLook"的新C#脚本,并将其添加到摄像机对象上。 在脚本中,首先声明一个用于控制相机旋转速度的变量。例如,可以创建一个浮点类型的变量"rotationSpeed",并将其值设置为合适的大小,以便对玩家的鼠标移动进行响应。 然后,在脚本的Update()函数中,获取鼠标在水平和垂直方向上的移动距离。可以使用Input.GetAxis()函数并传入适当的参数来实现这一点。 接下来,将获取到的鼠标移动距离乘以旋转速度,并将其应用到摄像机旋转上。可以使用Transform.Rotate()函数来实现这一点。传入鼠标移动的y值作为旋转的x轴值,传入鼠标移动的x值作为旋转的y轴值,这样可以实现根据鼠标移动旋转相机视角。 最后,在Unity编辑器中将脚本应用到摄像机对象上。然后,运行游戏,并使用鼠标进行旋转控制移动鼠标时,摄像机会相应地旋转。 以上是使用Unity WebGL实现第一人称鼠标控制相机旋转的基本步骤。根据具体需求和实现方式的不同,可能需要对代码进行一些自定义和修改。
写文章

热门文章

  • Git 常见错误 之 error: src refspec xxx does not match any / error: failed to push some refs to 简单解决方法 133708
  • Windows 之 win SMB(smb) 功能的开启设置和使用的简单说明 111177
  • Unity 工具 之 常用插件分类汇总(UI/VR/AR/建模/Shader/动画/网络/AI/资源/数据/区块链等) 51538
  • 实现财务自由 之 不可不知的常用财务网站或应用软件 40291
  • 视频剪辑 之 十个不可不知的常用素材网站,你值得拥有 39301

分类专栏

  • Python 机器学习 基础+实战案例 付费 31篇
  • Unity Shader 及 屏幕特效 付费 34篇
  • Python OpenCV 实战案例-图片/视频/人脸等使用 付费 38篇
  • python 付费 67篇
  • Unity 进阶 付费 35篇
  • ThreeJS 付费 30篇
  • Unity 设计模式 5篇
  • Unity 185篇
  • Python 机器学习 实战案例 5篇
  • AGI
  • Hugging Face 21篇
  • MR资讯/技术
  • Stable Diffuse 4篇
  • 研究生考试 8篇
  • Web 30篇
  • Vue 17篇
  • Unity,AssetBundles 16篇
  • Unity Android 17篇
  • Git 21篇
  • 实用工具 41篇
  • Unity 算法 2篇
  • Unity 面试题 11篇
  • Linux/Ubuntu 9篇
  • C++ 基础入门/案例实践 12篇
  • LVGL 1篇
  • OpenGL 1篇
  • vue 完全入门系列 1篇
  • Unity 阿里云SDK 4篇
  • Flutter 2篇
  • Unity 游戏实例开发集合 8篇
  • Java 1篇
  • Spring 2篇
  • Unity Koreographer  音乐类游戏制作 2篇
  • Android 27篇
  • Unity UGUI 10篇
  • MySql 5篇
  • 基础 38篇
  • AR/VR 4篇
  • 实现财务自由 8篇
  • MVC 2篇
  • UIWidgets 2篇
  • Android 常见错误 4篇
  • Unity 网络 3篇
  • Unity Lua 7篇
  • 设计模式 1篇
  • Unity 知识碎片整理 4篇
  • Particle System 5篇
  • Unity iOS 6篇
  • Unity Android 交互 5篇
  • Unity MLAgent 2篇
  • Opencv 3篇
  • Unity 碎片知识 3篇
  • Unity 热更新 9篇
  • 其他 14篇
  • Unity 编辑器 6篇
  • C++/C# 交互 2篇

最新评论

  • Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理

    CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天值得看】榜单,全部的排名请看 https://bbs.csdn.net/topics/619314322。

  • Csv 之 简单解决使用 Excel 打开 csv 出现中文乱码现象

    m9_22458869: 修改后原本的数字对不上,怎么解决

  • Linux 之 Ubuntu 安装和配置 Samba 开启文件夹共享服务

    十又言午: 顶一波

  • 【海量数据挖掘/数据分析】 之 关联规则挖掘 Apriori 算法 (数据集、事务、频繁项集、关联规则、支持度、置信度)

    YzzzzzzzC: 最小置信度阈值和最小支持度阈值是规定的吗,还是需要计算的

  • Unity 功能 之 创建 【Unity Package】 Manager 自定义管理的包使用配置URL,使用 git URL加载的简单整理

    CSDN-Ada助手: 不知道 CS入门 技能树是否可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

大家在看

  • 今日最新早上好问候语精选大全,真诚祝福,健康平安 40
  • Python if 语句优化技巧 2038
  • Flink:ClickHouse
  • 《Flask Web应用开发 基于Python和统信UOS》这本书怎么学效果最好? 667
  • CF 231 E Cactus 题解(仙人掌图上找环) 728

最新文章

  • Unity 设计模式 之 结构型模式 -【装饰者模式】【外观模式】【享元模式】【代理模式】
  • Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】
  • Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】
2024
09月 10篇
08月 3篇
07月 26篇
06月 11篇
05月 24篇
04月 29篇
03月 13篇
02月 1篇
01月 2篇
2023年44篇
2022年105篇
2021年97篇
2020年225篇
2019年59篇
2018年33篇
2017年12篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王仙桃工厂网站优化公司网站制作网站优化哪里好化妆品网站优化长沙外贸网站优化价格舟山网站建设优化网站优化的意思威海网站优化公司正规网站优化定做删除网站内容影响优化不锈钢网站seo优化托管东营网站建设推广优化沈阳网站优化公司哪家好银川营销型网站优化巩义网站自然优化收费标准网站排名优化专业定制优化网站标题怎么做宁波网站优化排名推广宝山区优化网站哪家好清远网站首页关键词优化多少钱兰州网站优化推广营销怎么做宁夏银川市网站优化流程网站快速优化优联火星赞推广SEO教程网站优化排名壹起航网站优化需要检查哪些佛山企业网站优化如何优化网站公认云速捷极好网站伪静态有利于优化网站内容优化注意什么什么是网站广告优化新沂优化网站排名香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化