第三人称视角_hololens2 第三人称视角 - CSDN
精华内容
参与话题
  • Hololens第三人称视角Spectator View!

    千次阅读 热门讨论 2017-02-21 19:59:50
    首先分享一段TED Talk,这个是全球顶级的演讲,一般演讲跟IT男都没啥关系,比较内敛对吧,或者就没啥这方面细胞,乔布斯的演讲还不错,每次新品发布都挑逗观众G点,可惜人家不是IT男。能在TED Talk演讲,唯一的要求...

    首先分享一段TED Talk,这个是全球顶级的演讲,一般演讲跟IT男都没啥关系,比较内敛对吧,或者就没啥这方面细胞,乔布斯的演讲还不错,每次新品发布都挑逗观众G点,可惜人家不是IT男。能在TED Talk演讲,唯一的要求就是,你要够牛逼,要多牛逼?放到全世界你都是够牛逼就差不多了,然后再锻炼一下演讲技巧多排练几次就好。这个视频是微软的同事在介绍Hololens带来的梦想中的人与人之间的交互体验。
    TED Talk Hololens视频

    Hololens的宣传视频就很多很多了,但绝大多数都是加入后期制作的,而以直播的形式出现就很少了。Hololens本身支持实时全息影像展示的,打开Web管理器就行,不过吐槽一下这个真不稳定,开没几秒就会卡死了。这个混合影像的视角很小,就是你带着Hololens看到的矩形区域那部分。但如果做直播分享给别人一起看,这就明显不够了,于是就有了这个第三人称视角的解决方案。先上链接https://developer.microsoft.com/zh-cn/windows/holographic/spectator_view 这个新鲜出炉的Sepctator View,就是笔者后面要谈的实现技术了。用摄像机拍摄,摄像机可以是高达4K的画面效果,然后再叠加Hololens看到的全息影像,perfect。

    要做到这个首先需要2个Hololens,一个带HDMI输出的摄像机,推荐Canon 5D MarkIII,1张视频采集卡,(一般笔记本都有HDMI接口,但请注意这个只是用来做视频输出的,不能作为输入,就更不能采集了,要搞清楚接口和卡是不同的概念),推荐Blackmagic的采集卡,原因很简单,有现成代码不用改了,否则换了一个你都不知道是源代码有问题,还是自己摄像机的sdk有问题,还是方法问题。采集卡推荐的是
    Intensity Pro 4K不过这个是PCIe接口的只能插到台式机上,推荐使用intensity有雷电和Usb3.0接口,雷电当然更好不过稍微贵点,当然这款就不支持4K了,只能到1090p。需要的连接线就不说了,值得一提的是要把Hololens固定在摄像机上是个小问题,可以3D打印但不是那么随手可得,这个自己看着办哈。

    首先上图
    这里写图片描述

    首先试一试摄像机的链接是否好的,连上intensity,打开Blackmagic Media Express,看看能不能看到摄像机看到的画面,如果黑的,(看看是不是盖子没打开,我晕,太傻了),如果还是黑的,看看是不是没有enable实时影像,笔者没有使用官方推荐的佳能5D3,用的是nikon的,要按一下Lv按钮,相机屏幕显示什么这里就显示什么。好了继续。

    然后要做个架子把hololens固定在摄像机上面,推荐用的是3d打印。笔者没有,只好用草根做法,拿了块泡沫,任何电器箱子里面总会有泡沫吧。没有,那就去买个电器吧:) 用美工刀切一切,大小合适后给红色音箱那挖2个洞,然后在应该的地方用泡沫垫一垫。相机可以用三脚架固定,三脚架有水平仪,笔者在泡沫上也放了一个水平仪,来保证hololens也是水平的。(这个没有?笔者是从服务器机柜那里拿的。没有服务器机柜?买一个机柜吧)

    然后还需要做校准的黑白方格板,就是那个人拿着晃来晃去的黑色方格白色方格相间的那个,在Calibration\CalibrationPatterns目录下有个全图和半图,官方说打印全图,不过我看那个人拿的挺大的,如果全图打在A4上太小了,于是就大了2张A4的半图拼起来。官方说要放在硬板上,没有硬板,笔者就拿了个笔记本的箱子,刚好比2张A4纸大点,贴上去就好了。

    以上硬件部分终于准备完了。下面开始软件部分。

    首先是Calibration项目,直接编译会报错,缺h文件,这些可以通过还原nuget就好了,(不要傻傻的去找h文件,因为真的能找到,但这是一条不归路)。还原的时候如果不通,那就开vpn吧。记得还要去stdafx.h改一下hololens的登陆用户名密码。编译成功后不是在vs里面运行,而是去Calibration\x64\Release里面找Calibration.exe,用管理员运行吧,否则可能写文件会出错。然后就学着官方那个人举着你的板让相机和hololens识别一下,2个设备都会去识别,识别到了会拍照,hololens拍照的时候会亮白灯,你就知道工作正常了,然后回到电脑按一下回车,去我的文档\CalibrationFiles里面,就会有你的亮照,分别是相机拍的,和hololens拍的,还有个CalibrationData.txt,嗯,按照官方的自己比对数据再调一调吧。有个值得说的是,官方说Stereo RMS的范围是20-50,不过这个txt里面却说越小越好。事实上是这样的,当视野越广的时候,这个数字会变大,把相机镜头拉长视角变小接近hololens的视角的时候,这个可以趋向0,笔者用的后者。最后把这个txt复制到assets目录下。来个亮照。

    这里写图片描述

    然后做compositor项目,没什么好说的,还原nuget,生成64位和32位解决方案。因为笔者电脑是64位的,大多数人的都是吧,所以64位的给unity用,32位的给hololens用,如果32位的给unity会报错找不到dll。笔者执行CopyDLL.cmd失败,闪一下就没了怎么知道成功还是失败?开CMD运行就知道了。于是看着cmd运行的结果,手动复制那些dll到assets目录。这步好了。

    最后,打开Unity项目,不用设置什么了,前面已经把该放的都放进来了,双击打开Sharing场景一切都有了。只需要SpectatorViewManager里面的spectator view IP为hololens的ip就可以了。修改点击菜单HoloToolkit-Sharing Service-Launch Sharing Service,就打开了服务器端。点击菜单Spectator View-
    Compositor打开界面窗口,点击运行,Duang,神奇的第三人称视角就完美的出现了。

    细心的朋友可能发现了,一直到这一步其实都只需要1个hololens就可以了,后面如果Sharing Service IP的那个hololens进来后可以操作这些hologram。做完这些笔者无比的自豪感涌现啊,别看前面写的那些步骤好像一步一步做就行了,笔者遇到的坑无数啊,多数是在编译上面,会让你怀疑人生,笔者差点把win10都重装了。好了,Enjoy yourself!

    后记,有段时间没有碰Hololens了,之前玩的时候还是5.4版本,现在用了5.5.0f3,居然unity生成的代码编译都通不过,以为是nuget的问题,升级nuget还报错,于是买了个vpn,终于升级到最新的5.3.0居然说要visual studio 2017才可以,降到5.2.2可以编译了,部署到hololens的时候直接停止运行了,换了另一台电脑发现代码没问题,于是把笔记本的VS重装了。吃螃蟹第一人不好当,人生真的是折腾,也不知道还能折腾多久。

    展开全文
  • 设置第三人称视角 方式一:(设置子对象) 1.将摄像机拖拽到合适的角度上 2.把摄像机拖拽进物体对象,摄像机成为物体的子对象,这样摄像机就可以跟着物体一起移动 方式二:(脚本设置) 创建摄像机...

    设置第一人称视角

    1.把物体的坐标和摄像机的坐标设置成一样的,这样摄像机就在物体内部,就是第一人称的视角。
    在这里插入图片描述
    在这里插入图片描述
    2.把摄像机拖拽进物体对象内,摄像机变成物体的子对象,这样摄像机就能跟着物体一起移动。
    在这里插入图片描述


    设置第三人称视角

    方式一:(设置子对象)

    1.将摄像机拖拽到合适的角度上
    在这里插入图片描述
    2.把摄像机拖拽进物体对象,摄像机成为物体的子对象,这样摄像机就可以跟着物体一起移动
    在这里插入图片描述


    方式二:(脚本设置)

    1. 创建摄像机对象变量: private Animation animation;
    2. 获取主摄像机: mainCamera = Camera.main;
    3. 设置主摄像机的位置:主摄像机的位置 = 物体对象的位置 + 两者相对坐标差
      mainCamera.transform.position = transform.position + new Vector3(0, 11, -14);

    实现摄像机延迟移动效果

    Vector3.Lerp(主摄像机的位置, 主摄像机新位置, 时间差);
    mainCamera.transform.position = Vector3.Lerp( mainCamera.transform.position, transform.position + new Vector3(0, 11, -14), Time.deltaTime);

    代码实例

    public class Player01 : MonoBehaviour
    {
        //设置变量
        private Animation animation;
        private Camera mainCamera;
        float runSpeed;
        float angleSpeed;
        
        // Start is called before the first frame update
        void Start()
        {
            //获取动画对象
            animation = GetComponent<Animation>();
            //初始化移动速度和角速度
            runSpeed = 20f;
            angleSpeed = 120f;
            //获取主摄像机
            mainCamera = Camera.main;
        }
    
        // Update is called once per frame
        void Update()
        {
            //设置移动速度
            float forward = Input.GetAxisRaw("Vertical") * runSpeed;
            //设置角速度
            float rotation = Input.GetAxisRaw("Horizontal") * angleSpeed;
            //判断移动还是站立
            if (forward > 0)
            {
                //设置移动方向
                transform.Translate(0, 0, forward * Time.deltaTime);
                //播放跑步动画
                animation.CrossFade("run");
            }
            else
            {
                //播放站立动画
                animation.CrossFade("stand");
            }
    
            //设置移动方向
            transform.Rotate(0, rotation * Time.deltaTime, 0);
        }
    
        private void LateUpdate()
        {
            //主摄像机的位置 = 物体对象的位置 + 两者相对坐标差
            //mainCamera.transform.position = transform.position + new Vector3(0, 11, -14);
            //摄像机延迟移动效果
            mainCamera.transform.position = Vector3.Lerp(
                mainCamera.transform.position, 
                transform.position + new Vector3(0, 11, -14), 
                Time.deltaTime);
        }
    }
    
    展开全文
  • Unity第三人称视角

    2020-07-30 23:30:03
    Unity3D第三人称视角,和博客是同步的,有需要请下载。
  • 视角设置(第一人称第三人称

    千次阅读 2018-01-02 17:35:03
    从Blank项目开始,利用自带的第三人称游戏人物设置视角看起来很简单,但是每次做到这里我都要调整好久,那就记录一下吧!第一人称游戏视角一、初始准备:创建一个Blank项目。创建一个Game Mode,一个BP_Character,...

    从Blank项目开始,利用自带的第三人称游戏人物设置视角

    看起来很简单,但是每次做到这里我都要调整好久,那就记录一下吧!

    第一人称游戏视角

    一、初始准备:

    创建一个Blank项目。创建一个Game Mode,一个BP_Character,一个Controller;将地图的WorldSetting中的GameMode部分设置为自己刚创建的这些值;将第三人称的人物导入(这里我只想要骨骼和动作以及Mesh,不需要导入第三人称的Character和Controller等,可以导入后再删掉),给BP_Character选择好骨骼、默认动作等。BP_Character就是作为玩家要控制的角色。

    这里写图片描述

    二、设置输入控制:

    1. 在Project Settings中添加输入

    这里写图片描述

    2. 在Character中添加响应

    这里写图片描述

    3. 这个时候如果进行游戏,那么前后左右的移动是没有问题的,但是显然看不到人物对吧,因为没有摄像机。游戏开始的时候在Play Start的地方生成了这个人物,但是没有对这个人物的相机,只有一个默认的相机生成,所以下一步就是添加一个相机。

    三、相机的添加

    1. 先尝试直接在人物背后添加一个摄像机,调整到合适的位置,其他属性都不做改变

    这里写图片描述

    2. 现在进行游戏,发现摁W键的时候角色在向左移动,摁A键却向后移动,这是为什么呢?然后我就发现其实是Character中的一个组件“ArrowComponent”搞的鬼啊!!!,它指向哪儿,哪儿就是前方!!!然后看看上一个图,它指向的是人物的左方,所以左边就是前方,也就是说,如果点击W键让他向前移动,那他就会向人物左方向移动。

    3. 找到原因就好办啦,旋转人物和相机,使人物的前方与Arrow保持一致。

    这里写图片描述

    四、现在开始游戏,玩家就会拥有人物的视角啦,第一人称视角就完成了!

    第三人称游戏视角

    在第一人称的视角上做改变即可

    一、添加弹簧臂,弹簧臂的作用可参考官方文档使用弹簧臂组件,我的理解就是减震,减轻各种碰撞穿透等对相机造成的影响。

    1. 把弹簧臂Spring Arm作为相机的父组件。Spring Arm的“Camera Settings”属性“Use Pawn Control Rotation”设置为True。

    这个属性的解释还是很详细的,可以自己看一下。简单来说,如果这里不设置True,那么相机和人物就不会有相对的旋转,就是说无论怎么转,人物始终是背对相机的;设置为True的话,如果人物向后移动,那么玩家就能看到人物的转身,就能看到人物的正脸啦!
    这里写图片描述

    二、设置其他组件以及属性

    1. 将“self”的Pawn的“Use Controller Rotation Yaw”属性设置为False

    2. 将“CharacterMovement”的“Character Movement(Rotation Settings)”的“Orient Rotation to Movement”设置为True、

    三、现在开始游戏,就是第三人称的上帝视角啦。

    大功告成!!!

    展开全文
  • 摄像机跟随之第三人称视角(一)

    千次阅读 2018-09-10 10:34:46
    本篇就主要是针对第三人称视角的摄像机,进行算法设计分析。 首先来分析第三人称摄像机的特性: 1.始终在角色后面 2.可以通过移动鼠标围绕主角 3,类似半上帝视角 Ok,有了上面的分析,我们就要进行算法设计。 ...

    在我们开发游戏的时候,总避免不了对摄像机的设置,当然,这也因为每款游戏类型不一样,所以摄像机的跟随或者说放置位置不一样,这也要求我们写出合适的算法。本篇就主要是针对第三人称视角的摄像机,进行算法设计分析。
    首先来分析第三人称摄像机的特性:
    1.始终在角色后面
    2.可以通过移动鼠标围绕主角
    3,类似半上帝视角
    Ok,有了上面的分析,我们就要进行算法设计。
    在设计之前,我们来回顾一下高中数学中的一些知识:
    这里写图片描述
    由图可知,我们使用的便是高中的三角函数关系
    这里写图片描述
    本期,我们就是要通过使用三角函数关系,来设置摄像机与玩家的位置。
    一.新建一个项目,随便找一个人物模型,我这里找的是unity商店名叫RainEntertainment的资源包,然后把人物模型改名为Player,调整摄像机与人物模型的位置。
    如下图
    这里写图片描述

    我们来分析一下摄像机与主角的三角函数位置关系
    首先是YZ平面
    这里写图片描述
    再简化图形,如下
    这里写图片描述
    这里应该很好理解了,distance这个值我们是事先知道的,通过知道一个角度,然后得到另外一条边的长度,这个应该不难理解。

    下面是XZ平面
    这里写图片描述
    再进行简化;
    这里写图片描述

    通过上面的方式,我们便可以获得摄像机相对于角色的x,y,z三个方向的值,通过加上或者减去主角的x,y,z三个方向的值,就可以获得一个相对位置,下面进行脚本操作,新建一个脚本,名为CameraFollow,脚本如下

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraFollow : MonoBehaviour {
    
        public float rollAngle;//XZ平面的角度控制
        public float rotAngle;//YZ平面的角度控制
    
        public float distance=5;//摄像机与角色的距离
    
        public Transform target;//跟随角色
        private float roll;//XZ平面的弧度控制
    
        private float rot;//YZ平面的弧度控制
    
    
    
        void Start () {
    
        }
    
        // Update is called once per frame
        void Update () {
    
        }
        private void LateUpdate()
        {
            UpdatePosition();
        }
        private void UpdatePosition()
        {
          roll= rollAngle * Mathf.PI * 2 / 360;//把角度转化为弧度
            rot= rotAngle * Mathf.PI * 2 / 360;
    
    
            Vector3 targetPos = target.position;//目标位置
            Vector3 CameraPos;//定义一个三维向量用来存储摄像机的位置
            float height = distance * Mathf.Sin(rot);//获得摄像机的高度
            float d = distance * Mathf.Cos(rot);
            CameraPos.x = targetPos.x + d * Mathf.Cos(roll);
            CameraPos.y = targetPos.y + height;
            CameraPos.z = targetPos.z + d * Mathf.Sin(roll);
    
            transform.position = CameraPos;//更新位置
            transform.LookAt(target);//使摄像机对着角色
    
        }

    脚本理解起来也不难,再unity里面运行,然后调整参数,调到合适角度即可,比如我的一个设置的参数
    这里写图片描述

    二.使用鼠标控制围绕主角旋转。其实通过上面的分析,我们就是控制两个变量,一个是rollAngle,一个是rotAngle,所以,这也就更好进行脚本操作了
    脚本如下:

        public float RollSpeed = 5;
        public float RotSpeed = 4;
    
        public float MinRotAngle = 4;//仰视的最小角度
        public float MaxRotAngle = 100;//俯视的最大角度
        private void RollRotate()
        {
            float MouseX = Input.GetAxis("Mouse X")*RollSpeed;
            rollAngle -= MouseX;
        }
        private void RotRotate()
        {
            float MouseY = Input.GetAxis("Mouse Y") * RotSpeed;
            rotAngle -= MouseY;
            if (rotAngle >= MaxRotAngle)
            {
                rotAngle = MaxRotAngle;
            }
            if (rotAngle < MinRotAngle)
            {
                rotAngle = MinRotAngle;
            }
    
        }

    把两个方法放入LateUpdate里面,运行,便可以围绕角色旋转了
    三.然后便是滚轮缩放,也很简单,控制distance的大小就可以了

        public float MinScroll=0.5f;
        public float MaxScroll=10f;
        public float ScrollSpeed = 0.5f;
        private void ScrollViewControll()
        {
            if (Input.GetAxis("Mouse ScrollWheel") > 0)
            {
                if(distance>MinScroll)
                distance -= ScrollSpeed;
            }
            if (Input.GetAxis("Mouse ScrollWheel") < 0)
            {
                if (distance < MaxScroll)
                {
                    print("缩小");
                    distance += ScrollSpeed;
                }
            }
        }

    以上就是第三人称的算法,当然这只是个简略算法,还有很多问题需要解决,基本的思路就在这,扩展就靠大家自己了。加油!!!!

    展开全文
  • 3、打开人称来图,进入图表,具体节点如图: 箭头的地方设置成刚新建的ThirdPP角色,这些节点的意思是,点击C键后释放玩家控制器,然后获取场景中是ThirdPP的所有Actor,然后获取0也就是一个,重新获取...
  • 一般在FPS游戏中都会用到人称视角,简单介绍一下如何在Unity中添加人称视角 1.为摄像机添加角色控制器: conmponent->Physics->Character Controller 2.为摄像机添加C#脚本 代码如下: //首先定义视角...
  • Unity3d人称视角如何设置

    千次阅读 2018-04-04 16:26:51
    大家可能不知道,其实Unity3d自己已经附带了一个人称视角,我们只需要动动手指,导入一个包即可。下面就由小编告诉你如何导入吧。工具/原料Unity3d 4 / Unity3d 5导入方式1好的,我们先新建一个工程,和新的场景...
  • Unity 视角 人称脚本 MouseLook

    万次阅读 2014-06-30 13:09:11
    研究了一下人称控制器后,把它的
  • [Unity3d]第一人称和第三人称视角完美切换

    万次阅读 多人点赞 2019-10-29 14:53:33
    最近一直在搞3D漫游,在第一人称和第三人称视角切换碰到些问题,视角的例子我是导入的官方的character controller包,不得不佩服官方脚本语言的写法,看了一下写的很完美,新手估计比较难看懂,里面涉及到一些角度,...
  • Unity第一人称和第三人称视角脚本

    千次阅读 2015-07-29 15:02:01
    Unity第一人称和第三人称视角 第一人称视角 public class FirstView : MonoBehaviour { //要相机跟随的GameObject public Transform m_target; //鼠标敏度 public float mousesSensity = 10F; //上下...
  • Three.js 中的相机视角

    千次阅读 2018-09-20 21:08:14
    人称视角游戏(英语:first-person game)是从3D游戏创建时出现的游戏类型。与之前的所有2D游戏不同,一人称游戏是屏幕上并不出现玩家所控制的游戏主角,而是表现为主角的视野。大多数一人称游戏能看到主角...
  • 1. 摄像机成为胶囊的子物体,摄像机上放代码: using UnityEngine; using System.Collections; ...public class Sj : MonoBehaviour { public GameObject player;... Vector3 rot = new Vector3(0, 0, 0); /
  • 第一人称[_Characters],第三人称主角[_3rdPersonViewpoint]; 第一人称视角第三人称的差别在于鼠标旋转,经过测试在第三人称切换至第一人称时只要将3rd的localposition和localscale赋值给1fs就可以了,这是我自己...
  • 脚本MouseLook(在主相机上): using UnityEngine; using System.Collections; public class Mouselook : MonoBehaviour { public enum RotationAxes{ MouseXAndY = 0, MouseX =1, MouseY =2 ...
  • Unity3D 人称视角摄像机旋转控制

    千次阅读 2016-07-16 21:10:26
    //方向灵敏度 public float sensitivityX = 10.0f; public float sensitivityY = 10.0f;... //上下最大视角(Y视角) public float minmumY = -60f; public float maxmunY = 60f; float rotationY = 0f;
  • 交互方式:WASD控制摄像机移动,鼠标右键控制摄像机视角旋转。 实现操作 1、unity 工程中创建胶囊体,移除Mesh Renderer组件 2、添加Rigidbody组件,按照下图设置参数 3、创建一个平面(使用Plane或Cube均可),...
  • Unity实现第三人称视角

    千次阅读 2019-01-14 19:07:16
    最近耍了一波巫师3,突然想到能不能做个简单的第三人称视角的摄像机控制。不过这个摄像机控制目前还没有被卡视角的功能(就是那种根据地形调整摄像机距离)准备在后面几天实现卡视角功能。不过先来做个简单的第三...
  • 在unity3d 4.x里,找到挂载在人称上的"Character Motor"脚本。把脚本下边的 movement里的Gravity值设为0 即可。如下图所示:
1 2 3 4 5 ... 20
收藏数 3,541
精华内容 1,416
关键字:

第三人称视角