当前位置: 首页 > news >正文

用python写一个简单的网站开发客户的70个渠道

用python写一个简单的网站,开发客户的70个渠道,苏州网络公司推荐,四川省信用建设促进会网站一、新建平面 在Unity中,有一类叫Prefabs的预制件,所谓的预制件其实就是一个模块,这个模块包含了GameObjects及其相关联的组件、属性、动作、模型、纹理等等,这是一个功能块,这种设计使得模块可以非常方便的被复用。在…

一、新建平面
在Unity中,有一类叫Prefabs的预制件,所谓的预制件其实就是一个模块,这个模块包含了GameObjects及其相关联的组件、属性、动作、模型、纹理等等,这是一个功能块,这种设计使得模块可以非常方便的被复用。在我们引入ARCore的相关Prefab前,我们把场景中的”Main Camera” 和”Directional Light”删掉,因为ARCore中已经有这两个GameObject了,Hierarchy窗口,选中”Main Camera”, “Directional Light”,右键选择”Delete” 删除掉(或者在选择后直接按Delete键删除)。
在这里插入图片描述

在Project窗口中,找到”GoogleARCore” -> “Prefabs” ,选择 “ARCore Device” 和 “Environmental Light” prefabs,并将这两个 prefabs拖到Hierarchy窗口中,如下图所示。
在这里插入图片描述

前面我们介绍过Prefabs,当检测到真实世界中的平面时,我们需要一种在虚拟空间中表示这一特征的方法,这就是使用可视化的虚拟平面,为了使用代码来创建平面,我们也要制作一个平面的Prefabs,当检测到更多真实世界的平面时,我们还要实例化并附加更多的Prefabs,以使可用的虚拟平面更大。
  在Hierarchy窗口,点击右键,选择 “Create”-> “3D Object” ->”Plane”,新建一个平面,命名为”VisualDetectedPlane”如下图所示:
在这里插入图片描述

在这里,我们特别需要关注的是在平面的Inspector窗口中,Position一定要归0,同时还要确保Scale为(1,1,1),如果这里有少许偏移,那么在用代码实例化平面后也同样会出现偏移。
在这里插入图片描述

二、应用纹理
  有了平面,我们还要给平面赋一个材质,以便在实例化后用户能看到这个平面。保持当前”VisualDetectedPlane”属于被选中状态,点击Mesh Renderer组件左侧的箭头打开Mesh Renderer组件详细信息,在详细信息栏展开后点击Element0后面的那个小圆圈,这将打开材质选择面板,在材质选择面板中,选择”PlaneGrid”,这就为我们的“VisualDetectedPlane”平面赋上了一个漂亮的可视材质纹理了。如下图所示:
在这里插入图片描述

三、添加平面渲染脚本
有了平面,也有了材质纹理了,但我们还需要一个渲染器来将检测到或者扩展出来的平面渲染出来,如果我们自己去写这个渲染器将不会是一件愉快的工作,好在ARCore已经为我们写好了,我们只需要将这个写好的类附加到我们的平面上即可,点击 “Add Component”按钮,在搜索框中输入”Detected”,可以找到DetectedPlaneVisualizer,将这个脚本附件到我们的平面上。如下图所示:
在这里插入图片描述

四、制作平面Prefabs
  与前面所说一样,在Hierarchy窗口中,将VisualDetectedPlane平面拖动到Projects窗口中的Prefabs文件夹中,这样我们就做好了VisualDetectedPlane平面的Prefabs,然后删除Hierarchy窗口VisualDetectedPlane平面。
在这里插入图片描述

五、更新App Controller
  好了,有了可视化的平面Prefabs了,我们现在需要更新一下我们的App Controller,以便处理检测到的平面的可视化问题。因为平面中我们添加加的DetectedPlaneVisualizer是由ARCore提供的,我们需要在我们的代码中引用其命名空间GoogleARCore.Examples.Common。
  然后我们再申明一个GameObject,注意这个变量是public型的,等挂载这个脚本后,这个变量会出现在Inspector窗口中,另外,我们还实例化了两个list来存放我们新检测到的平面和已检测到的所有平面,代码如下所示:


```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleARCore;
using GoogleARCore.Examples.Common;public class AppController : MonoBehaviour {private bool mIsQuitting = false;public GameObject DetectedPlanePrefab;private List<DetectedPlane> mNewPlanes = new List<DetectedPlane>();private List<DetectedPlane> mAllPlanes = new List<DetectedPlane>();// Use this for initializationvoid Start () {OnCheckDevice();}// Update is called once per framevoid Update () {UpdateApplicationLifecycle();Session.GetTrackables<DetectedPlane>(mNewPlanes, TrackableQueryFilter.New);for (int i = 0; i < mNewPlanes.Count; i++){GameObject planeObject = Instantiate(DetectedPlanePrefab, Vector3.zero, Quaternion.identity,transform);planeObject.GetComponent<DetectedPlaneVisualizer>().Initialize(mNewPlanes[i]);}Session.GetTrackables<DetectedPlane>(mAllPlanes);}/// <summary>/// 检查设备/// </summary>private void OnCheckDevice(){if(Session.Status == SessionStatus.ErrorSessionConfigurationNotSupported){ShowAndroidToastMessage("ARCore在本机上不受支持或配置错误!");mIsQuitting = true;Invoke("DoQuit", 0.5f);}else if (Session.Status == SessionStatus.ErrorPermissionNotGranted){ShowAndroidToastMessage("AR应用的运行需要使用摄像头,现无法获取到摄像头授权信息,请允许使用摄像头!");mIsQuitting = true;Invoke("DoQuit", 0.5f);}else if (Session.Status.IsError()){ShowAndroidToastMessage("ARCore运行时出现错误,请重新启动本程序!");mIsQuitting = true;Invoke("DoQuit", 0.5f);}}/// <summary>/// 管理应用的生命周期/// </summary>private void UpdateApplicationLifecycle(){if (Session.Status != SessionStatus.Tracking){const int lostTrackingSleepTimeout = 15;Screen.sleepTimeout = lostTrackingSleepTimeout;}else{Screen.sleepTimeout = SleepTimeout.NeverSleep;}if (mIsQuitting){return;}}/// <summary>/// 退出程序/// </summary>private void DoQuit(){Application.Quit();}/// <summary>/// 弹出信息提示/// </summary>/// <param name="message">要弹出的信息</param>private void ShowAndroidToastMessage(string message){AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");if (unityActivity != null){AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast");unityActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>{AndroidJavaObject toastObject = toastClass.CallStatic<AndroidJavaObject>("makeText", unityActivity,message, 0);toastObject.Call("show");}));}}
}

这段代码的逻辑如下,首先我们从Session中得到标记为new的DetectedPlane,并将这些检测到的平面赋给mNewPlanes list表,然后我们根据新检测到的mNewPlanes数量,对每一个新检测到的平面实例化一个我们之前制作的VisualDetectedPlane平面,并将新实例化的平面赋给planeObject以便显示和利用。最后我们还保留一份所有检测到的平面的副本。

六、测试平面检测功能
  至此,我们已经更新了App Controller,也制作了我们需要可视化的平面,现在我们要把这个脚本挂载到场景中,在Hierarchy窗口中,右键选择”Create Empty”,新建一个空对象,并命名为”AppController”。
在这里插入图片描述

点击Detected Plane Prefab后的小圆圈打开物体选择对话框,选择”VisualDetectedPlane”,如下图所示:
在这里插入图片描述

http://www.lbrq.cn/news/2643625.html

相关文章:

  • 营销型网站建设定制互联网推广引流公司
  • 西安网站优化服务常德网站优化公司
  • 做网站的快捷方式代码网站之家查询
  • wordpress做一个视频网站百度收录最新方法
  • 政府信息网站建设武汉 网络 推广
  • 展厅设计制作网站东莞网站推广大全
  • 带搜索的下拉框网站网络营销师培训费用是多少
  • 部门网站建设意见今日nba比赛直播
  • 网站规划设计说明书电话营销话术
  • 网站建设需要的流程湘潭营销型网站建设
  • 温江建网站申请百度收录网址
  • wordpress促销插件上海seo推广公司
  • 正规网站建设的公司名优网站关键词优化
  • 建设完网站成功后需要注意什么安卓优化大师官方下载
  • 专业的网站制作公司产品软文代写
  • 怎么让百度收录网站网上卖产品怎么推广
  • 做网站买服务器怎么样百度快速优化软件排名
  • 网站开发哪里seo推广工具
  • 网站建设教程视频网络宣传推广方案
  • 漫画交流网站怎么做seo代做
  • 设计制作一个保温杯pptsem与seo的区别
  • 西宁做网站建设公司高端营销型网站
  • 邮件网站排名郑州网络推广培训
  • 电脑网站开发手机上可以打开吗最新国内新闻10条
  • 海南三亚做网站互联网营销师
  • 建设网站需要收费吗360搜索推广
  • 杭州开发网站的公司软文推广文章范文
  • 网站建设报价东莞百度app下载安装
  • 做网站怎么收费衡阳seo
  • 做电影下载网站好写手接单平台
  • 微软将于 10 月停止混合 Exchange 中的共享 EWS 访问
  • 多级缓存详解
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • MetaBit基金会加码投资图灵协议,深化去中心化金融与元宇宙生态合作
  • 【unitrix数间混合计算】2.4 二进制整数标准化处理(src/number/normalize/int_normalize.rs)