【UE Unreal Camera】【保姆级教程】手把手教你通过UE打开摄像头/预览图像画面

news2024/9/30 0:27:40

  【UE Unreal Camera】【保姆级教程】手把手教你通过UE打开摄像头/预览图像画面

概述

  最近在做一个游戏的开发,需要通过UE去打开用户的摄像头(ios,android上的手机摄像头;windows,mac上的电脑摄像头),预览图像,并且获取图像的帧数据进行数据的处理。UE作为一个成熟的,跨平台的游戏开发引擎,按理说应该有现成的api来进行实现我这个并不算刁钻的功能吧。
  本篇文章记录了通过UE来实现上述功能的具体实现方式,以及实现的过程中遇到的大坑,最后比使用UE来完成上述功能的一系列更好的方法

功能的实现

  经过一番研究,UE确实有相关操作相机的功能。根据UE的官方文档:“虚幻引擎4(UE4)中的媒体框架以能够在引擎中播放的媒体格式支持视频和音频采集设备)”。(UE播放实时视频采集)UE提供相关操作相机的模块叫做MediaPlayer。通过MediaPlayer可以获取相机列表,并且打开相机,并实现相机的预览。让我来手把手教你如何实现吧~

1 准备工作
  既然是手把手,那当然是从新项目开始,首先创建一个空白模板的UE工程
创建新项目
  接着在内容浏览器中新建一个媒体播放器,并为其创建对应的MediaTexture。(勾选如下内容)
  
  成功之后如下所示:在这里插入图片描述
  准备工作完成,现在就可以开始绘制蓝图,打开相机了!

2 打开相机
  打开相机这一块,首先要表扬一下UE,这一块官方文档写的挺不错也很详细了,照着他的蓝图去画就可以了,当然这个官方文档中前两步Create HUD Widget和Add to Viewport是用来创建Widget蓝图的,是和操纵相机无关的,为了更简化得说明,在我自己实例工程中没有这两步。
官网得打开媒体播放器蓝图(供参考)
打开相机BP
  (如果你要快速达到目的,下面的文字可以不看,只要根据第一步所说的,创建好了相关的变量,然后在关卡蓝图中照着我这个蓝图画一下,就可以达到目的
在这里插入图片描述

  下面讲一下图中的关键节点:

Enumerate Video Capture Devices:
  枚举出对应的摄像头设备,在Out Devices中输出找到的摄像头设备的ID。在输入节点的Filter中可以添加对摄像头ID筛选的条件。(比如针对移动设备来说,可以在此选择只列举前置摄像头,后置摄像头等)点击这个Make Bitmask的节点,在它的属性栏可以设置对应的位掩码选项。
在这里插入图片描述
  对于移动设备来说,获取视频列表和创建位掩码的选择略有不同,移动设备使用的是这一套,关注一下红框标注的地方,这是和上面介绍的打开windows摄像头不同的地方。在这里插入图片描述
Open Url:
  通过该函数可以打开相机,函数需要输入相机的url,这个我们已经通过breakMediaCaptureDevice获取到了,还需要输入的是一个媒体播放器。还记得最开始我们就创建了一个媒体播放器吗?我们需要在蓝图中找到它,然后将它最为输入,输入到这个函数中。
在这里插入图片描述
  大功告成!现在我们返回关卡见面,点击运行按钮。
在这里插入图片描述
  在运行时我们点击这个CameraMediaPlayer,就可以看到摄像头采集的画面,恭喜你,你已经通过UE打开了摄像头!
  当然我们要做的事情是要让采集的画面运行在游戏中,接下来我来教你如何在游戏中展示相机画面!

3 画面预览
  这一步异常简单。All you need is just a plane!😉
  如下图所示,拖一个平面到关卡界面中去,如果找不到平面可以点击“窗口”—>“模式”。
在这里插入图片描述
  哈~到这里已经做好了哈。我已经成功的使用UE打开了摄像头,平且将画面移到了游戏关卡中。注意这一套是对Windows的摄像头和Android手机的摄像头通用的。
至于如何在iOS中实现相同的功能,以及如何获取对应图像的帧数据,我们下期见!

Demo工程说明

  Demo工程包含以上所讲内容实例,进入工程以后,点击运行,就可以看到效果,并显示在游戏中。打包出来以后同样可以在Android手机上使用。(注意Mac电脑和iOS手机不可用)
  关注公众号后发送:Unreal-Camera即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP(五十七)LangChain使用Google Search Agent

大模型存在的问题 大模型在给人带来眼前一亮的表现,深深地震撼各行各业人们的同时,其本身也存在着不少问题。   以OpenAI的ChatGPT模型为例,其存在的问题有: 事实错误,容易一本正经地胡说八道,造成幻觉问…

重定向爬虫和多线程爬虫

前言 重定向爬虫是指在抓取网页时,如果目标网站内部存在重定向机制,即当你访问一个网页时,服务器会把你重定向到另一个目标网页。重定向爬虫可以帮助我们发现这种重定向链接,从而更有效地抓取目标网站的内容。 要实现重定向爬虫…

分享一些关于 CSS Grid 基础入门知识

网格系统(CSS Grid)是CSS中最重要的特性之一。它能够以简单的方式将元素对齐到列和行中。CSS网格使得设计复杂且响应式的网页变得更加容易,无需使用浮动、表格或定位。它还具有许多更强大的功能,如果你多加练习,就能发…

北京大学2018计算机学科夏令营上机考试

目录 A:计算两个日期之间的天数【暴力不水】 B:回文子串【暴力不水】 C:The Die Is Cast【DFS】 D:Euro Efficiency【看不懂】 E:重要逆序对【归并排序】 F:Tram【看不懂】 G:食物链【图】 H:DFS spanning tree【不会】 A:计算两个日期之间的天数【暴力不水】 //…

《微服务架构设计模式》第四章 使用Saga管理事务

内容总结自《微服务架构设计模式》 使用Saga管理事务 一、XA解决方案存在问题二、使用Saga管理事务Saga是什么补偿事务是什么Saga协调模式协同式Saga编排式Saga 隔离性Saga结构 三、总结 一、XA解决方案存在问题 在多个服务、数据库和消息代理之间维持数据一致性的传统方式是采…

小黑重庆归来,眼睛复查顺利,见到了三年没见的线上同门的leetcode之旅:剑指 Offer II 015. 字符串中的所有变位词

小黑代码1:滑动窗口 class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:# 字符串长度n_s len(s)n_p len(p)if n_s < n_p:return []# 差值数组arr [0] * 26# 初始窗口for i in range(n_p):arr[ord(p[i])-97] - 1arr[ord(s[i])-97] 1# 计算初始窗口…

Web服务器群集:Tomcat配置https证书

目录 一、理论 1.SSL 2.HTTPS协议和HTTP协议的区别 3.https证书配置 4.tomcat强制使用https 二、实验 1.https证书配置过程 2.tomcat强制使用https 三、总结 一、理论 1.SSL &#xff08;1&#xff09;概念 SSL是网络加密传输协议&#xff0c;是支持在网络服务器(主…

chatgpt赋能python:烧录代码过程是怎样的

烧录代码过程是怎样的 烧录代码是将编写好的程序代码烧录进内置闪存器件&#xff08;Flash&#xff09;或外部存储器&#xff08;SD卡、EEPROM等&#xff09;中的过程。本文将介绍烧录代码的具体过程和常用工具&#xff0c;以及一些注意事项。 烧录代码的步骤 步骤一&#x…

分布式负载均衡 Ribbon

一、Ribbon简介 是Netfix发布的负载均衡&#xff0c;Eureka一般配合Ribbon进行使用&#xff0c;基于HTTP和TCP的客户端负载均衡工具。 只有负载均衡的能力&#xff0c;不具有发送请求的能力&#xff0c;要配合服务通信组件。 RestTemplate 针对各种类型的 HTTP 请求都提供了相…

青少年机器人技术一级考试备考重点(一):机器人常识

随着机器人技术的飞速发展&#xff0c;越来越多的青少年开始关注并参与其中。青少年机器人技术考试作为一项评估学生机器人技术水平的重要考试&#xff0c;备受广大青少年和家长的关注。为了更好地备战青少年机器人技术一级考试&#xff0c;了解考试的学习要点和备考重点是非常…

LeetCode-67. 二进制求和

LeetCode-67. 二进制求和 1、题目描述2、解题思路3、代码实现4、解题记录 ) 1、题目描述 题目描述&#xff1a; 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例2&…

kafka实现消息接受和发送

1、首先引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spr…

第九十五天学习记录:C++核心:类和对象Ⅳ(五星重要)

C对象模型和this指针 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person {int m_A;//非静态成员变量 属于类的对象上static int m_B;//静态成…

Gradio库的Gallery模块介绍与select方法详解

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Flask boostrap实现图片视频上传下载展示

Flask boostrap实现图片视频上传下载展示 1、展示效果2、前端代码3、后端代码 1、展示效果 项目目录结构 2、前端代码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>&l…

Go 程序是怎样跑起来的

Go 程序是怎样跑起来的 引入 我们从一个 helloworld 的例子开始 package mainimport "fmt"func main() {fmt.Println("hello world") }用 vim 要打开&#xff0c;输入命令&#xff1a; :%!xxd下面是输出 00000000:7061 636b 6167 6520 6d61 696e 0a0a…

tomcat概述,优化,多实例部署

目录 一、概述 二、三个容器 1、Web 容器&#xff1a; 2、Servlet 容器&#xff1a; 3、JSP 容器&#xff1a; 三、Tomcat 功能组件结构 四、优化 1、启动速度优化 2、配置参数优化 五、多实例部署 一、概述 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一…

ubuntu下安装docker遇到的问题

如果你还没有安装虚拟机&#xff0c;推荐一篇关于安装Ubuntu的详细教程&#xff1a; VMware虚拟机安装Ubuntu20.04详细图文教程https://blog.csdn.net/weixin_41805734/article/details/120698714首先&#xff0c;安装docker的前提是虚拟机能够联网&#xff0c;如果能看到右上…

官方文档中docker安装php插件xdebug

docker安装php插件 直接上代码常见问题如果查看系统类型如何查看xdebug合适的版本安装异常提示Cannot find autoconf. Please check your autoconf installation and the$PHP_AUTOCONF environment variable. Then, rerun this script.configure: error: in /tmp/pear/temp/pea…

Zookeeper 分布式锁

优质博文&#xff1a;IT-BLOG-CN 一、简介 随着公司业务的发展&#xff0c;单机应用已经无法支撑现有的用户量&#xff0c;之前采用synchronized和Lock锁已经无法满足分布式系统的要求。我们应用程序目前都会运行120台&#xff0c;节假日会扩容至240台&#xff0c;属于多JVM环…