unity3d 控制摄像头_unity3d触摸屏控制摄像头 - CSDN
精华内容
参与话题
  • Unity3D 控制摄像机(一)

    千次阅读 2018-07-02 13:32:24
    Unity3D 控制摄像机(一) 第一人称摄像机 该脚本效果 图示为Local坐标系 旋转引发Local坐标系的变化 几点说明 Unity3D 控制摄像机(一) 第一人称摄像机 using System.Collections; using System....

    Unity3D 控制摄像机(一)

    摄像机跟随

    Main Camera上按 Ctrl+Alt+F 使镜头对齐当前视角

    参考:Unity3D中摄像机跟随方法https://blog.csdn.net/bobowang1991/article/details/54097075


    直接把Camera拖动到被角色下作为角色子物体

    角色移动时 镜头作为子物体一起移动

    优点:最省事


    只旋转摄像机自身 和 Player无关 作为第一人称摄像机

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RotateCamera001 : MonoBehaviour {
        //本例是第一人称摄像机
    
        public float xSpeed = 2f; //左右旋转摄像机的速度
        public float ySpeed = 2f; //上下旋转摄像机的速度
        public float yMinLimit = -90f; //上下旋转摄像机的最小角度限制
        public float yMaxLimit = 90f;  //上下旋转摄像机的最大角度限制
    
    
        //是否旋转镜头 鼠标右键按下时启用
        private bool isRotate;
        //左右旋转的角度 相对世界原始位置 非transform初始位置(沿三维Y轴)
        private float x;
        //上下旋转的角度 相对世界原始位置 非transform初始位置(沿三维X轴)
        private float y;
    
    
        void Start ()
        {
            Vector3 angles = transform.eulerAngles;
            //鼠标的左右移动 在三维中相当于沿Y轴转动
            x = angles.y;
            //鼠标的上下移动 在三维中相当于沿X轴转动
            y = angles.x;
        }
    
    
        void LateUpdate ()
        {
            //在LateUpdate中更新摄像机 可以更平滑 在Update中会有抖动
            RotateCamera();
        }
    
    
        void RotateCamera()
        {
            //鼠标右键按下状态启用旋转摄像机
            if (Input.GetMouseButtonDown(1))
            {
                isRotate = true;
            }
    
            //鼠标右键抬起状态停止旋转摄像机
            if (Input.GetMouseButtonUp(1))
            {
                isRotate = false;
            }
    
            if (isRotate)
            {
                //x 和 y 是绝对值 相对于世界坐标没有转动的位置的最终转动位置
    
                //鼠标的上下移动 移动的Y值 在三维中相当于沿X轴转动
                y -= Input.GetAxis("Mouse Y") * ySpeed;
                //上下需要限定范围 在完全俯视 和 完全仰视之间
                //去掉该限制的话可以使摄像机倒置
                y = Mathf.Clamp(y, yMinLimit, yMaxLimit);
    
    
                //鼠标的左右移动 移动的X值 在三维中相当于沿Y轴转动
                //左右是允许360度旋转的 不需要限制到最大最小范围
                x += Input.GetAxis("Mouse X") * xSpeed;
    
                //Quaternion rotation = Quaternion.Euler(y, x, 0);
                //transform.rotation = rotation;
    
                //和上面2句等价
                transform.eulerAngles = new Vector3(y, x, 0);
            }
        }
    }

    该脚本效果 图示为Local坐标系 旋转引发Local坐标系的变化

    这里写图片描述

    几点说明

    • Input.GetMouseButtonDown 只会在鼠标按键变化时触发一次 保持按住状态不会触发 因此需要使用全局变量IsRotate来判断是否旋转
      比如下述方法就是错误的:
      if (Input.GetMouseButtonDown(1))
      {
      直接处理旋转
      }
    • transform.eulerAngles欧拉角必须三个值一起设置
    • transform.eulerAngles欧拉角设置的是最终位置 最终位置是相对于世界坐标系 而非Local坐标系 也不是相对当前位置的改变量
    • 第一人称摄像机鼠标右键按下时 本身只改变Rotation而不改变Position
    • 上下的旋转需要限定位置 上下旋转即沿红色轴(X)轴旋转(世界坐标系) 左右旋转目前没有限定位置 正常人只能看左右-90 至90
    展开全文
  • 一个控制摄像头移动的脚本,直接绑定到摄像机就可以使用.功能描述如下: 1.鼠标左键拖动观察 2.鼠标右键定点旋转 3.鼠标滚轴放大缩小 4.鼠标左键快速双击进行定点放大 1 #pragma strict 2 /*** 3 **摄影...

    一个控制摄像头移动的脚本,直接绑定到摄像机就可以使用.功能描述如下:

    1.鼠标左键拖动观察

    2.鼠标右键定点旋转

    3.鼠标滚轴放大缩小

    4.鼠标左键快速双击进行定点放大

     1 #pragma strict
     2 /***
     3 **摄影机控制
     4 *@author felly
     5 */
     6 
     7 private var rayRotate :Ray = Ray(Vector3.zero, Vector3(0,1,0));
     8 private var rayTranslate :Ray = Ray(Vector3.zero, Vector3(0,1,0));
     9 private var hitInfo : RaycastHit ;
    10 
    11 private var preTime :float = 0.0;
    12 
    13 
    14 //它标记是否能旋转
    15 private var flag :boolean = false ;
    16 
    17 function Update () {///事件监视
    18 
    19      var direction :Vector3 = Vector3.zero;
    20      var px:float ;
    21      var pz:float ;
    22      
    23      
    24      if(Input.GetMouseButtonDown(0)){
    25          rayTranslate = camera.ScreenPointToRay(Input.mousePosition);
    26         //以摄像机为起点画射线,射线去地板碰撞点就是那个焦点
    27         Physics.Raycast(camera.transform.position, rayTranslate.direction, hitInfo);
    28         if (Time.time - preTime  < 0.3f ){
    29           hitInfo.point=hitInfo.point+Vector3(0,5,0);
    30           transform.position=Vector3.MoveTowards(camera.transform.position,hitInfo.point,10.0);
    31         }
    32          
    33          preTime = Time.time ;
    34      }
    35      
    36      //上下左右拖动
    37     if(Input.GetMouseButton(0)){
    38         px = Input.GetAxis("Mouse X") ;
    39         pz = Input.GetAxis("Mouse Y") ;
    40         direction = Vector3(px, pz, pz);
    41         transform.Translate( -1 * direction * 30 * Time.deltaTime);
    42     }
    43     
    44     //滚轴放到缩小
    45     pz = Input.GetAxis("Mouse ScrollWheel");
    46     direction = Vector3(0, 0, pz);
    47     transform.Translate(direction * 100 * Time.deltaTime);
    48     
    49     //旋转
    50     if(Input.GetMouseButtonDown(1)){
    51         rayRotate = camera.ScreenPointToRay(Input.mousePosition);
    52         flag = true ;
    53     }
    54     if(Input.GetMouseButtonUp(1)){
    55         rayRotate = Ray(Vector3.zero, Vector3(0,1,0));
    56         flag = false ;
    57     }
    58     if(Input.GetMouseButton(1) && flag){
    59         Physics.Raycast(camera.transform.position, rayRotate.direction, hitInfo);
    60         px = Input.GetAxis("Mouse X") ;
    61         transform.RotateAround(hitInfo.point, Vector3.up, 100 * px * Time.deltaTime);
    62     }
    63 }

     

    转载于:https://www.cnblogs.com/huntdream/archive/2013/04/16/3025291.html

    展开全文
  • Unity3D 设置摄像头的分辨率,比如罗技

    怎样知道一款网络摄像头支持的最高分辨率呢?

    1. 我们根据该网络摄像头的型号来查其具体参数,我手上有罗技C310罗技C920,C310支持1280x720,C920支持1920x1080,这样在构造WebCamTexture时就可以指定其支持的最大分辨率。

    测试用的C#脚本如下:


    using UnityEngine;  
    using System.Collections;  
      
    public class CameraTest : MonoBehaviour {  
      
        private string deviceName;  
        private WebCamTexture tex;  
        private Vector2 resSize = new Vector2(1920,1080);  
        //private Vector2 resSize = new Vector2(640,480);  
        public GameObject plane;  
      
        // Use this for initialization  
        void Start ()   
        {  
            StartCoroutine(InitCamera());  
        }  
          
        // Update is called once per frame  
        void Update () {  
          
        }  
      
        protected IEnumerator InitCamera()  
        {  
            //获取授权  
            yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);  
            if (Application.HasUserAuthorization(UserAuthorization.WebCam))  
            {  
                WebCamDevice[] devices = WebCamTexture.devices;  
                Debug.Log( "devices.Length " + devices.Length );  
                if( devices.Length>0 )  
                {  
                    deviceName = devices[0].name;  
                    Debug.Log( "deviceName " + deviceName );  
                    tex = new WebCamTexture(deviceName,(int)resSize.x, (int)resSize.y, 30);  
                    Debug.Log( "tex.width " + tex.width );  
                    Debug.Log( "tex.height " + tex.height );  
                    plane.renderer.material.mainTexture = tex;  
                    tex.Play();  
                    Debug.Log( "tex.width " + tex.width );  
                    Debug.Log( "tex.height " + tex.height );  
                }  
            }  
        }   
    }  

    2. 如果是不知型号的摄像头,我们可以在WebCamTexture.Play()后,输出WebCamTexture.width() 和 height(),经测试和查看了下官方文档,如果构造函数时输入的分辨率过大,比如我在用C310时,构造函数却指定1920x1080,这样子它就会用最接近的分辨率,其实这时候最接近的分辨率就是其支持的最大分辨率了。实际上C310支持1280x960,超过官方给的数据。

     参考资料:

    http://blog.csdn.net/a117653909/article/details/39936419#

    http://docs.unity3d.com/ScriptReference/WebCamTexture-ctor.html


    展开全文
  • Unity3D 陀螺仪控制摄像头脚本 GyroController

    千次下载 热门讨论 2020-07-21 09:59:46
    用于在unity上开发移动终端上的功能 如名称 陀螺仪控制摄像头
  • Unity3D】键盘鼠标控制视角的移动

    万次阅读 2017-05-02 17:23:48
    其实也不难,换到Unity3D里面是想办法控制摄像机的移动。下面举一个简单的例子说明在Unity3D如何用键盘鼠标控制视角的移动的。如下图所示: 就像大部分游戏一样,可以用鼠标滚轮控制视角的远近,键盘的wasd和上下...

    在3D游戏里面,视角是一个很重要的因素,部分玩家对锁视角嗤之以鼻,因此视角也是游戏制作里面需要努力的方面。其实也不难,换到Unity3D里面是想办法控制摄像机的移动。下面举一个简单的例子说明在Unity3D如何用键盘鼠标控制视角的移动的。如下图所示:


    就像大部分游戏一样,可以用鼠标滚轮控制视角的远近,键盘的wasd和上下左右控制镜头的位置,而按着鼠标右键则可以控制镜头的旋转。当然你可以根据需要改成其它控制方式,反正原理是同一个原理。

    其实这个游戏场景布置非常非常简单,也不是本文的重点。如下图所示,基本能够一览无遗:


    如上图所示,我们其实需要做的,只是控制Main Camera的位置和旋转则能够做到上面的效果。因此赋予给Main Camera,如下的脚本CameraMove.cs:

    using UnityEngine;
    using System.Collections;
    
    public class CameraMove : MonoBehaviour
    {
        public float sensitivityMouse = 2f;
        public float sensitivetyKeyBoard = 0.1f;
        public float sensitivetyMouseWheel = 10f;
    
        void Update()
        {
            //滚轮实现镜头缩进和拉远
            if (Input.GetAxis("Mouse ScrollWheel") != 0)
            {
                this.camera.fieldOfView = this.camera.fieldOfView - Input.GetAxis("Mouse ScrollWheel") * sensitivetyMouseWheel;
            }
            //按着鼠标右键实现视角转动
            if (Input.GetMouseButton(1))
            {
                transform.Rotate(-Input.GetAxis("Mouse Y") * sensitivityMouse, Input.GetAxis("Mouse X") * sensitivityMouse, 0);
            }
    
            //键盘按钮←/a和→/d实现视角水平移动,键盘按钮↑/w和↓/s实现视角水平旋转
            if (Input.GetAxis("Horizontal") != 0)
            {
                transform.Translate(Input.GetAxis("Horizontal") * sensitivetyKeyBoard, 0, 0);
            }
            if (Input.GetAxis("Vertical") != 0)
            {
                transform.Translate(0, Input.GetAxis("Vertical") * sensitivetyKeyBoard, 0);
            }
        }
    
    }
    

    鼠标右键点击的监听这里就不说了,在《【Unity3D】用鼠标点击事件、AddForce完成跳跃与二段跳》(点击打开链接)已经详细说过了。这里引用了Input.GetAxis的概念。理论上,你可以像《【Unity3D】利用物体碰撞检测、键盘输入处理完成平衡球游戏》(点击打开链接)那样控制物体移动那样,控制主摄像机的移动与旋转的,但是使用Input.GetAxis会让你代码更加简洁,在Unity3D中有18条轴,不过基本上常用轴就是上述代码的几个。

    Input.GetAxis能够获取这个轴的输入,也就是同样是用来监听鼠标输入的一个东西,它将返回一个-1~1的数值。用于记录用户按键盘的时长、翻滚轮、鼠标对比上一个位置偏移的多少。这样的话,我们再乘上一个合适的float,则可以形成一个坐标位置。配合Rotate与Translate则能够时物体移动。

    另一方面,摄像头的焦距,也就是缩放可以直接对fieldOfView控制而达成。

    展开全文
  • unity3d控制camera移动旋转

    万次阅读 2016-04-19 14:49:08
    第一次写博客,刚开始学习unity。把近期所学记录下来~  最近做的demo是控制一个摄像头在一个室内的场景中自由移动,类似于第一人称视角。  1.用鼠标和键盘控制 using UnityEngine;usingSystem.Collections; ...
  • Unity3D打开摄像头并且调节分辨率

    千次阅读 2016-09-19 17:04:31
    using UnityEngine; using System.Collections; public class WebCamManager : MonoBehaviour {  private string deviceName;  private WebCamTexture tex;... private Vector2 resSize = new
  • 自制的unity AR相机,适配安卓和iOS,不需要任何外部插件。打开手机摄像头、陀螺仪相机,完美运行。
  • Unity3D 控制摄像机(二)

    千次阅读 2018-07-02 13:54:04
    Unity3D 控制摄像机(二) Unity3D 控制摄像机(二) Unity3D编辑器中Transform下的Rotation 3个值 实际上对应的值是该组件的欧拉角值(这句话不完全正确看下面) eulerAngles的属性是Vector3 x -&...
  • Unity3D 原生WebCamera实现摄像头显示

    万次阅读 2017-02-15 12:05:09
    今天为大家分享一下,如何通过WebCamera 调用外部的摄像头。    1.首先我们需要简单认识一下,unity有关摄像头需要用到的内置类;  WebCamDevice  官方文档:...
  • unity3D摄像头,键盘控制移动,直接使用,不需要修改,很方便
  • 闲话少说,上代码,google上搜来的代码,不过里面有bug,不能顺利切换,下面的代码是已经修改过的,经测试,可以正常运行。 <pre class="css" name="code">using System; using UnityEngine;...
  • Unity打开网络摄像头代码

    千次阅读 2018-06-04 17:32:09
    using System.Collections;using System.Collections.Generic;using UnityEngine;public class opencam : MonoBehaviour { public string deviceName;//无需为其绑定变量,直接运行,显示的是本地摄像机的名称 ...
  • 这里有几个难点,调用摄像头是很简单的,unity已经提供好了接口,我们只需要调用就行。 问题就是怎么把图片保存下来。我们来看下代码。   public string deviceName; WebCamTexture tex;//接收返回的...
  • 笔记本,自带摄像头,开发原因需要使用外接摄像头,来扫描物体。 PS:两个摄像头驱动都没有问题,都能够正常使用 如何选择摄像头 vuforia下可以在设置里面选择摄像头。 但是普通通过untiy接口来调用摄像头的话,...
  • 第一次发控制摄像机旋转代码是几个月前。 Unity3D【脚本】鼠标对摄像机的控制 - 点击鼠标右键,移动,摄像机围绕圆心旋转
  • Unity3D鼠标控制摄像机“左右移动控制视角+WASD键盘控制前后左右+空格键抬升高度”脚本
  • 免费下载地址:https://blog.csdn.net/linda012518/article/details/105945686 unity 调用 海康 网络摄像头,实进显示
1 2 3 4 5 ... 20
收藏数 1,374
精华内容 549
关键字:

unity3d 控制摄像头