【教程】如何利用Unity安装运行Visual Studio

本章节将学习Unity上的Visual Studio安装及了解如何运行Unity Project.

重要

请将Visual Studio tools与Unity软件升级到最新版本,以保证其顺利运行。


前提条件

在安装Unity之前,需要下载一个支持Visual Studio的扩展包,例如Visual Studio Community,有四种版本可以根据选择下载。
Unity版本至少是5.2或至少能够支持更高版本的Visual Studio 2.0以上

Your first Unity project with Visual Studio Tools for Unity

Now that you have everything you need, you’re ready for your first Unity project with Visual Studio. Setting up your Unity project is different depending on which versions of Unity and Visual Studio Tools for Unity are installed. Follow the steps below for the version of Unity and Visual Studio Tools for Unity that you have installed.

Unity 5.2 and higher (requires VSTU 2.1 or higher)

Starting with Unity 5.2, you no longer have to import the Visual Studio Tools unitypackage into your projects. If your project imports this unitypackage, Unity 5.2 ignores it and directly loads Visual Studio Tools for Unity from its installed location.

1 – Create a Unity Project

If you’re already experienced with Unity, you can create a new project or load one of your own. If you’re loading a project that imported the Visual Studio Tools unitypackage to use Visual Studio Tools for Unity with a previous version of Unity, we recommend that you remove it by deleting the UnityVS directory.

Otherwise, if you’re new to Unity, start small with a basic tutorial. Visit the Unity Learn page to find tutorials on example projects you can start with and lessons you can learn from to build your own game with Unity. The Unity Learn page has easy-to-follow tutorials for several different games.

Unity学习教程

2 – Configure Unity Editor to use Visual Studio Tools for Unity

To enable your project to use Visual Studio Tools for Unity, just set Visual Studio as its external script editor. In the Unity Editor, on the main menu, choose Edit, Preferences; then, in the Unity Preferences dialog, choose External Tools. Next, set the External Script Editor property to the version of Visual Studio you want to use (Visual Studio Tools for Unity must be installed for this version of Visual Studio) and make sure the Editor Attachingproperty is set.

To make sure that built-in support for Visual Studio Tools for Unity is now enabled, see the About Unity dialog. In the Unity editor, on the main menu, choose Help, About Unity. If Visual Studio Tools for Unity is installed and correctly configured, you’ll see a message displayed in the lower left-hand corner of the About Unity dialog.

Finally, make sure you’ve set a build target through the Build Settings page and that Script Debugging is enabled.

3 – Launch Visual Studio from the Unity Editor

Starting with Unity 5.2, the Visual Studio Tools extension menu is no longer needed to launch Visual Studio or to configure Visual Studio Tools for Unity. Instead, once Visual Studio is configured as your external script editor, just choose the script file from the Unity editor and your code will be opened in Visual Studio.

Previous versions of Unity (pre-5.2)

Before Unity 5.2, there was no built-in support for Visual Studio Tools for Unity. Instead, each project had to import the Visual Studio Tools unitypackage and configure other project settings in order to use Visual Studio Tools for Unity.

1 – Create a Unity Project

If you’re already experienced with Unity, you can create a new project or load one of your own. If you’re starting a new project, import the Visual Studio Tools unitypackage when you create it.

Otherwise, if you’re new to Unity, start small with a basic tutorial. Visit the Unity Learn page to find tutorials on example projects you can start with and lessons you can learn from to build your own game with Unity. The Unity Learn page has easy-to-follow tutorials for several different games.

Unity学习教程

2 – Configure Unity Editor to use Visual Studio Tools for Unity

If you’re starting from an existing Unity project or you didn’t import the Visual Studio Tools unitypackage when you created the project, you need to import the unitypackage now. In the Unity editor, on the main menu, choose Assets, Import Package, Visual Studio 2015 Tools (you should see an option for the version of Visual Studio you have installed).

Finally, make sure you’ve set a build target through the Build Settings page and that Script Debugging is enabled.

3 – Launch Visual Studio from Unity Editor

The final step is to start Visual Studio from Unity. This creates a Visual Studio Solution for your project, and then opens it in Visual Studio.

In the Unity Editor, on the main menu, choose Visual Studio Tools, Open in Visual Studio.

【教程】Holograms 101- Unity开发项目展示教程 第6课

第6课,我们使用 spatial mapping ,将我们的应用放置到物理世界中的实物上

点击观看本节教程:


文字教程:
 
目标
  • 将真实世界代入到虚拟世界中
  • 随意放置我们的Hologram
步骤
  • 在Unity 中,选中Holograms 目录
  • 拖拽 Spatial MappingHierarchy的根目录下
  • 选中 Spatial Mapping
  • 在右边的 Inspectorpanel中,修改如下属性:
  •     选中 Draw Visual Meshes 选项
  •     将Draw Material 选项选为 “wireframe
  • 重新编译build工程
  • 当应用运行,可以看到 (网格模型)wireframe mesh 将在物理世界中显示
  • 观察小球是怎么在当前场景下落的
下面将指导你如何将 OrigamiCollection 移动到一个新的位置
  • Scripts 文件夹中,创建一个脚本名叫TapToPlaceParent
  • Hierarchy中,展开 OrigamiCollection 目录,并选中Stage 模型
  • 将脚本 TapToPlaceParent拖拽到 Stage 模型上,更新代码如下
TapToPlaceParent.cs代码:
  1. using UnityEngine;
  2. public class TapToPlaceParent : MonoBehaviour
  3. {
  4.     bool placing = false;
  5.     // Called by GazeGestureManager when the user performs a Select gesture
  6.     void OnSelect()
  7.     {
  8.         // On each Select gesture, toggle whether the user is in placing mode.
  9.         placing = !placing;
  10.         // If the user is in placing mode, display the spatial mapping mesh.
  11.         if (placing)
  12.         {
  13.             SpatialMapping.Instance.DrawVisualMeshes = true;
  14.         }
  15.         // If the user is not in placing mode, hide the spatial mapping mesh.
  16.         else
  17.         {
  18.             SpatialMapping.Instance.DrawVisualMeshes = false;
  19.         }
  20.     }
  21.     // Update is called once per frame
  22.     void Update()
  23.     {
  24.         // If the user is in placing mode,
  25.         // update the placement to match the user’s gaze.
  26.         if (placing)
  27.         {
  28.             // Do a raycast into the world that will only hit the Spatial Mapping mesh.
  29.             var headPosition = Camera.main.transform.position;
  30.             var gazeDirection = Camera.main.transform.forward;
  31.             RaycastHit hitInfo;
  32.             if (Physics.Raycast(headPosition, gazeDirection, out hitInfo,
  33.                 30.0f, SpatialMapping.PhysicsRaycastMask))
  34.             {
  35.                 // Move this object’s parent object to
  36.                 // where the raycast hit the Spatial Mapping mesh.
  37.                 this.transform.parent.position = hitInfo.point;
  38.                 // Rotate this object’s parent object to face the user.
  39.                 Quaternion toQuat = Camera.main.transform.localRotation;
  40.                 toQuat.x = 0;
  41.                 toQuat.z = 0;
  42.                 this.transform.parent.rotation = toQuat;
  43.             }
  44.         }
  45.     }
  46. }

复制代码

  • 重新编译build工程
  • 现在我们应该可以通过凝视(gazing)将我们的目标重新定位。使用选择手势(Select gesture)就可以移动位置
至此,Unity开发项目展示教程全部结束
你学会了:
  • 如何创建一个配置一个Unity 工程
  • 如何使用凝视、手势、声音、声音和空间映射。
  • 如何用VS建立和部署一个APP。


现在你可以创建你自己的HoloLens!

 
往期教程

第1章 HoloLens 创建项目

【教程】Holograms 101- Unity开发项目展示教程 第5课

第5课,我们将要添加一段音乐到应用app中,然后在特定动作下,触发音乐。我们将要使用 声音映射spatialsound 来将插入的音乐定位到指定的位置上
 
点击观看本节教程:
 
文字教程:
 
目标
  • 在我们的世界中,听到Hologram
步骤
  • 进入选项 Edit > Project Settings >Audio
  • 在右边的 Inspector Panel 中,, 找到 Spatializer Plugin 并选择 MS HRTF Spatializer.
  • Holograms 文件夹中的 Ambience 模型,拖拽到 OrigamiCollection 目录中
  • 选中 OrigamiCollection 目录,并在右边Inspector panel找到 Audio Source ,修改如下属性:
  •      选中 Spatialize
  •      选中 Play On Awake.
  •      修改 Spatial Blend3D
  •      选中 Loop
  •      展开 3D Sound Settings,并在Doppler Level 中输入 0.1
  •      设置 Volume Rolloff   Custom Rolloff
  • Scripts 目录中,创建一个 SphereSounds脚本
  • 将脚本 SphereSounds 拖拽到 Sphere1Sphere2 模型上
  • 打开SphereSounds 脚本,并更新如下代码


SphereSounds.cs代码:
  1. using UnityEngine;
  2. public class SphereSounds : MonoBehaviour
  3. {
  4.     AudioSource audioSource = null;
  5.     AudioClip impactClip = null;
  6.     AudioClip rollingClip = null;
  7.     bool rolling = false;
  8.     void Start()
  9.     {
  10.         // Add an AudioSource component and set up some defaults
  11.         audioSource = gameObject.AddComponent<AudioSource>();
  12.         audioSource.playOnAwake = false;
  13.         audioSource.spatialize = true;
  14.         audioSource.spatialBlend = 1.0f;
  15.         audioSource.dopplerLevel = 0.0f;
  16.         audioSource.rolloffMode = AudioRolloffMode.Custom;
  17.         // Load the Sphere sounds from the Resources folder
  18.         impactClip = Resources.Load<AudioClip>(“Impact”);
  19.         rollingClip = Resources.Load<AudioClip>(“Rolling”);
  20.     }
  21.     // Occurs when this object starts colliding with another object
  22.     void OnCollisionEnter(Collision collision)
  23.     {
  24.         // Play an impact sound if the sphere impacts strongly enough.
  25.         if (collision.relativeVelocity.magnitude >= 0.1f)
  26.         {
  27.             audioSource.clip = impactClip;
  28.             audioSource.Play();
  29.         }
  30.     }
  31.     // Occurs each frame that this object continues to collide with another object
  32.     void OnCollisionStay(Collision collision)
  33.     {
  34.         Rigidbody rigid = this.gameObject.GetComponent<Rigidbody>();
  35.         // Play a rolling sound if the sphere is rolling fast enough.
  36.         if (!rolling && rigid.velocity.magnitude >= 0.01f)
  37.         {
  38.             rolling = true;
  39.             audioSource.clip = rollingClip;
  40.             audioSource.Play();
  41.         }
  42.         // Stop the rolling sound if rolling slows down.
  43.         else if (rolling && rigid.velocity.magnitude < 0.01f)
  44.         {
  45.             rolling = false;
  46.             audioSource.Stop();
  47.         }
  48.     }
  49.     // Occurs when this object stops colliding with another object
  50.     void OnCollisionExit(Collision collision)
  51.     {
  52.         // Stop the rolling sound if the object falls off and stops colliding.
  53.         if (rolling)
  54.         {
  55.             rolling = false;
  56.             audioSource.Stop();
  57.         }
  58.     }
  59. }

复制代码

  • 保存代码,重新build工程
  • 这时候两个小球,相当于一个声源,当移动视角,带上耳机体验的话,能够感觉到双通道声音

【教程】HoloLens全息投影模拟器教程

全息影像模拟器是帮助开发者使用Unity开发全息影像时用来减少迭代更新时间的新工具。开发者能够在创建HoloLens应用时直接从Unity编辑器上获得建模、调试、迭代设计等帮助,节约了大量结构搭建和部署的时间。全息影像模拟器通常有两种工作模式:远程访问和模拟。

 
全息影像远程访问 能让开发者通过连接Windows Holographic device(即:Hololens)直接在编辑器上运行应用。应用将被模拟部署在设备中运行(并且以完整的传感器数据和定位),但是实际是在主机上进行计算处理。游戏视图窗口中也将展示设备上所呈现的一切画面(从佩戴设备中看到真实世界中的全部景象)。
全息影像模拟功能 将更近一步的让开发者在模拟设备中模拟在编辑器中的运行情况。换句话说,即便是没有真实设备也不妨碍开发。这对解决团队开发中因设备数量有限影响开发节奏,或是在硬件设备到手前提前研究全息影像项目解决这一问题来说是个好消息。
设备要求
 
为了更好的使用全息影像模拟器,开发者需要在搭载最新Win 10系统的机器中安装Unity 5.5(或者最新的测试版) 。

准备开始

为了能够让模拟器可以进行远程访问和模拟,首先需要在编辑器窗口菜单中选择“Holographic Emulation”选项来打开全息影像模拟器控制窗口。
全息影像模拟器控制窗口可以像其他窗口一样被移动和停驻。我们建议开发者在开发中保持对话框可见状态,因为在运行应用时需要进入窗口进行一些设置操作。
值得注意的是当模拟器模式能够被设置成“None”时,意味着你的应用可以在不需要任何全息影像功能API下通过编辑器运行。

Holographic Remoting 全息影像远程访问

为了能够进行远程访问,先要更改Emulation Mode到“Remote to Device”。这个界面能够改变在远程访问过程中的一些附加选项。
为了连接到你的设备,需要做以下三件事:1. 需要安装并运行模拟远程访问播放器(Remoting Player),从Windows商店中能够找到应用,在设备上打开运用,将会进入到一个显示该设备IP地址的等待状态中。初次之外,还会显示诊断连接的方式,同样信息也可以访问微软开发中心
2. 输入设备IP地址在远程访问机区域内,下拉按钮到最右侧字段将会选择你最近使用的网络地址。
3. 点击”连接“按钮。在收到已连接信息后,链接状态将会变为绿色指示灯。你将可以在编辑器中运行和远程操控你的设备。在模拟器中,你可以像在APP中一样进行暂停、检查项目、调试等操作,因为以上都是和设备是同步发生的。但是,在主机和设备之间,视频、音频和设备输入通过网络间的传输回路却不被允许。即便是远程操控不能够被用来性能验证(对于所有繁重的计算都将利用主机来进行处理),在开发过程中还是能够帮助帮助开发者快速迭代更新。

Holographic Simulation 全息影像模拟技术

仿真模式的操作比远程调控要简单很多。仅仅只需要将模式变为“Simulate in Editor” 并且按下运行按钮。模拟器将会自动运行程序在编辑器中。你只要通过虚拟手臂(左或者右手)做出制定手势就可以从XDE HoloLens模拟器提供的五个虚拟房间中选择其中一间来进行仿真演示。
当选择模拟模式时,你可以利用游戏控制器来控制一个虚拟人物
需要注意在使用游戏控制器时,游戏窗口需要有焦点,在界面上任意点击一次将会使访问窗口产生焦点。

Known Limitations 限制使用

  • 语音识别(PhraseRecognizer)暂时不被全息影像远程技术通过,相反还会被编辑托管机拦截。
  • 摄像头捕捉可以依靠全息仿真模式进行操作,但是因为捕捉将会在本地摄像头上执行(类似网络摄像头),你将无法使用TryGetProjectionMatrix或者TryGetCameraToWorldMatrix来获得矩阵。
  • 主机PC端在远程模式中,所有的音频就不会重新定向到设备中(不仅仅针对该应用)

(原文转自Unity3D, 经Hug China学习组翻译,未经允许请勿转作商业用途)

【教程】Holograms 101- Unity开发项目展示教程 第2课

第2课,学习Hololens三种交互方式之一的  — 凝视输入(gaze)

 

点击观看本节教程:

 

文字教程:
 
目标
  • 让我们的凝视输入可视化(视线所指会出现一个圆圈)
步骤
  • 返回 Unity 工程
  • Project panel中选择Holograms 文件夹
  • Cursor 组建拖入 Hierarchy panel 的根目录中
  • 右击 Scripts 文件夹,进入Create 目录,并选择C# Script
  • 将新创建的脚本命名为 WorldCursor
  • Hierarchy panel选中 Cursor 组件
  • 拖拽 WorldCursor 脚本到Inspector panel 中的 Cursor 组件上
  • 这时候,再双击 WorldCursor 脚本文件,会自动打开 Visual Studio
  • 复制下面的代码到 WorldCursor.cs 文件中,保存

WorldCursor.cs代码:

  1. using UnityEngine;
  2. public class WorldCursor : MonoBehaviour
  3. {
  4.     private MeshRenderer meshRenderer;
  5.     // Use this for initialization
  6.     void Start()
  7.     {
  8.         // Grab the mesh renderer that’s on the same object as this script.
  9.         meshRenderer = this.gameObject.GetComponentInChildren<MeshRenderer>();
  10.     }
  11.     // Update is called once per frame
  12.     void Update()
  13.     {
  14.         // Do a raycast into the world based on the user’s
  15.         // head position and orientation.
  16.         var headPosition = Camera.main.transform.position;
  17.         var gazeDirection = Camera.main.transform.forward;
  18.         RaycastHit hitInfo;
  19.         if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
  20.         {
  21.             // If the raycast hit a hologram…
  22.             // Display the cursor mesh.
  23.             meshRenderer.enabled = true;
  24.             // Move thecursor to the point where the raycast hit.
  25.             this.transform.position = hitInfo.point;
  26.             // Rotate the cursor to hug the surface of the hologram.
  27.             this.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
  28.         }
  29.         else
  30.         {
  31.             // If the raycast did not hit a hologram, hide the cursor mesh.
  32.             meshRenderer.enabled = false;
  33.         }
  34.     }
  35. }

复制代码

  • 进入目录 File> Build Settings 重新生成工程
  • 返回VisualStudio 解决方案中
  • 这时会提示 是否需要重新加载 ,选择
  • 然后继续点击调试( Debug > Start Without debugging或者Ctrl + F5
  • 现在可以看到视线聚焦之处,有一个红色圆环。

HoloLens Unity3D开发套餐

近日一家开发手机AR增强现实解决方案的公司twnkls推出了一款Unity开发套餐”HoloLib”,可以协助新的HoloLens开发者在利用Unity3D时形成一个规范化的开发框架,这套框架提供给开发者在Unity3D中一个Demo制作;帮助开发者更容易安装Unity3D; 时间更短的开发周期;提供声音控制,凝视反应,空间映射及交互设计。有兴趣的朋友可以进行下载测试:
HoloLib Unity3D开发框架

【教程】Holograms 101- Unity开发项目展示教程 第1课

第1课,我们来配置一个Unity 工程,走一遍整个Build (编译)和 deploy(部署)过程
点击观看本节教程:
 
文字教程:

 

目标
1.     设置Unity环境,以适应Hologram开发
2.     创建一个Hologram
3.     看到创建出来的Hologram工程效果

 

步骤
1.     打开Unity
2.   点击 Open
3.   找到之前解压并重命名为 Origami 文件夹
4.   选择 Origami 并点击 Select Folder
5.     保存新的scene: File / Save Scene As(因为新工程Origami project 并没有包含任何 scene, 所以需要保存当前的默认 scene 为一个新的scene)
6.     将新的scene命名为 Origami 并点击 Save 按钮保存

 

配置主虚拟镜头(main virtual camera)
1.     在 Hierarchy Panel 中, 选中 Main Camera
2.     在右侧的 Inspector 选项栏中,将 position 配置为 0,0,0
3.     在当前的 Clear Flags 属性中,将下拉框中的设置从Skybox 改为 Solid color
4.     将 Background 属性点开
5.     将 R, G, B, A 设置为0

 

设置场景scene
1.     在 Hierarchy Panel 中, 点击 CreateCreate Empty
2.     新创建的文件夹名字是 GameObject,重命名该文件夹为 OrigamiCollection
3.     从 Project PanelHolograms 文件夹中:
        a)    拖拽 Stage 到 Hierarchy Panel 中,作为 OrigamiCollection 的子项
        b)    拖拽 Sphere1 到 Hierarchy Panel 中,作为 OrigamiCollection 的子项
        c)     拖拽 Sphere2 到 Hierarchy Panel 中,作为 OrigamiCollection 的子项
4.     删除 HierarchyPanel 中的  Directional Light 项
5.     从 Holograms 文件夹中,拖拽 Lights 项到 Hierarchy Panel 的根目录
6.     选中 Hierarchy Panel OrigamiCollection 目录
7.     在右侧的 Inspector 栏,设置 tranform的position值为0, -0.5, 2.0
8.     点击 项目 正上方的 play 按钮,可以预览效果
9.     再次点击 play按钮,关闭预览

 

从Unity导出工程到VisualStudio
1.     选择 File > Build Settings
2.     在 Platform中选择 Windows Store,并点击 Switch Platform
3.     SDK 选择 Universal 10 并选择 Build TypeD3D
4.     选中 Unity C# Projects
5.     点击 Add Open Scenes 按钮,添加当前的视图到Scenes
6.     点击 Player Settings
7.     接下来会弹出一个windows窗口,选择 Publishing Settings
8.     在Capabilities单元中,选择 MicrophoneSpatialPerception
9.     返回Build Settings界面,点击 Build
10.  在该窗口创建文件夹“ App”
11.  单击 App 文件夹
12.  点击Select Folder, 就会开始编译
13.  当编译结束,就会自动弹出编译好的文件目录
14.  打开 App 文件夹
15.  打开  Origami Visual StudioSolution
16.  在VS顶部工具栏中,修改Debug 为 Release ,并修改 ARM 为 X86 架构:
       a)    点击旁边的箭头按钮,选择HoloLens Emulator
       b)    点击 Debug -> StartWithout debugging 或者使用 Ctrl + F5
       c)     之后模拟器(emulator)将会启动Origami,第一次启动模拟器需要大概15分钟,一旦开始,千万不要关闭它。

 

带上你的Hololens开始体验吧!

如何将Unity完成的应用设置在HoloLens内

确保电脑上已经安装所有的开发工具和安装环境,教程可参考SDK的安装贴,也可以参照此文章:
Video Tutorial:
 
1. 确保Unity开发的应用已经设置在Windows Store应用商店中
 
2. 确保SDK已经设置在Universal 10内,UWP的构建方式可以用XAML或者D3D,并本地电脑上能够正常运行。记住,一定要检查Unity C#项目复选框。
3. 点击设置“Other Settings”按键来检查支持虚拟现实的复选框,之后推动下拉菜单中的 Windows Holographic选项以确保此方式可行。可以先准备好所有需要的工具(例如:VS 2015 Update 2/高阶版,Unity 5.4.0b14-HTP/高阶版)。
 
4. 继续设置,进入“Publishing Settings”制表然后向下滑动到“Capabilities”选项并选择“SpatialPerception”.
 
5. 跳转至对话框,选择需要输出的文件夹。
 
6. 浏览该文件夹并且打开Visual Studio solution(.sln)文件。
 
7. 想要更快速可以变为释放。
 
8. 从ARM变为x86
 
9. 变为远程主机
 
10. 从远程主机上点击运行按钮,这个步骤需要对IP地址进行设置。