Unity3D实现摄像机镜头移动并限制角度

本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下

摄像机镜头跟随鼠标移动,并限制上下左右的移动角度

public class ViewFromCream : MonoBehaviour
{
  public int speed=5;
  public Vector3 vect;

  private float xcream;
  private float ycream;

  public void Update()
  {
    CreamView();
  }

  private void CreamView()
  {
    float x = Input.GetAxis("Mouse X");
    float y = Input.GetAxis("Mouse Y");
    if (x!=0||y!=0)
    {
      LimitAngle(60);
      LimitAngleUandD(60);
      this.transform.Rotate(-y * speed, 0, 0);
      this.transform.Rotate(0, x * speed, 0, Space.World);
    }
  }

  /// <summary>
  /// 限制相机左右视角的角度
  /// </summary>
  /// <param name="angle">角度</param>
  private void LimitAngle(float angle)
  {
    vect = this.transform.eulerAngles;
    //当前相机x轴旋转的角度(0~360)
    xcream = IsPosNum(vect.x);
    if (xcream > angle)
      this.transform.rotation = Quaternion.Euler(angle,vect.y,0);
    else if (xcream < -angle)
      this.transform.rotation = Quaternion.Euler(-angle, vect.y, 0);
  }
  /// <summary>
  /// 限制相机上下视角的角度
  /// </summary>
  /// <param name="angle"></param>
  private void LimitAngleUandD(float angle)
  {
    vect = this.transform.eulerAngles;
    //当前相机y轴旋转的角度(0~360)
    ycream = IsPosNum(vect.y);
    if (ycream > angle)
      this.transform.rotation = Quaternion.Euler(vect.x, angle, 0);
    else if (ycream < -angle)
      this.transform.rotation = Quaternion.Euler(vect.x, -angle, 0);
  }
  /// <summary>
  /// 将角度转换为-180~180的角度
  /// </summary>
  /// <param name="x"></param>
  /// <returns></returns>
  private float IsPosNum(float x)
  {
    x -= 180;
    if (x < 0)
      return x + 180;
    else return x - 180;
  }
}

对IsPosNum方法进行说明

之所以要将获取的欧拉角转换为-180°-180°之间,是因为在获取eulerAngle中,x轴和y轴的值只有0-360,而没有负数,那么这将会复杂化我们角度的判断,如限制左右角度为-60-60之间,那么我们就要判断角度是否超过300度或是超过60度, 显然超过300度的角度必定超过60度,那么就需要另外加条件进行判断;因此对获取的值进行转化更为方便!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D实现控制摄像机移动

    本文实例为大家分享了Unity3D实现控制摄像机移动的具体代码,供大家参考,具体内容如下 最近公司的几个项目开发内容基本相同,很多脚本直接复制过来就可以拼接项目.之前一直是代码爱好者,能自己敲的绝对不去复制粘贴.但是开发速度确实是被耽误了,所以接下来打算把开发中常用的脚本都发到博客上.自己需要的时候直接拿来.也希望能帮到你们. unity编辑器中按住鼠标右键,在通过控制键盘的wasdqe键可以自由控制视野. 下面就是实现操作的代码: using System.Collections; using

  • unity3D实现摄像机抖动特效

    本文实例为大家分享了unity3D实现摄像机抖动的具体代码,供大家参考,具体内容如下 摄像机抖动特效 在需要的地方调用CameraShake.Shake()方法就可以 public class CameraShake : MonoBehaviour { /// /// The cameras to shake. /// public List cameras = new List(); /// /// The maximum number of shakes to perform. /// pu

  • Unity3D实现摄像机镜头移动并限制角度

    本文实例为大家分享了Unity3D实现摄像机镜头移动并限制角度的具体代码,供大家参考,具体内容如下 摄像机镜头跟随鼠标移动,并限制上下左右的移动角度 public class ViewFromCream : MonoBehaviour { public int speed=5; public Vector3 vect; private float xcream; private float ycream; public void Update() { CreamView(); } private

  • unity3D实现物体任意角度自旋转

    本文实例为大家分享了unity3D实现物体任意角度自旋转的具体代码,供大家参考,具体内容如下 主要涉及函数: Input.GetAxis("Mouse x") 可取得鼠标横向(x轴)移动增量 Input.GetAxis("Mouse y") 可取得鼠标竖向(y轴)移动增量 通过勾股定理获取拖拽长度,长度越长旋转越快.在project setting--Input 可以设置. 这里用Cube来做例子,因为方体看旋转比较清楚,如图: 代码如下: using UnityE

  • Unity3D撤回命令开发详解

    本文实例为大家分享了Unity3D撤回命令功能开发,供大家参考,具体内容如下 在类似操作考核的项目中我们经常会遇到回到上一步的需求.所以我们有必要对每一个状态点的所有参与交互的物体的状态进行记录.好了,下面就是代码的实现: 首先肯定要创建命令的基类, public class BaseCommand { //执行命令 public virtual void ExcuteCommand() { } //撤销命令 public virtual void RevocationCommand() { }

  • Unity3D实现旋钮控制灯光效果

    本文实例为大家分享了Unity3D实现旋钮控制灯光效果的具体代码,供大家参考,具体内容如下 前言 实际上使用的是非常简单的方式,通过开启以及关闭带有灯光效果物体的渲染以模拟出的灯光切换效果. 正确方式应当为物体切换不同的Material实现效果. 所用函数 public void RotateAround(Vector3 point, Vector3 axis, float angle); //通过给定一个世界坐标.轴向以及一个角度,使物体以该角度旋转绕世界坐标点的轴向的变换 public T

  • Unity3D使用陀螺仪控制节点旋转

    本文实例为大家分享了Unity3D陀螺仪控制节点旋转的具体代码,供大家参考,具体内容如下 /******************************************************************** Desc: 陀螺仪对相机的逻辑类. *********************************************************************/ using System; using System.Collections; using

  • Unity3D实现攻击范围检测

    本文实例为大家分享了Unity3D实现攻击范围检测的具体代码,供大家参考,具体内容如下 一.扇形攻击范围检测 using UnityEngine; using System.Collections; public class AttackCHeck : MonoBehaviour { //要攻击的目标 public Transform Target; //扇形距离 攻击距离 扇形的半径 private float SkillDistance = 5; //扇形的角度 也就是攻击的角度 priva

  • Unity3D实现相机跟随控制

    本文实例为大家分享了Unity3D实现相机跟随控制的具体代码,供大家参考,具体内容如下 跟随算法 要实现3D摄像机的控制第一步就是先实现摄像机跟随物体移动. 要想让相机跟随物体移动,就要明白在一定角度下相机与物体的位置关系. 首先设置相机与物体之间的距离distance,相机与xz平面的角度为roll 所以根据三角关系可以求得映射在xz平面的距离d为distancecos(rool),相机高度为distancesin(roll). 如下图 现在就可以确定相机的高度了即y轴的坐标相机的y轴坐标应该

  • 基于Unity3D实现3D照片墙效果

    一.前言 Unity3D不仅仅可以开发游戏,还有非常多的开发方向,秉承着兴趣为先,将可以使用Unity制作的各种应用案例,分享如何进行开发,如何实现,希望大家可以在感兴趣的地方,学习到自己想要学习的东西. 今天就来实现一个3D照片墙的效果. 我对于这个项目的构思就是照片是3D的,可以滑动,然后使用DoTween插件去做动画平滑移动. OK,那就正式开始. 先看一下效果图: 二.正式开发 新建项目,我使用的版本是Unity3D 2019.4.7f1,模板选用3D: (1)导入DoTween插件.

  • 基于Unity3D实现仿真时钟详解

    目录 一.前言 二.时钟小工具开发 2-1.搭建UI 2-2.实现脚本 一.前言 今天实现一个时钟工具,其实在之前已经完成了一个简单的时钟工具:[Unity3D应用案例系列]时钟.钟表小组件开发. 那么,今天的这个小工具跟之前的有啥区别呢? 之前的时钟,是模拟真实时间时针分针秒针的旋转,比如: 可以当个时钟看. 二.时钟小工具开发 今天实现一个可以设置旋转到指定的时间下的表盘,简单说就是时钟定时. 2-1.搭建UI 新建一个Image,命名为Image_Clock(名字随意),作为时针和分针的父

  • Unity3D应用之时钟与钟表小组件的使用教程

    目录 一.前言 二.效果图及源工程下载 三.实现 3-1 场景搭建 3-2 代码实现 四.后言 一.前言 又见面了哈,今天为大家介绍时钟.钟表的实现方法教程. 实现的方法有很多,这里只是提供了一个思路,本着抛砖引玉的心态,希望能和大家共同学习. 二.效果图及源工程下载 效果图: 源工程下载: https://pan.baidu.com/s/1x0AwvjoUkR5VBC8xnSQw7Q 提取码:mhns 三.实现 3-1 场景搭建 使用Cylinder搭建一个时钟面,然后使用TextMesh设置

随机推荐