Tag: Unity

Windows上的Unity iOS:使用VMWare从Windows机器上的Unity编辑器中部署到iPhone

这是在Windows计算机上开发Unity iOS应用程序的帮助。 使用VMWare,可以在本地虚拟机上运行Shell脚本,以自动完成通过USB将Unity应用程序从编辑器部署到iPhone的整个过程。 该过程是单击等待的过程,每个构建大约需要5分钟。 本文提出了一些组件来管理自动化。 注意 :这是“穷人”的方法,如果您一开始只能购买Macbook,从长远来看可能会浪费您的资源。 另外,在完全提交之前,请通读并做您自己的研究,因为可能存在一些硬件要求。 免责声明 :在非Apple硬件上运行任何macOS均违反Apple EULA。 请确认风险,并自行承担责任。 系统总览 Shell脚本在Windows和VM macOS都具有读/写访问权限的目录中监视非常简单的时间戳文件。 每当Unity Editor将项目组合到文件夹中时,C#后处理脚本都会在文件中设置标志。 然后在VM中,shell脚本将检测该标志,构建/部署项目并折叠该标志。 因此,只要脚本在VM上运行,用户就可以在Unity Editor中按下“构建”按钮,并免提等待,直到iPhone自动打开应用程序。 设置共享文件夹 共享文件夹是VMWare用来访问主机文件系统的功能。 该文件夹将容纳并启用Unity Editor和Shell脚本之间的通信。 使用共享文件夹 https://www.vmware.com/support/ws5/doc/ws_running_shared_folders.html 设置xcodebuild 要通过shell脚本构建XCode项目,有一个名为xcodebuild的命令行工具。 这应该与XCode应用捆绑在一起。 设置ios部署 xcodebuild没有可以部署到设备上的功能,但是还有另一个名为ios-deploy工具可以这样做。 此外,iPhone还需要通过USB连接到计算机并路由到VM。 ios部署 https://github.com/ios-control/ios-deploy 连接USB设备 https://www.vmware.com/support/ws55/doc/ws_devices_usb_connect.html 设置Unity C#后处理脚本 构建完成后,将调用带有[PostProcessBuild]属性标记的静态方法。 对于时间戳文件的格式,脚本可以是这样的: 每当用户单击“生成”按钮时,Unity编辑器都会将项目编译为XCode项目,然后此脚本将更新时间戳。 构建路径必须设置为共享文件夹内部。 设置Shell脚本 这是整个脚本,随后是一些重要内容的深入介绍。 该脚本可以设置为登录项,以便它自动开始运行。 可以通过关闭终端窗口来中止该过程。 在脚本中可以更改的共享文件夹名为__transfer_ ,以及项目名称( MyProject )和应用程序名称( foo.app )。 这些名称必须与Unity Editor中的构建设置匹配。 默认情况下,诸如cd和cp类的命令无法在“共享文件夹”(“无此文件或目录”)内部访问。 […]

NatCam教程系列1:开始

NatCam于2015年秋天启动。我当时在一家需要在Unity中扫描条形码的初创公司工作。 当时没有解决方案,而最接近的( WebCamTexture )根本不能令人满意。 因此,我决定创建一个API来完成我们需要的API。 一年半过去了,我们来了! 那么NatCam的作用是什么? 很高兴你问。 以下是(非详尽的)列表: 流体相机预览,与WebCamTexture 高分辨率预览(在某些设备上为1920×1080或更高) 自定义分辨率预览,根据需要高低 照片拍摄。 拍摄8MP,12MP或更高的高分辨率照片 闪。 拍摄照片时,设置闪光模式 对焦和自动对焦 曝光控制。 使场景变亮或变暗 相机光学变焦 火炬。 无论是否正在运行摄像头预览,请戴上手电筒 VR支持,适用于我们所有的Cardboard和GearVR爱好者 预览数据。 在流式传输预览数据时对其进行访问

介绍WRLD挑战赛的获胜者

WRLD最近为开发人员使用任何WRLD SDK创建最有用的应用程序或身临其境的体验带来了全球性挑战。 比赛于10月1日开始,一直持续到12月31日。 WRLD从VR驱动的旅行应用程序到身临其境的健身游戏,再到导航应用程序再到飞行游戏,都对这一挑战做出了很好的回应。 提交的创意与WRLD SDK结合在一起,是无止境的。 根据WRLD平台功能的创造力,相关性,质量和使用情况对获奖者进行评判。 认识获奖者: 有用的应用类别的获胜者: YouAnchor YouAnchor是Yosun Chang推出的第一个iPhone X应用程序,可让您成为自己的现实世界化身中的化身锚。 用户可以用自己的脸庞伪造自己的个性化头像,并在自己的作品中加注星标,以欣赏风景如画的美景,随时随地共享和直播。 该应用程序的目标用户是想个性化自己的化身并通过WRLD 3D地图进行实时流播的所有人。 应用程序的质量以及概念的独特性是决定其成功的因素。 该应用程序目前可以在iPhone X上查看,但不久之后还将对其他手机开放。 您可以在Github存储库中查看YouAnchor。 游戏/沉浸式体验类别的获胜者:天使世界 该游戏由肯尼·汉森(Kenny Hansen)创建,专注于解决VR内容的三个主要问题:不中断沉浸感就很难移动,通常是一个狭窄/封闭的环境,而且很孤独。 Angel World旨在提供一种开放,自由,富有表现力和深度的开放世界体验,使您可以在任何地方飞行以与世界各地的玩家交流。 在WRLD的3D地图中飞行的感觉同时空灵而令人上瘾。 该应用程序主要用于房间规模的VR用户,肯尼(Kenny)打算在夏天推出更完美的体验。 最后,非常感谢所有参与#WRLDChallenge的开发人员和设计师。 我们希望将来也能举办更多此类比赛。 敬请关注!

Unity —如何搭建桥梁:iOS到Swift的Unity

通过添加ARKit和iOS 11中的Core ML,能够将iOS功能桥接到Unity中,使您作为开发人员能够获得更强大和独特的产品体验。 在ustwo建立实验时,我们必须创建一个自定义屏幕录制功能,该功能涉及尚未桥接到Unity中的iOS功能。 结果是使用iOS的ReplayKit API记录游戏玩法,保存记录并将文件传递回Unity的桥梁。 源代码在这里:ReplayKitUnityBridge 在DemoUnityAndReplayKit文件夹中运行DemoScene 将Xcode的“构建设置”中的Swift版本设置为4.0,以便正确构建* 步骤1:如何从Unity向iOS发送消息 首先打开Xcode> New Project> Cocoa Touch Framework 将该项目命名为“ ReplayKitUnityBridge” 在左上角显示“ ReplayKitUnityBridge”。 右键单击->单击“新建组” 右键单击您的源文件夹,然后单击“新建文件”> Swift文件 将您的新文件命名为“ ReplayKitNative ” 将以下内容添加到您的ReplayKitNative.swift文件中 进口基金会 导入UIKit 导入ReplayKit @objc公共类ReplayKitNative:NSObject { @objc静态让共享= ReplayKitNative() 私人let screenRecorder = RPScreenRecorder.shared() 让kCallbackTarget =“ ReplayKitUnity” @objc func startScreenCapture(){ self.screenRecorder.startRecording {(错误)在 // UnitySendMessage(kCallbackTarget,“ OnStartRecording”,“”) } } 让我们回顾一下上面的代码: 使用@objc标志来标记要公开给Objective-C和Unity的内容 @objc公共类ReplayKitNative:NSObject @objc静态让共享= […]

如何将Unity游戏嵌入iOS本机Swift应用程序

嗨! 对于一个或我们将来的B2B合同,我们必须将Unity游戏集成到iOS本机Swift应用程序中。 我们为实现有效而没有错误的努力已经很多天了。 我们希望通过这个简单的教程来分享我们的知识和过程。 本教程的灵感来自其他人的工作: 将Unity 5与Xcode 7集成在本地iOS应用中 几个月前,我发表了一篇博客文章,介绍如何在本地iOS应用程序中集成Unity3D。 本教程 书呆子 久隆县 swift-unity –将Unity(2017.1+)场景集成到iOS(Swift 4.0,Xcode 9+)项目中的示例代码。 github.com keyv / iOSUnityVuforiaGuide iOSUnityVuforiaGuide –将Unity + Vuforia集成到本机iOS应用程序中 github.com jack_loverde / Unity 5 Vuforia 6和iOS本机集成 这是带有代码的Unity 5.x,Vuforia 6.x和iOS 8.4至10.x子类化示例的存储库。 bitbucket.org 这是所有资源的链接: 单击此处 以及指向其特定部分的链接: 附加:包含遵循教程的基本文件的文件夹: 点击这里 TutorialImages:本教程中使用的所有图像: 点击这里 UnityExport: Unity iOS构建导出文件夹: 单击此处 UnityProject:本教程中使用的Unity项目: 单击此处 XcodeProject:可以用作您自己的项目的模板的整个Xcode项目: 单击此处 (如果在构建“类” , “库”和“数据”文件夹的“删除”和“删除引用”时遇到错误,请继续执行11. 12.和13.步骤。) […]

展示:增强现实保险卡

虚拟现实 在虚拟现实中,用户完全沉浸在完全人工的数字环境中。 随着2016年4月/ 3月HTC Vive和Oculus Rift的发布,最终消费者(主要是游戏玩家🕹)终于获得了可用且付费的产品。 价格范围:仅用于耳机和控制器的价格在500到800美元之间。 您需要具有硬核游戏装备(> $ 2000),并且需要为每个单独的应用/游戏付费。 大多数游戏是在Steam上购买的。 增强现实 在增强现实中,虚拟对象叠加在现实环境中。 它已经很流行并且在电视上广为人知,尤其是在网球,棒球或橄榄球中。 大多数情况下,叠加层会显示历史,统计或信息数据。 宜家已经提供了一个很棒的移动应用程序,您可以在其中为您的房间完全提供虚拟宜家产品。 最后但并非最不重要的:Snapchat。 我认为每个人都看到过凯莉·詹纳(Kylie Jenner)脸上流行的小狗过滤器。 价格范围:0美元! 是的,零。 几乎每个人都已经有了支持增强现实技术的智能手机。 只需从商店下载该应用程序,然后就可以开始了! 混合现实 混合现实不只是叠加。 它将虚拟对象锚定到现实世界中的对象,并且大多数情况下,您也可以直接与它进行交互。 另外,虚拟对象还与周围环境互动。 例如:您可以在厨房的桌子上玩虚拟国际象棋,并用手互动/移动所有棋子。 所以现在放手! 在两天内,我们创建了3个不同的,非常粗糙的实验应用程序。 主要目标是学习新知识,并有很多乐趣。 增强现实保险卡的构想诞生了。 它使用Image Target识别保险卡(是的,它不能在其他卡上使用💳),并在其上投影2D / 3D数据。 为简单起见,我们将其简化为: 全名 顾客号码 社会保险号码(在瑞士,我们称为AHV号码) 已结算和剩余免赔额 已结算和剩余共付额 手机(较新的iOS或Android手机) 通常,增强现实设备使用计算机,显示器,陀螺仪传感器以及可以输入信息的设备(例如相机)。 这些东西都可以在智能手机上使用,使手机成为AR应用程序(例如PokémonGo)的良好渠道。 通过GPS或摄像机或其他传感设备收集的信息将进行评估,并叠加在现实视图中。 在此示例中,我们使用了新一代Apple iPhone,它支持增强现实应用程序和AR-Kit。 Vuforia Vuforia是AR市场的重要参与者。 您可以将其软件开发工具包(SDK)用于移动设备,以创建增强现实应用程序。 他们在其库中提供了许多功能,因此我们决定使用Image Targets。 迅速 Swift是Apple用于iOS和OS […]

Unity ARKit示例:第2部分

创建一个Hello World应用程序。 本文是从Unity ARKit开始的系列文章的一部分, 示例:第1部分 。 你好,世界 我们首先构建使用Unity-ARKit-Plugin的绝对最小应用程序: 我们首先创建一个支持Unity-ARKit-Plugin的场景: 在Unity中 ,我们创建一个新文件夹, 资产>场景,并在其中创建一个新场景,例如Hello World。 我们修改主相机 ; 将“ 变换”>“位置”设置为(0、0、0),并将“ 摄像机”>“清除标志”设置为仅深度 我们将Unity AR Video脚本添加到主摄像机 。 然后我们将Unity AR Video> Clear Material设置为Assets> UnityARKitPlugin> Plugins> iOS> UnityARKit> Materials> YUVMaterial 我们将Unity AR Camera Near Far脚本添加到主摄像机 我们创建一个新的空GameObject ,例如ARCameraManager,并向其中添加Unity AR Camera Manager脚本。 我们将Unity AR Camera Manager> Camera设置为主摄像机 我们将预制资产Assets> UnityARKitPlugin> ARKitRemote> ARKitRemote添加到场景中 现在,我们为应用程序添加了一些特定的东西,例如,我们添加了具有以下内容的多维数据集 : 转换:(0,0,2) […]

重新创建本机iOS滚动和动量

我们在Unity中重新创建了iOS原生滚动条,并充满了动力。 我不会显示很多代码,但是我将与您分享Apple本身使用的原理和不可思议的数字。 我可以肯定,我不是唯一一个因在UX时代的2017年并不是每个卷轴都相同而感到高兴的人。 再次考虑,对所有内容进行标准化可能是一个错误的决定,尽管您可能会认为一种涡旋物理比另一种更好,但这实际上是一个见解的问题。 我老板的观点是,我们需要在iOS移动应用程序中实现iOS滚动物理的克隆。 您为什么要在移动应用中使用U nity ? —这就是我每天问自己的问题。 不管为什么,我们都解决了这个问题。 但是我们发现的结果会让您感到惊讶! 是的,我们用C#做到了这一点-但谁在乎,底层算法很重要,而不是语言。 不想听所有的戏吗? 只需滚动到底部。 NGUI和Unity UI 从一开始,我们就知道不可能在Asset Store上找到完成的产品/插件并仅仅实施它,但我也知道我们的老板是一位老派的高级程序员,并且不会拒绝。 因此,我们研究了NGUI和本机Unity UI滚动视图的物理特性。 这太可怕了。 虽然我们无法完全检查Unity UI的内部工作原理,但通过观察我们可以学到很多东西。 简而言之,开发人员似乎很着急,没有花时间对其他平台如何处理UI元素滚动进行适当的研究。 也许他们没有被告知要照顾? 毕竟,Unity UI不能用于完整的移动应用程序(在我们的例子中是社交网络)。 没有平台是相同的,但是到目前为止,我们知道Android和iOS在以下几件事上都达成共识: 在视口之外禁用或重用元素 建立动力并坚持到底 有一些弹簧机制或类似的实现 水平滚动和垂直滚动不应共存 让我们使用字体粗细:1700 对于第一个。 苹果和谷歌有一个很好的理由来解决所有使东西消失或失效的麻烦,即性能问题。 当您使用Unity UI滚动包含10个项目的游戏内菜单时,就纯fps性能而言,它表现良好。 但是,一旦您开始用各自的个人资料图片来表示从Facebook API渲染的所有1244个联系人,那么一切都会变得一团糟。 内存和CPU上升,而fps下降。 我发现iOS使用了一种很酷的技术-它会跟踪元素何时离开视口(为了大家,让我们称之为它)以及何时离开,将元素清空,填充新数据并附加到列表的底部。 因此,列表永远不会有超过12–13个元素一直在被重用。 我们认为此功能是必须的,但稍后会介绍更多。 当然,Unity UI不会这样做,正如我的同事Miloš告诉我的那样,NGUI似乎是一个半开发的系统,从未在任何地方使用过(呵呵,对吗?)。 至于它们的动力和春季选择,我们整天都在对它们进行自定义,但它们从未按预期工作。 将研究转移到网络上 在无奈之下,我在StackOverflow上发布了一个问题(里面有扰流板): 需要帮助剖析并基于PastryKit重新创建完美的滚动缓动 对于Web,我通常只使用本机滚动机制。 它们快速,可靠并且不涉及编码。 但是… stackoverflow.com 对于那些由于剧透而选择不读取S / […]

Unity ARKit示例:第3部分

我们创建一个使用命中检测的应用程序。 本文是从Unity ARKit开始的系列文章的一部分, 示例:第1部分 。 放置立方体 在此示例中,我们将使用Unity-ARKit-Plugin中的另一个API ; 我们将利用它的功能来检测从相机取景器中心投射的光线对物理世界中物体的撞击。 特别是,当按下“ 放置”按钮时,如果检测到击中,则应用程序将放置一个30厘米的立方体。 首先,将Hello World场景另存为Scenes文件夹中的Place Cube ,然后: 我们删除了Cube , Canvas和EventSystem GameObjects 我们添加一个Button ; 将其重命名为PlaceCube 我们更新PlaceCube的 Text子GameObject ; 将其对齐方式设置为居中,将文本设置为放置 接下来,我们需要创建模型(或预制模型)以实例化GameObject 。 我们在场景中创建一个Cube GameObject 我们将其变换位置设置为(0,0,0)并将缩放比例设置为(0.3、0.3、0.3 ) 我们创建一个文件夹Assets> Prefabs> Place Cube并将其拖入其中(这将创建一个预制件) 最后,我们从场景中删除多维数据集 我们创建一个脚本; 资产/脚本/位置多维数据集/PlaceCube.cs: 观察结果: 该代码是不言自明的 在此代码中, ARPoint是相机取景器的中心 我们将此脚本作为组件添加到PlaceCube上 。 我们将Cube预制件拖到脚本上的Hit Hit预制值。 然后,将HandleClick方法附加到PlaceCube按钮: 在PlaceCube的“ 按钮”组件上添加(加号按钮) “单击()”条目 将PlaceCube GameObject拖到条目上 在条目上选择PlaceCube:HandleClick方法 现在,我们按照示例Unity […]

从Unity到Swift集成

2.选择Unity作为您的项目配置文件。 3.如下所示匹配Unity.xcconfig文件。 SWIFT_OBJC_BRIDGING_HEADER = $(PRODUCT_NAME)/Unity/swiftunity-Bridging-Header.h; SWIFT_PRECOMPILE_BRIDGING_HEADER = YES; 4.将运行脚本添加到XCode构建目标。 回显“正在同步$ UNITY_IOS_EXPORT_PATH中的代码…” rsync -rc –exclude-from =“ $ PRODUCT_NAME” / Unity / rsync_exclude –delete $ UNITY_IOS_EXPORT_PATH / Classes /“ $ PRODUCT_NAME” / Unity / Classes / rsync -rc –exclude-from =“ $ PRODUCT_NAME” / Unity / rsync_exclude-删除$ UNITY_IOS_EXPORT_PATH / Libraries /“ $ PRODUCT_NAME” / Unity / Libraries / […]