unity3d大型互动照片墙

2023-11-20

1.本次应客户需求,制作一个大型照片墙互动,输出分辨率为9600*4320(注:unity3d官方推荐最大分辨率为8192*3686.4),经过现场长达24小时暴力测试中途未发生问题,姑且判定可以达到正常标准,废话不多说,先上效果。

unity3d大型照片墙_哔哩哔哩_bilibili

下面列举几项用到的技术

待机视频滚动条问题

在原有的照片层之上生成了一部分遮挡条,通过DoTween控制变化时间实现遮罩层的滚动问题

 上下相邻照片重复问题

因为现场照片墙比较巨大,虽然每个位置照片都是从照片库里边进行获取,但总不可避免上下照片会有重复,因此需要自己写特定的算法进行规避上下照片重复问题,代码如下:

//numeber数量,minNum最小范围,maxNum最大范围
    public int[] GetNum(int number, int minNum, int maxNum)
    {
        List<int> RandomNum = new List<int>();
        int temp;
        int[] b = new int[number];
        System.Random r = new System.Random();
        for (int i = 0; i < number; i++)
        {
            temp = r.Next(minNum, maxNum);
            if (!RandomNum.Contains(temp))
            {
                RandomNum.Add(temp);
                b[i] = temp;
            }
            else
            {
                i--;
            }
        }
        for (int j = 0; j < b.Length; j++)
        {
            NewRandomNum[j] = b[j];
        }
        return b;
    }

相邻照片放大缩小问题

因为每次有照片放大,相应的周围照片要进行缩小,为了使每次交互影响的照片范围尽量小,可以提高可玩人数,采用放大中间位置,相应缩小周围相邻左右各两行,五行一个单位避免影响其他行

照片上下无限滑动

unity3d自带的Scroll View是无法实现上线无限滑动的,要实现这个功能我们就需要进行重写Scroll View组件,代码如下,篇幅有限就展示部分代码,博客,github很多大神重写的,大家有需求可以去找找:

 照片左右挤压移动

导入dotween插件即可实现照片放大缩小,以及左右移动的缓动效果

 照片放大后播放视频

由于现场可互动的范围比较广,播放视频的个数不确定,可能可以同时播放20+个视频,unity3d自带的videoplayer就很难胜任播放工作,引入视频播放插件AVPro,unity商店上大家可自行查找导入使用,同时AVPro播放视频也方便大家外置替换

视频播放点赞

为了简化操作,就将点赞数使用excel存储(方便甲方给某个领导设置点赞数,所以建议外置,随时可修改),主要是实现excel的读写,先读取此人已获得的点赞数,然后展示出来,如果有用户点赞,显示红心,并且点赞数+1

读取excel并显示代码如下:

public void ReadExcel(int ID)
        {
        //1.打开文件,创建一个文件流操作对象
        FileStream fileStream = new FileStream(Application.streamingAssetsPath + "/DZ/" + "/star.xlsx", FileMode.Open, FileAccess.Read);
        //2.创建一个excel读取类
        IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);

        //方法2:读取
        DataSet result = reader.AsDataSet();

        star = int.Parse(result.Tables[0].Rows[ID][1].ToString());
        mtext.text = star.ToString();
        reader.Close();
    }

 写入excel并显示代码如下

public void WriteExce(int wID)
    {
        //string filePath = Application.dataPath + "/StreamingAssets" + "/" + "star.xlsx";
        string filePath = Application.streamingAssetsPath + "/DZ/" + "/star.xlsx";
        //string filePath = Application.dataPath + "/Excel/" + "star.xlsx";
        FileInfo file = new FileInfo(filePath);
        if (!file.Exists)
        {
            Debug.LogError("not excel file!!!");
        }
        using (ExcelPackage package = new ExcelPackage(file))
        {
            star += 1;
            ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
            worksheet.Cells[wID + 1, 2].Value = star;
            package.Save();
        }
    }

 注意:人物视频播放点赞,我的实现方式读取-》写入-》读取,如果有什么简化方式可以下方留言讨论

视频播放完毕关闭

因为是通过AVPro官方案例提示实时生成视频组件进行播放视频,因此没想到检测视频是否播放并关闭的方法,最后在同事的提示下,为生成的MediaPlayer添加一个检测视频是否播放完毕的脚本,完美解决视频播放完毕自动关闭问题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RenderHeads.Media.AVProVideo;

public class ControlPlayVideo : MonoBehaviour
{
    private MediaPlayer mediaPlayer;
    // Start is called before the first frame update
    void Start()
    {
        mediaPlayer = GetComponent<MediaPlayer>();
        mediaPlayer.Events.AddListener(OnVideoEvent);
    }

    public void OnVideoEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
    {
        switch (et)
        {
            case MediaPlayerEvent.EventType.ReadyToPlay:
                break;
            case MediaPlayerEvent.EventType.Started:
                break;
            case MediaPlayerEvent.EventType.FirstFrameReady:
                break;
            case MediaPlayerEvent.EventType.FinishedPlaying:
                //Debug.Log(gameObject.name + "播放完毕");
                mediaPlayer.Control.Stop();
                if (gameObject.transform.parent.parent!=null)
                {
                    Destroy(gameObject.transform.parent.parent.gameObject, 0.1f);
                    ControlVolume.Instance.RemoveList();
                }  
                break;
        }
    }

此次纵向照片就总结到这,大家有什么意见或者建议,都可在下方留言,大家一起学习交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity3d大型互动照片墙 的相关文章

  • 如何在 JavaFX 中围绕自定义枢轴旋转对象?

    我想围绕自定义枢轴旋转一个对象 这就是它的重点 所以我有这样的代码 private final EventHandler
  • Matlab 的 slice() 函数无法按预期工作

    我想在 13 处绘制离散的 2D 图像z地点位于 4 4 52 使用以下代码行 a 100 mesh x mesh y mesh z meshgrid 1 1 100 1 1 100 4 4 52 a unifdist 0 b unifdi
  • Python 的 3D 场景渲染器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个易于使用的 Python 3D 场景渲染器 我所寻找的只是能够 加载3D场景模型 使用正
  • 无法加速像素修改的 BufferedImages

    很长一段时间 1 2个月 我一直在试图找到这个特定问题的答案 我无法让我的图像硬件加速 我一直在网上搜索 创建了自己的方法 用键盘敲击我的头 仍然感到疼痛 但没有成功 尽管我讨厌 Java SDK 以外的库 但我尝试了 LWJGL 和 JO
  • 操作系统如何在屏幕上绘制窗口?

    经过多年的计算机使用和编程 我意识到实际在屏幕上绘制的软件堆栈对我来说基本上是一个谜 我曾研究过一些嵌入式 LCD GUI 应用程序 我认为这为简化堆栈提供了一些线索 但对于 Windows 操作系统之类的东西的整体情况仍然模糊 据我所知
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • 使用 Scenform 将 SceneView 加载到片段中后出现黑屏

    我正在开发一个项目 该项目将在一个片段中包含 3D 模型查看器 为了做到这一点 我决定使用 sceneform 在尝试在我的选项卡片段中显示 SceneView 后 我遇到了 SceneView 的问题 一切都是根据示例和 scenefor
  • 网格三角剖分和简化 C++ 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 C 库来三角测量和简化 3D 网格 我的 3D 网格可能很大 大约 300 万个顶点
  • 实现3d索贝尔算子

    我目前正在研究从包含体素的 MRI 数据量中去除不均匀性 我想在这些体积上应用索贝尔运算符来找到梯度 我熟悉二维索贝尔掩模和二维图像的邻域 索贝尔面具 1 2 1 0 0 0 1 2 1 1 0 1 2 0 2 1 0 1 x y 的邻域
  • 如何在 OpenGL 中创建廉价的阴影? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有两个模型 A 和 B 以及一个灯 L 我希望模型 A 在模型 B 上投射阴影 我暂时不想考虑阴影体
  • SceneKit 修改 3D 对象并导出文件

    在我的应用程序中 我使用 SceneKit Framework 在 SCNView 中显示 3D 对象 并导出修改后的文件 并进行一些小的更改 如颜色 温度等 但在将其导出到文档文件夹后 我得到了原始文件 在这里我可以显示 3D 对象并对其
  • 如何使用更少的包绘制二元正态分布的表面和轮廓

    我将绘制二元正态分布的 3D 曲面及其轮廓 可以是任何二元正态分布 我想用persp and contour在我的画中 我在网上搜索了一下 但发现了很多方法 大多数人都使用过一些软件包 但我想以使用更少的软件包甚至不安装任何软件包的方式来执
  • 对一系列点重新采样

    我有一个 3d 点数组 想象一下球的轨迹 有 X 个样本 现在 我想对这些点重新采样 以便我有一个新数组 其中包含 y 个样本的位置 y 可以大于或小于 x 但不能小于 1 始终至少有 1 个样本 将原始数组重新采样为新数组的算法会是什么样
  • 3D 游戏的 Libgdx 渲染层

    在我的第一个 3D 游戏中 我现在想要渲染地板 它实际上是一个平面 不是 libgdxPlane on y 0 我想添加一个Texture到它 这样我就可以在每个级别有不同的楼层 现在我的问题是 创建和渲染这种纹理地板的最佳方法是什么 我考
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • OpenGL Z 偏置(多边形偏移)限制

    我有两个共面的多边形 我尝试做 glEnable GL POLYGON OFFSET FILL glPolygonOffset 0 1 并期望其中一个明显 位于 另一个之上 这种情况直到大约 70 75 个单位之外 近剪裁平面为 1 远剪裁
  • 使用 ThreeJS 获取球体纹理上的点击位置

    目前 我有一个带有纹理的球体 它绕 y 轴旋转 我还有在 3D 空间中单击的位置 以及球体上的旋转位置 我认为 目标 获取纹理上的位置 例如 我想获取我点击的图像的哪个方块 参见示例球体和下图 在实践中 我不会使用此图像 但我觉得这将是一个
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • 将大块位图转换为 3 维位图

    Problem 我需要这个大量的数据作为输入 对于基于C的arduino 这是上面示例中所需格式的大量数据 const byte bitmap 8 8 0xFF 0x81 0x81 0x81 0x81 0x81 0x81 0xFF 0x81
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格

随机推荐

  • iis6.0配置与漏洞复现

    实验环境 windows sesrver 2003 asp环境 1 iss服务器的搭建 1 点击开始 gt 控制面板 gt 添加或删除程序 2 点击添加或删除程序 3 点击应用程序服务器 gt 点击详细信息 点击确定完成配置 4 点击开始
  • 模板的完全特例化和部分特例化

    介绍 完全特例化就是类型完全明确的版本 而部分特例化指的是 只知道是几个参数的函数而不知道参数的类型 或者是只知道是引用或者是指针类型 而不知道具体是char 还是 int 模板特例化实例1 template
  • python 使用setup.py安装packages

    前置条件 安装了python 我的版本是python 3 6 5 安装pip 1 打开cmd 2 安装pip python m ensurepip 3 升级pip python m pip install upgrade pip 本地安装
  • 【ChatGPT实践篇】给小孩制作一个数字人恐龙科普短视频

    以下文章来源于飞书 1 科普文本生成 起初我也是试了不少prompts去让chatgpt自由发挥 生成恐龙科普文章 但科普内容要么过于复杂 要么过于宽泛 无法到达自己想要的效果 既然如此 我决定定制化科普内容 让它实现我的想法 1 1 确定
  • 编译原理13:SLR(1)分析表、LR(1)分析表

    更强的LR分析 可以根据当前单词 来选择是移进还是归约 只要所有移进项目中的点后面的那些终结符 与归约项目生成的非终结符的Follow集合的元素没有重叠 若当前单词属于上述Follow集合里则规约 SLR 1 冲突解决办法 SLR 1 分析
  • c++学习笔记

    c 学习笔记 1 安装环境 1 安装环境 windows 下载MinGW w64 linux
  • 在Mac上安装ArduinoIDE并布置环境支持NodeMcu

    前言 笔者最近在研究Swoole 因为对物联网很感兴趣 在某宝上买来了 NodeMcu 开发板 关于NodeMcu大家请提前做好功课 我选择的是CP2102版 Swoole TCP Server负责和小车通讯 Swoole WebScoke
  • 处理大并发之一 对异步非阻塞的理解

    处理大并发之一 对异步非阻塞的理解 在研究nginx和node js的时候常会遇到异步 非阻塞等 之前自己也经常使用epoll 对其同步与阻塞 异步与非阻塞有了一定的认识 现对参考资料总结下 首先讨论下使用事件驱动 异步编程的优点 充分利用
  • 记一次Elasticsearch节点状态red的整改过程

    文章目录 问题起因 Round 1 Round 2 Round 3 Round 4 总结 问题起因 自己负责审计日志模块的管理功能 同事突然对我说 写入的日志数据全部不能用了 我立即答复 回怼 不可能 说罢 还是去登录系统查看 能查出数据
  • 基于self-attention的BIGRU时间序列预测Python程序

    基于self attention的BIGRU时间序列预测Python程序 特色 1 单变量 多变量输入 自由切换 2 单步预测 多步预测 自动切换 3 基于Pytorch架构 4 多个评估指标 MAE MSE R2 MAPE等 5 数据从e
  • paddlepaddle(四)训练与预测验证

    目录 1 内置高级API封装训练 1 1使用paddle Model 封装模型 1 2用Model prepare 配置模型 1 3用Model fit 训练模型 1 4用Model evaluate 评估模型 1 5用Model pred
  • vue父子组件通信方式哪几种

    第一种 props和 emit parent vue
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • C++抽象工厂模式:Abstract Factory Pattern

    抽象工厂模式是工厂方法模式的升级版本 工厂方法模式只有一个抽象产品类 而抽象工厂模式有多个 工厂方法模式的具体工厂类只能创建一个具体产品类的实例 而抽象工厂模式可以创建多个 案例 在上一章节工厂方法模式的基础上 将披萨的各种原料生产抽象成一
  • Object-C Cocoapods

    已安装Cocoapods 为项目自动更新配置第三方SDK 在终端中操作如下 1 一般cd到 xcodeproj文件所在目录 cd 空格 路径回车 2 创建Podfile文件 pod init 3 打开Podfile文件并输入 target
  • EnableAutoConfiguration Attributes should be specified via @SpringBootApplic

    在排除数据源加载时 发现这个注解 EnableAutoConfiguration exclude DataSourceAutoConfiguration class 会飘红 这是因为在 SpringBootApplication中已经有 E
  • Qt开发入门教程-创建项目

    入门Qt开发教程 版本 QT 5 15 2 创建项目 1 工程类型选择 Qt Widgets Application 传统的c 不适合移动端开发 QtWidgets 使用QPainter依次为每个界面元素渲染 不断地重复渲染状态 每次打开都
  • 面经-Bosch博世无锡&UL美华

    工作总算有所眉目了 太多的总结暂时还没有太多心情来理清楚 先来两个面经 给可能现在或以后需要的人们1 Bosch 博世无锡柴油系统博世公司 业内的人都知道 汽车部件的巨无霸 最近几年才来到中国 虽然比起德尔福有些稍晚 但发展前景值得期待 无
  • R语言读取Excel的神器——openxlsx

    作为非程序猿的各位同志们 可能最擅长的数据整理软件或者统计软件就是 嗯 没有错 它就是集万千宠爱于一身的E X O 咳咳咳 好了 隆重推出我们的主角 Excel 事实上 Excel是个super强大的软件 基本上用它已经能完成大量的统计分析
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity