赞
踩
在前端开发过程中,需要嵌入3D模型,目前所用的3d模型都是由unity 3d 编译而成的,直接嵌入就可以了。
用iframe直接嵌入unity 3d 的编译包。unity 3d 编译之后,最终会生成js文件。
首先,将unity 3d 文件,编译之后放入一个和public同级的文件夹,这里命名为model;
其次,直接用iframe嵌入;查看嵌入的效果;
最后,将文件打包,放到一个目录下面,需求就达到了。
前端环境主要是在vue3+element-plus的环境下搭建的,主要代码如下:
- <script setup>
- import { modelList } from '../units/img';
- import { onMounted, reactive, ref } from 'vue';
- let videoDetail = ref({});
- let videos = reactive({ state: false, src: "" });
-
- const showCase = (index) => {
- let tag = 'watch'
- videoDetail.value.src = `${window.origin}/model/index.html?name=${tag}.ab&`;
- }
-
- </script>
-
- <template>
- <main>
- <div class="content-3d-button" @click="showCase()">更多模型</div>
- <div>
- <el-dialog v-model="videos.state" title="" :header="null">
- <div style="border-radius: 10px;">
- <iframe :src="videoDetail.src" ref="videoDetail" height="800" width="100%" frameborder="0" scrolling="no"
- style="margin:0 auto;border-radius: 10px;"></iframe>
- </div>
-
-
- </el-dialog>
- </div>
- </main>
- </template>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
该问题主要特征是,根据要求传了对应的参数过去,但是模型不显示。主要是过去的数据,用js接收的,用的是window.top获取url路径的。
主要解决方法,就是将window.top换成window,因为window.top是获取最上面的路由窗口,而iframe在嵌入时是有两个路由的地址的,一个是最外层,一个是本身的地址。
当模型页面设置为屏幕一样的高宽时,弹框因为太小,导致页面没有展示出来;因为unity 3d 编译出来的文件屏幕大小固定,所以弹框的宽度没超过时,会将部分页面遮住。
主要解决方法,是在编译的时候,将unity 3d的页面高宽固定。这样弹框只需要将高宽设置比unity3d稍微大一点就可以了。
因为模型创建的大小不一样,有的可能很大,有的可能很小;如,有的一个房子,整个模型就会设计的非常大;而有的模型创建的就比较小。目前是根据不同的传参模型的名称,自动匹配合适的倍数。
unity 3d 的跨域是软件自带的问题,不能通过浏览器的设置或者服务器的设置来解决。主要是将模型和项目文件放在一个域名下面,这样访问就不存在跨域问题了。
一开始不清楚不喝传递参数,准备用postmessage方法来传递参数,后来发现不需要,unity 3d传参的方法和js的方法都是一样的,用window,这样可以直接通过路由进行传参,页面也没有必要使用的那么复杂;主要出现这个问题,还是对unity 3d不够熟悉。
unity 3d在打包之后,会编译成.unityweb格式的文件,这些文件在.net的根目录获取获取不到对应的资源而报错,最终只能通过前后端不共用同一个域名,避开.net的反向代理机制,达到实现的效果。详细的处理过程可以链接一下的地址。
unity .unityweb获取不到使用权限404报错复盘-CSDN博客
开发中遇到问题是常见的,尤其是IT开发中,毕竟很多的场景都是没遇到过的,所以在这个过程中,需要对处理问题形成自己的思维框架。对此,直接借用《管理就是解决问题》中如何搭建思维框架的步骤来搭建。
1、列出所有问题的特征。
2、分析可能产生问题的原因,尤其是主要原因。
3、假设原因存在,提出解决方案。
4、验证方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。