AR 广告大屏虚拟礼物模块功能一

编程入门 行业动态 更新时间:2024-10-12 16:28:46

AR 广告大屏虚拟礼物<a href=https://www.elefans.com/category/jswz/34/1771428.html style=模块功能一"/>

AR 广告大屏虚拟礼物模块功能一

一、功能统计

二、关闭视频播放模块


三、打开虚拟礼物模块


四、创建两个脚本,UI_Manager(用于管理界面之间的分配)和G_Sc(礼物模块)

UI_Manager脚本的内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UI_Manager : MonoBehaviour {void Start () {}void Update () {}//奇幻旅程按钮public void Bt_M_V_Q(){//开始播放视频,调用UI_Manager所依附的物体上的V_Sc脚本中的StartVideo函数gameObject.GetComponent<V_Sc>().StartVideo();}//拍照按钮public void Bt_M_A_P(){//停止播放视频,调用UI_Manager所依附的物体上的V_Sc脚本中的StopVideo函数gameObject.GetComponent<V_Sc>().StopVideo();}//获取贺卡的确认按钮public void Bt_GIp_St(){//将输入的命令写到贺卡上Debug.Log("Bt_GIp_St 1...................");gameObject.GetComponent<G_Sc>().InputName();Debug.Log("Bt_GIp_St 2...................");//截取贺卡并保存gameObject.GetComponent<G_Sc>().ScreenShot();Debug.Log("Bt_GIp_St 3...................");}
}
G_Sc的内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;public class G_Sc : MonoBehaviour {//申请变量储存If_G_Ip这个组件public InputField If_G_Ip;//申请变量储存显示名字的Text组件public Text Tx_G_Nm;void Start () {}void Update () {}//将输入框的文字显示在贺卡处的函数public void InputName(){//让贺卡中的Text组件中的文字变为输入框中输入的文字Tx_G_Nm.text = If_G_Ip.text;}//截图功能public void ScreenShot(){//Textture2D为内存中一种图片纹理格式//第一第二个参数指定了纹理的宽高,第三个参数指定了纹理的格式Texture2D texture2D = new Texture2D(600,800,TextureFormat.RGB24,false);//读取屏幕像素,确认截图区域texture2D.ReadPixels(new Rect(0,0,600,800),0,0,true);//保存对TextTure2D的更改texture2D.Apply();//将Texture2D转换为PNG格式储存在byte数组中byte[] bytes = texture2D.EncodeToPNG();//将转换的PNG图片保存在资源管理器中,Application.dataPath为资源管理器路径File.WriteAllBytes(Application.dataPath+"/ScreenShot.png",bytes);}}

五、创建一个空物体,重命名为Sc_Manager,将两个脚本挂载到该物体上,并将变量赋给相应的值


六、选中Bt_GIp_St确认按钮,在On Click()中添加相应的内容并选中相应的方法


七、运行后,在文本框输入内容并点击“确认”按钮


图片被保存成功







注:1.参考资料:

2.遇到的问题:截屏中没有任何内容


截图功能的代码:

 //截图功能public void ScreenShot(){//Textture2D为内存中一种图片纹理格式//第一第二个参数指定了纹理的宽高,第三个参数指定了纹理的格式Texture2D texture2D = new Texture2D(600,800,TextureFormat.RGB24,false);//读取屏幕像素,确认截图区域texture2D.ReadPixels(new Rect(0,0,600,800),0,0,true);//保存对TextTure2D的更改texture2D.Apply();//将Texture2D转换为PNG格式储存在byte数组中byte[] bytes = texture2D.EncodeToPNG();//将转换的PNG图片保存在资源管理器中,Application.dataPath为资源管理器路径File.WriteAllBytes(Application.dataPath+"/ScreenShot.png",bytes);}
unity中报的错误:

ReadPixels was called to read pixels from system frame buffer, while not inside drawing frame.
UnityEngine.Texture2D:ReadPixels(Rect, Int32, Int32, Boolean)
G_Sc:ScreenShot() (at Assets/Scripts/G_Sc.cs:44)
UI_Manager:Bt_GIp_St() (at Assets/Scripts/UI_Manager.cs:41)
UnityEngine.EventSystems.EventSystem:Update()

[d3d11] attempting to ReadPixels outside of RenderTexture bounds! Reading (0, 0, 600, 800) from (724, 526)


unity中Game视图的大小



原因:Texture2D和Rect中长宽不能超过724、526

解决办法:方法一、将两个参数都控制在724、526之内


方法二:Game视图所显示的就是屏幕的大小,将Game视图的窗口拖大,在运行时会出现问题,打包后可能不会出现该问题



点击保存后在Assets文件夹中查看图片的内容:

图片截图成功,但是坐标位置不对,所以显示的内容不对


更多推荐

AR 广告大屏虚拟礼物模块功能一

本文发布于:2024-02-16 23:03:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691760.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模块   礼物   功能   广告   AR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!