MR 및 Azure 306: 비디오 스트리밍MR and Azure 306: Streaming video


참고

Mixed Reality 아카데미 자습서는 HoloLens(1세대) 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. 이러한 자습서는 HoloLens 2에 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않습니다.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다.They will be maintained to continue working on the supported devices. 향후에는 HoloLens 2를 개발 하는 방법을 보여 주는 새 자습서 시리즈를 게시할 예정입니다.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. 이 알림은 게시 될 때 해당 자습서에 대 한 링크를 사용 하 여 업데이트 됩니다.This notice will be updated with a link to those tutorials when they are posted.


최종 제품 시작  최종 제품-시작final product -start final product -start

이 과정에서는 Azure Media Services을 Windows Mixed Reality VR 환경에 연결 하 여 몰입 형 헤드셋에서 스트리밍 360도 비디오 재생을 허용 하는 방법을 알아봅니다.In this course you will learn how connect your Azure Media Services to a Windows Mixed Reality VR experience to allow streaming 360 degree video playback on immersive headsets.

Azure Media Services 는 브로드캐스트 품질의 비디오 스트리밍 서비스를 제공 하 여 오늘날 가장 인기 있는 모바일 장치에서 더 많은 사용자에 게 도달 하는 서비스 모음입니다.Azure Media Services are a collection of services that gives you broadcast-quality video streaming services to reach larger audiences on today’s most popular mobile devices. 자세한 내용은 Azure Media Services 페이지를 참조 하세요.For more information, visit the Azure Media Services page.

이 과정을 완료 하면 다음과 같은 작업을 수행할 수 있는 혼합 현실 모던 헤드셋 응용 프로그램이 만들어집니다.Having completed this course, you will have a mixed reality immersive headset application, which will be able to do the following:

  1. Azure 미디어 서비스 를 통해 Azure Storage 에서 360 학위 비디오를 검색 합니다.Retrieve a 360 degree video from an Azure Storage, through the Azure Media Service.

  2. Unity 장면 내에서 검색 된 360 정도 비디오를 표시 합니다.Display the retrieved 360 degree video within a Unity scene.

  3. 두 개의 다른 비디오를 사용 하 여 두 장면을 이동 합니다.Navigate between two scenes, with two different videos.

응용 프로그램에서 결과를 디자인과 통합 하는 방법을 사용자가 결정 합니다.In your application, it is up to you as to how you will integrate the results with your design. 이 과정은 Azure 서비스를 Unity 프로젝트와 통합 하는 방법을 배울 수 있도록 설계 되었습니다.This course is designed to teach you how to integrate an Azure Service with your Unity Project. 이 과정에서 얻은 지식을 사용 하 여 혼합 현실 응용 프로그램을 개선 하는 것은 사용자의 작업입니다.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

디바이스 지원Device support

과정Course HoloLensHoloLens 몰입형 헤드셋Immersive headsets
MR 및 Azure 306: 비디오 스트리밍MR and Azure 306: Streaming video ✔️✔️

사전 요구 사항Prerequisites

참고

이 자습서는 Unity 및 c #에 대 한 기본 경험이 있는 개발자를 위해 작성 되었습니다.This tutorial is designed for developers who have basic experience with Unity and C#. 또한이 문서에서 사전 요구 사항 및 작성 된 지침은 작성 시 테스트 되 고 확인 된 내용 (2018 일 수 있음)을 나타냅니다.Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). 도구 설치 문서에 나와 있는 것 처럼 최신 소프트웨어를 무료로 사용할 수 있지만,이 과정의 정보가 아래 나열 된 것 보다 최신 소프트웨어에서 찾을 수 있는 것으로 간주 하면 안 됩니다.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

이 과정에는 다음 하드웨어 및 소프트웨어를 권장 합니다.We recommend the following hardware and software for this course:

시작하기 전에Before you start

  1. 이 프로젝트를 빌드하는 데 문제가 발생 하지 않도록 하려면 루트 또는 루트 폴더에이 자습서에서 언급 한 프로젝트를 만드는 것이 좋습니다. (긴 폴더 경로는 빌드 시에 문제를 일으킬 수 있습니다.)To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).

  2. 혼합 현실 모던 헤드셋을 설정 하 고 테스트 합니다.Set up and test your Mixed Reality Immersive Headset.

    참고

    이 과정에서는 동작 컨트롤러가 필요 하지 않습니다.You will not require Motion Controllers for this course. 모던 헤드셋을 설정 하는 데 지원이 필요한 경우 Windows Mixed Reality를 설정 하는 방법에 대 한 링크를 클릭 하세요.If you need support setting up the Immersive Headset, please click link on how to set up Windows Mixed Reality.

1 장-Azure Portal: Azure Storage 계정 만들기Chapter 1 - The Azure Portal: creating the Azure Storage Account

Azure Storage 서비스 를 사용 하려면 Azure Portal에서 저장소 계정을 만들고 구성 해야 합니다.To use the Azure Storage Service, you will need to create and configure a Storage Account in the Azure portal.

  1. Azure Portal에 로그인합니다.Log in to the Azure Portal.

    참고

    아직 Azure 계정이 없는 경우 새로 만들어야 합니다.If you do not already have an Azure account, you will need to create one. 교실 또는 랩 상황에서이 자습서를 수행 하는 경우 강사 또는 proctors 중 하나에 문의 하 여 새 계정을 설정 하는 데 도움이 될 수 있습니다.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. 로그인 되 면 왼쪽 메뉴에서 저장소 계정 을 클릭 합니다.Once you are logged in, click on Storage accounts in the left menu.

    계정 설정 Azure Storage

  3. 저장소 계정 탭에서 추가 를 클릭 합니다.On the Storage Accounts tab, click on Add.

    계정 설정 Azure Storage

  4. 저장소 계정 만들기 탭에서 다음을 수행 합니다.In the Create storage account tab:

    1. 계정에 대 한 이름을 삽입 합니다 .이 필드에는 숫자 및 소문자만 허용 됩니다.Insert a Name for your account, be aware this field only accepts numbers, and lowercase letters.

    2. 배포 모델에서 Resource manager 를 선택 합니다.For Deployment model, select Resource manager.

    3. 계정 종류 에 대해 저장소 (범용 v1) 를 선택 합니다.For Account kind, select Storage (general purpose v1).

    4. 성능 으로 **표준 *을 선택 합니다.**For Performance, select Standard*.

    5. 복제 의 경우 LRS (로컬 중복 저장소) 를 선택 합니다.For Replication select Locally-redundant storage (LRS).

    6. 보안 전송을 사용 하지 않도록 설정 해야 합니다.Leave Secure transfer required as Disabled.

    7. 구독 을 선택합니다.Select a Subscription.

    8. 리소스 그룹을 선택 하거나 새 리소스 그룹 을 만듭니다.Choose a Resource group or create a new one. 리소스 그룹은 Azure 자산의 컬렉션에 대 한 청구를 모니터링 하 고, 액세스를 제어 하 고, 프로 비전 하 고, 관리 하는 방법을 제공 합니다.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets.

    9. 새 리소스 그룹을 만드는 경우 리소스 그룹의 위치 를 확인 합니다.Determine the Location for your resource group (if you are creating a new Resource Group). 위치는 응용 프로그램이 실행 되는 영역에 있는 것이 가장 좋습니다.The location would ideally be in the region where the application would run. 일부 Azure 자산은 특정 지역 에서만 사용할 수 있습니다.Some Azure assets are only available in certain regions.

  5. 이 서비스에 적용 된 사용 약관을 이해 했는지 확인 해야 합니다.You will need to confirm that you have understood the Terms and Conditions applied to this Service.

    계정 설정 Azure Storage

  6. 만들기 를 클릭 한 후에는 서비스를 만들 때까지 기다려야 합니다 .이 작업이 몇 분 정도 걸릴 수 있습니다.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  7. 서비스 인스턴스를 만든 후 알림이 포털에 표시 됩니다.A notification will appear in the portal once the Service instance is created.

    계정 설정 Azure Storage

  8. 이 시점에서 리소스를 따를 필요는 없으며, 다음 챕터로 이동 하기만 하면 됩니다.At this point you do not need to follow the resource, simply move to the next Chapter.

2 장-Azure Portal: Media Service 만들기Chapter 2 - The Azure Portal: creating the Media Service

Azure 미디어 서비스를 사용 하려면 응용 프로그램에서 사용할 수 있도록 서비스 인스턴스를 구성 해야 합니다 (계정 소유자가 관리자 여야 함).To use the Azure Media Service, you will need to configure an instance of the service to be made available to your application (wherein the account holder needs to be an Admin).

  1. Azure Portal의 왼쪽 위 모서리에서 리소스 만들기 를 클릭 하 고 미디어 서비스를 검색 한 후 enter 키를 누릅니다.In the Azure Portal, click on Create a resource in the top left corner, and search for Media Service, press Enter. 현재 원하는 리소스에는 분홍색 아이콘이 있습니다. 새 페이지를 표시 하려면이를 클릭 합니다.The resource you want currently has a pink icon; click this, to show a new page.

    Azure Portal

  2. 새 페이지에는 미디어 서비스 에 대 한 설명이 제공 됩니다.The new page will provide a description of the Media Service. 이 프롬프트의 왼쪽 아래에서 만들기 단추를 클릭 하 여이 서비스와의 연결을 만듭니다.At the bottom left of this prompt, click the Create button, to create an association with this service.

    Azure Portal

  3. [ 만들기 ]를 클릭 하면 새 미디어 서비스에 대 한 세부 정보를 제공 해야 하는 위치에 표시 됩니다.Once you have clicked on Create a panel will appear where you need to provide some details about your new Media Service:

    1. 이 서비스 인스턴스에 대해 원하는 계정 이름을 삽입 합니다.Insert your desired Account Name for this service instance.

    2. 구독 을 선택합니다.Select a Subscription.

    3. 리소스 그룹을 선택 하거나 새 리소스 그룹 을 만듭니다.Choose a Resource Group or create a new one. 리소스 그룹은 Azure 자산의 컬렉션에 대 한 청구를 모니터링 하 고, 액세스를 제어 하 고, 프로 비전 하 고, 관리 하는 방법을 제공 합니다.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 단일 프로젝트와 연결 된 모든 Azure 서비스 (예: 이러한 랩)를 공용 리소스 그룹에 유지 하는 것이 좋습니다.It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

    Azure 리소스 그룹에 대해 자세히 알아보려면 Azure 리소스 그룹을 관리 하는 방법에 대한 다음 링크를 참조 하세요.If you wish to read more about Azure Resource Groups, please follow this link on how to manage Azure Resource Groups.

    1. 새 리소스 그룹을 만드는 경우 리소스 그룹의 위치 를 확인 합니다.Determine the Location for your resource group (if you are creating a new Resource Group). 위치는 응용 프로그램이 실행 되는 영역에 있는 것이 가장 좋습니다.The location would ideally be in the region where the application would run. 일부 Azure 자산은 특정 지역 에서만 사용할 수 있습니다.Some Azure assets are only available in certain regions.

    2. 저장소 계정 섹션에서 선택 ... 섹션을 클릭 한 다음, 마지막 챕터에서 만든 저장소 계정을 클릭 합니다.For the Storage Account section, click the Please select... section, then click the Storage Account you created in the last Chapter.

    3. 또한이 서비스에 적용 된 사용 약관을 이해 했는지 확인 해야 합니다.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    4. 만들기 를 클릭합니다.Click Create.

      Azure Portal

  4. 만들기 를 클릭 한 후에는 서비스를 만들 때까지 기다려야 합니다 .이 작업이 몇 분 정도 걸릴 수 있습니다.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  5. 서비스 인스턴스를 만든 후 알림이 포털에 표시 됩니다.A notification will appear in the portal once the Service instance is created.

    Azure Portal

  6. 알림을 클릭 하 여 새 서비스 인스턴스를 탐색 합니다.Click on the notification to explore your new Service instance.

    Azure Portal

  7. 알림에서 리소스로 이동 단추를 클릭 하 여 새 서비스 인스턴스를 탐색 합니다.Click the Go to resource button in the notification to explore your new Service instance.

  8. 새 미디어 서비스 페이지의 왼쪽 패널에서 자산 링크를 클릭 합니다 (약 중간).Within the new Media service page, within the panel on the left, click on the Assets link, which is about halfway down.

  9. 페이지의 왼쪽 위 모서리에 있는 다음 페이지에서 업로드 를 클릭 합니다.On the next page, in the top-left corner of the page, click Upload.

    Azure Portal

  10. 폴더 아이콘을 클릭 하 여 파일을 검색 하 고 스트리밍할 첫 번째 360 비디오를 선택 합니다.Click on the Folder icon to browse your files and select the first 360 Video that you would like to stream.

    링크를 따라 샘플 비디오를 다운로드할수 있습니다.You can follow this link to download a sample video.

    Azure Portal

경고

긴 파일 이름으로 인해 인코더와 관련 된 문제가 발생할 수 있습니다. 따라서 비디오에 문제가 발생 하지 않도록 비디오 파일 이름의 길이를 줄이는 것이 좋습니다.Long filenames may cause an issue with the encoder: so to ensure videos do not have issues, consider shortening the length of your video file names.

  1. 비디오 업로드가 완료 되 면 진행률 표시줄이 녹색으로 바뀝니다.The progress bar will turn green when the video has finished uploading.

    Azure Portal

  2. 위의 텍스트를 클릭 하 여 자산 페이지로 돌아갑니다.Click on the text above (yourservicename - Assets) to return to the Assets page.

  3. 비디오를 성공적으로 업로드 한 것을 알 수 있습니다.You will notice that your video has been successfully uploaded. 타일을 클릭합니다.Click on it.

    Azure Portal

  4. 리디렉션되는 페이지에 비디오에 대 한 자세한 정보가 표시 됩니다.The page you are redirected to will show you detailed information about your video. 비디오를 사용 하려면 페이지 왼쪽 위에 있는 인코딩 단추를 클릭 하 여 해당 비디오를 인코딩해야 합니다.To be able to use your video you need to encode it, by clicking the Encode button at the top-left of the page.

    Azure Portal

  5. 파일에 대 한 인코딩 옵션을 설정할 수 있는 새 패널이 오른쪽에 표시 됩니다.A new panel will appear to the right, where you will be able to set encoding options for your file. 다음 속성을 설정 합니다. 일부 속성은 기본적으로 설정 되어 있습니다.Set the following properties (some will be already set by default):

    1. 미디어 인코더 이름 Media Encoder StandardMedia encoder name Media Encoder Standard

    2. 인코딩 사전 설정 콘텐츠 적응 다중 비트 전송률 MP4Encoding preset Content Adaptive Multiple Bitrate MP4

    3. Video1.mp4처리 Media Encoder Standard 작업 이름Job name Media Encoder Standard processing of Video1.mp4

    4. 출력 미디어 자산 이름 Video1.mp4--인코딩된 Media Encoder StandardOutput media asset name Video1.mp4 -- Media Encoder Standard encoded

      Azure Portal

  6. 만들기 단추를 클릭합니다.Click the Create button.

  7. 인코딩 작업이 추가 된 표시줄이 표시 되 면 해당 표시줄을 클릭 하면 인코딩 진행률이 표시 된 패널이 표시 됩니다.You will notice a bar with Encoding job added, click on that bar and a panel will appear with the Encoding progress displayed in it.

    Azure Portal

    Azure Portal

  8. 작업이 완료 될 때까지 기다립니다.Wait for the Job to be completed. 완료 되 면 해당 패널의 오른쪽 위에 있는 ' X '를 사용 하 여 패널을 자유롭게 닫습니다.Once it is done, feel free to close the panel with the 'X' at the top right of that panel.

    Azure Portal

    Azure Portal

    중요

    이 작업을 수행 하는 데 걸리는 시간은 비디오의 파일 크기에 따라 달라 집니다.The time this takes, depends on the file size of your video. 이 프로세스는 상당한 시간이 걸릴 수 있습니다.This process can take quite some time.

  9. 이제 인코딩된 버전의 비디오가 생성 되었으므로이를 게시 하 여 액세스할 수 있도록 할 수 있습니다.Now that the encoded version of the video has been created, you can publish it to make it accessible. 이렇게 하려면 파란색 링크 자산 을 클릭 하 여 자산 페이지로 돌아갑니다.To do so, click the blue link Assets to go back to the assets page.

    Azure Portal

  10. 비디오는 자산 유형 다중 비트 전송률 MP4 인 다른 비디오와 함께 표시 됩니다.You will see your video along with another, which is of Asset Type Multi-Bitrate MP4.

    Azure Portal

    참고

    초기 비디오와 함께 새 자산을 수 없으며, 크기 에 대해 ' 0 ' 바이트를 포함 하는 것을 확인할 수 있습니다 .이는 업데이트를 위해 창을 새로 고칩니다.You may notice that the new asset, alongside your initial video, is Unknown, and has '0' bytes for it's Size, just refresh your window for it to update.

  11. 새 자산을 클릭 합니다.Click this new asset.

    Azure Portal

  12. 이전에 사용 했던 것과 비슷한 패널이 표시 됩니다 .이는 다른 자산입니다.You will see a similar panel to the one you used before, just this is a different asset. 페이지의 위쪽 가운데에 있는 게시 단추를 클릭 합니다.Click the Publish button located at the top-center of the page.

    Azure Portal

  13. 항목 지점인 로케이터 를 자산의 파일/s로 설정 하 라는 메시지가 표시 됩니다.You will be prompted to set a Locator, which is the entry point, to file/s in your Assets. 시나리오에 대해 다음 속성을 설정 합니다.For your scenario set the following properties:

    1. 로케이터 유형 > 프로그레시브.Locator type > Progressive.

    2. 날짜시간은 현재 날짜부터 미래의 시간 (이 경우 100 년)으로 설정 됩니다.The date and time will be set for you, from your current date, to a time in the future (one hundred years in this case). 그대로 두거나에 맞게 변경 합니다.Leave as is or change it to suit.

    참고

    로케이터 및 선택할 수 있는 옵션에 대 한 자세한 내용은 Azure Media Services 설명서를 참조 하세요.For more information about Locators, and what you can choose, visit the Azure Media Services Documentation.

  14. 해당 패널의 아래쪽에서 추가 단추를 클릭 합니다.At the bottom of that panel, click on the Add button.

    Azure Portal

  15. 이제 비디오가 게시 되 고 해당 끝점을 사용 하 여 스트리밍할 수 있습니다.Your video is now published and can be streamed by using its endpoint. 페이지 아래쪽에는 파일 섹션이 있습니다.Further down the page is a Files section. 여기에는 다양 한 인코딩된 버전의 비디오가 있습니다.This is where the different encoded versions of your video will be. 가능한 가장 높은 해상도를 선택 하 고 (아래 이미지에서 1920x960 파일) 오른쪽에 패널이 표시 됩니다.Select the highest possible resolution one (in the image below it is the 1920x960 file), and then a panel to the right will appear. 여기에서 다운로드 URL 을 찾을 수 있습니다.There you will find a Download URL. 나중에 코드에서 사용할 때이 끝점 을 복사 합니다.Copy this Endpoint as you will use it later in your code.

    Azure Portal

    Azure Portal

    참고

    재생 단추를 눌러 비디오를 재생 하 고 테스트할 수도 있습니다.You can also press the Play button to play your video and test it.

  16. 이제이 랩에서 사용할 두 번째 비디오를 업로드 해야 합니다.You now need to upload the second video that you will use in this Lab. 위의 단계를 수행 하 여 두 번째 비디오에 대해 동일한 프로세스를 반복 합니다.Follow the steps above, repeating the same process for the second video. 두 번째 끝점 도 복사 해야 합니다.Ensure you copy the second Endpoint also. 다음 링크를 사용 하 여 두 번째 비디오를 다운로드할 수있습니다.Use the following link to download a second video.

  17. 두 비디오를 모두 게시 한 후에는 다음 장으로 이동할 준비가 된 것입니다.Once both videos have been published, you are ready to move to the next Chapter.

3 장-Unity 프로젝트 설정Chapter 3 - Setting up the Unity Project

다음은 혼합 현실를 사용 하 여 개발 하기 위한 일반적인 설정으로, 다른 프로젝트에 적합 한 템플릿입니다.The following is a typical set up for developing with the Mixed Reality, and as such, is a good template for other projects.

  1. Unity 를 열고 새로 만들기 를 클릭 합니다.Open Unity and click New.

    Azure Portal

  2. 이제 Unity 프로젝트 이름을 제공 하 고 MR _ 360videostreaming 을 삽입 해야 합니다.You will now need to provide a Unity Project name, insert MR_360VideoStreaming.. 프로젝트 형식이 3d 로 설정 되었는지 확인 합니다.Make sure the project type is set to 3D. 위치를 적절 한 위치에 적절 하 게 설정 합니다. 루트 디렉터리에 가까울수록 좋습니다.Set the Location to somewhere appropriate for you (remember, closer to root directories is better). 그런 다음 프로젝트 만들기 를 클릭 합니다.Then, click Create project.

    Azure Portal

  3. Unity를 연 상태에서 기본 스크립트 편집기Visual Studio 로 설정 되어 있는지 확인 하는 것이 좋습니다.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. 기본 설정 편집 으로 이동한 다음 새 창에서 외부 도구 로 이동 합니다.Go to Edit Preferences and then from the new window, navigate to External Tools. 외부 스크립트 편집기Visual Studio 2017 로 변경 합니다.Change External Script Editor to Visual Studio 2017. 기본 설정 창을 닫습니다.Close the Preferences window.

    Azure Portal

  4. 그런 다음 파일 빌드 설정 으로 이동 하 고 플랫폼 전환 단추를 클릭 하 여 플랫폼을 유니버설 Windows 플랫폼 로 전환 합니다.Next, go to File Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

  5. 또한 다음을 확인 합니다.Also make sure that:

    1. 대상 장치임의의 장치로 설정 됩니다.Target Device is set to Any Device.

    2. 빌드 형식이 D3D로 설정 됩니다 .Build Type is set to D3D.

    3. SDK 가 최신 설치로 설정 되어 있습니다.SDK is set to Latest installed.

    4. Visual Studio 버전이 최신 설치로 설정 되어 있습니다.Visual Studio Version is set to Latest installed.

    5. 빌드 및 실행로컬 컴퓨터 로 설정 됩니다.Build and Run is set to Local Machine.

    6. 나중에 설정 하므로 지금 바로 장면을 설정 하는 것에 대해 걱정할 필요가 없습니다.Do not worry about setting up Scenes right now, as you will set these up later.

    7. 지금은 나머지 설정이 기본값으로 유지 되어야 합니다.The remaining settings should be left as default for now.

      Unity 프로젝트 설정

  6. 빌드 설정 창에서 플레이어 설정 단추를 클릭 하면 검사기 가 있는 공간에서 관련 패널이 열립니다.In the Build Settings window, click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

  7. 이 패널에서 몇 가지 설정을 확인 해야 합니다.In this panel, a few settings need to be verified:

    1. 기타 설정 탭에서 다음을 수행 합니다.In the Other Settings tab:

      1. Scripting Runtime 버전안정적 이어야 합니다 (.net 3.5 해당).Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

      2. Scripting 백엔드 는 .net 이어야 합니다 .Scripting Backend should be .NET.

      3. API 호환성 수준은 .net 4.6 이어야 합니다.API Compatibility Level should be .NET 4.6.

        Unity 프로젝트 설정

    2. 패널의 아래쪽에서 XR 설정 ( 게시 설정 아래에 있음), 지원 되는 틱 가상 현실, Windows Mixed reality SDK 가 추가 되어 있는지 확인 합니다.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Unity 프로젝트 설정

    3. 게시 설정 탭의 기능 아래에서 다음을 확인 합니다.Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        Unity 프로젝트 설정

  8. 이러한 변경을 수행한 후에는 빌드 설정 창을 닫습니다.Once you have made those changes, close the Build Settings window.

  9. 프로젝트를 저장 합니다. *파일 * 프로젝트 저장 * *.Save your Project *File *Save Project**.

4 장-Into Out구에 Unity 패키지 가져오기Chapter 4 - Importing the InsideOutSphere Unity package

중요

이 과정의 Unity 설정 구성 요소를 건너뛰고 계속 해 서 코드를 계속 사용 하려면 unitypackage를 다운로드 하 여 프로젝트에 사용자 지정 패키지로가져온 후 5 장 에서 계속 합니다.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 5. Unity 프로젝트를 만들어야 합니다.You will still need to create a Unity Project.

이 과정에서는 unitypackage이라는 Unity 자산 패키지를 다운로드 해야 합니다.For this course you will need to download a Unity Asset Package called InsideOutSphere.unitypackage.

방법: unitypackage 를 가져오는 방법:How-to import the unitypackage:

  1. 앞의 Unity 대시보드를 사용 하 여 화면 위쪽의 메뉴에서 자산 을 클릭 하 고 패키지 가져오기 > 사용자 지정 패키지 를 클릭 합니다.With the Unity dashboard in front of you, click on Assets in the menu at the top of the screen, then click on Import Package > Custom Package.

    Into Out구에 Unity 패키지 가져오기

  2. 파일 선택기를 사용 하 여 unitypackage 패키지를 선택 하 고 열기 를 클릭 합니다.Use the file picker to select the InsideOutSphere.unitypackage package and click Open. 이 자산의 구성 요소 목록이 표시 됩니다.A list of components for this asset will be displayed to you. 가져오기를 클릭 하 여 가져오기를 확인 합니다.Confirm the import by clicking Import.

    Into Out구에 Unity 패키지 가져오기

  3. 가져오기가 완료 되 면 세 개의 새 폴더 ( 재질, 모델Prefabs)가 자산 폴더에 추가 된 것을 알 수 있습니다.Once it has finished importing, you will notice three new folders, Materials, Models, and Prefabs, have been added to your Assets folder. 이러한 종류의 폴더 구조는 Unity 프로젝트에 일반적입니다.This kind of folder structure is typical for a Unity project.

    Into Out구에 Unity 패키지 가져오기

    1. 모델 폴더를 열면 Into out구에 모델을 가져왔는지 확인 합니다.Open the Models folder, and you will see that the InsideOutSphere model has been imported.

    2. 재질 폴더 내에서 GazeButton에서 사용 되는 buttonmaterial 이라는 재질과 함께 inlambert1 out구 자료를 찾을 수 있습니다 .이는 곧 표시 될 것입니다. Within the Materials folder you will find the InsideOutSpheres material lambert1, along with a material called ButtonMaterial, which is used by the GazeButton, which you will see soon.

    3. Prefabs 폴더에는 insideoutsphere 모델GazeButton 를 모두 포함 하는 inprefab out구가 포함 되어 있습니다.The Prefabs folder contains the InsideOutSphere prefab which contains both the InsideOutSphere model and the GazeButton.

    4. 코드는 포함 되지 않으며,이 과정을 수행 하 여 코드를 작성 합니다.No code is included, you will write the code by following this course.

  4. 계층 내에서 주 카메라 개체를 선택 하 고 다음 구성 요소를 업데이트 합니다.Within the Hierarchy, select the Main Camera object, and update the following components:

    1. 변환Transform

      1. Position = X: 0, Y: 0, Z: 0.Position = X: 0, Y: 0, Z: 0.

      2. 회전 = X: 0, Y: 0, Z: 0.Rotation = X: 0, Y: 0, Z: 0.

      3. 크기 조정 X: 1, Y: 1, Z: 1.Scale X: 1, Y: 1, Z: 1.

    2. 카메라Camera

      1. 플래그 지우기: 단색입니다.Clear Flags: Solid Color.

      2. 클리핑 평면: 근거리: 0.1, 먼: 6.Clipping Planes: Near: 0.1, Far: 6.

        Into Out구에 Unity 패키지 가져오기

  5. Prefab 폴더로 이동한 다음 Insideoutsphere Prefab을 계층 패널로 끌어옵니다.Navigate to the Prefab folder, and then drag the InsideOutSphere prefab into the Hierarchy Panel.

    Into Out구에 Unity 패키지 가져오기

  6. 옆의 작은 화살표를 클릭 하 여 계층 내에서 Insideoutsphere 개체를 확장 합니다.Expand the InsideOutSphere object within the Hierarchy by clicking the little arrow next to it. GazeButton 라는 자식 개체 아래에 자식 개체가 표시 됩니다.You will see a child object beneath it called GazeButton. 이는 장면을 변경 하는 데 사용 되며 비디오를 변경 하는 데 사용 됩니다.This will be used to change scenes and thus videos.

    Into Out구에 Unity 패키지 가져오기

  7. 검사기 창에서 Insideoutsphere 변형 구성 요소를 클릭 하 고 다음 속성을 설정 했는지 확인 합니다.In the Inspector Window click on the InsideOutSphere's Transform component, ensure that the following properties are set:

    변환 위치TRANSFORM - POSITION
    X 0X 0 Y 0Y 0 Z 0Z 0
    변환-회전TRANSFORM - ROTATION
    X 0X 0 Y -50Y -50 Z 0Z 0
    변환-배율TRANSFORM - SCALE
    X 1X 1 Y 1Y 1 Z 1Z 1

    Into Out구에 Unity 패키지 가져오기

  8. GazeButton 자식 개체를 클릭 하 고 다음과 같이 변환을 설정 합니다.Click on the GazeButton child object, and set its Transform as follows:

    변환 위치TRANSFORM - POSITION
    X 3.6X 3.6 Y 1.3Y 1.3 Z 0Z 0
    변환-회전TRANSFORM - ROTATION
    X 0X 0 Y 0Y 0 Z 0Z 0
    변환-배율TRANSFORM - SCALE
    X 1X 1 Y 1Y 1 Z 1Z 1

    Into Out구에 Unity 패키지 가져오기

5 장-VideoController 클래스 만들기Chapter 5 - Create the VideoController class

Videocontroller 클래스는 Azure 미디어 서비스에서 콘텐츠를 스트리밍하는 데 사용 되는 두 개의 비디오 끝점을 호스팅합니다.The VideoController class hosts the two video endpoints that will be used to stream the content from the Azure Media Service.

이 클래스를 만들려면:To create this class:

  1. 프로젝트 패널에 있는 자산 폴더 를 마우스 오른쪽 단추로 클릭 하 고 > 폴더 만들기 를 클릭 합니다.Right-click in the Asset Folder, located in the Project Panel, and click Create > Folder. 폴더 이름을 스크립트 로 합니다.Name the folder Scripts.

    VideoController 클래스 만들기

    VideoController 클래스 만들기

  2. 스크립트 폴더를 두 번 클릭 하 여 엽니다.Double click on the Scripts folder to open it.

  3. 폴더 내부를 마우스 오른쪽 단추로 클릭 한 다음 > C # 스크립트 만들기 를 클릭 합니다.Right-click inside the folder, then click Create > C# Script. 스크립트의 이름을 Videocontroller 로 합니다.Name the script VideoController.

    VideoController 클래스 만들기

  4. Videocontroller 스크립트를 두 번 클릭 하 여 Visual Studio 2017 에서 엽니다.Double click on the new VideoController script to open it with Visual Studio 2017.

    VideoController 클래스 만들기

  5. 다음과 같이 코드 파일의 맨 위에 있는 네임 스페이스를 업데이트 합니다.Update the namespaces at the top of the code file as follows:

    using System.Collections;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    using UnityEngine.Video;
    
  6. Videocontroller 클래스에서 다음 변수를 해제 () 메서드와 함께 입력 합니다.Enter the following variables in the VideoController class, along with the Awake() method:

        /// <summary> 
        /// Provides Singleton-like behaviour to this class. 
        /// </summary> 
        public static VideoController instance; 
    
        /// <summary> 
        /// Reference to the Camera VideoPlayer Component.
        /// </summary> 
        private VideoPlayer videoPlayer; 
    
        /// <summary>
        /// Reference to the Camera AudioSource Component.
        /// </summary> 
        private AudioSource audioSource; 
    
        /// <summary> 
        /// Reference to the texture used to project the video streaming 
        /// </summary> 
        private RenderTexture videoStreamRenderTexture;
    
        /// <summary>
        /// Insert here the first video endpoint
        /// </summary>
        private string video1endpoint = "-- Insert video 1 Endpoint here --";
    
        /// <summary>
        /// Insert here the second video endpoint
        /// </summary>
        private string video2endpoint = "-- Insert video 2 Endpoint here --";
    
        /// <summary> 
        /// Reference to the Inside-Out Sphere. 
        /// </summary> 
        public GameObject sphere;
    
        void Awake()
        {
            instance = this;
        }
    
  7. 이제 Azure 미디어 서비스 비디오에서 끝점을 입력 하는 시간입니다.Now is the time to enter the endpoints from your Azure Media Service videos:

    1. Video1endpoint 변수에 대 한 첫 번째입니다.The first into the video1endpoint variable.

    2. Video2endpoint 변수에 대 한 두 번째입니다.The second into the video2endpoint variable.

    경고

    Unity에서 https 를 사용 하는 경우 버전 2017.4.1 f1를 사용 하는 것과 관련 된 알려진 문제가 있습니다.There is a known issue with using https within Unity, with version 2017.4.1f1. 비디오를 재생 하는 동안 오류가 발생 하는 경우 ' http '를 대신 사용해 보세요.If the videos provide an error on play, try using 'http' instead.

  8. 다음으로 Start () 메서드를 편집 해야 합니다.Next, the Start() method needs to be edited. 이 메서드는 사용자가 장면을 전환할 때마다 (따라서 비디오를 전환) 응시 단추를 살펴보면 트리거됩니다.This method will be triggered every time the user switches scene (consequently switching the video) by looking at the Gaze Button.

        // Use this for initialization
        void Start()
        {
            Application.runInBackground = true;
            StartCoroutine(PlayVideo());
        }
    
  9. Start () 메서드를 따라 비디오를 원활 하 게 시작 하는 데 사용 되는 playvideo () IEnumerator 메서드를 삽입 합니다 (끊길 표시 되지 않음).Following the Start() method, insert the PlayVideo() IEnumerator method, which will be used to start videos seamlessly (so no stutter is seen).

        private IEnumerator PlayVideo()
        {
            // create a new render texture to display the video 
            videoStreamRenderTexture = new RenderTexture(2160, 1440, 32, RenderTextureFormat.ARGB32);
    
            videoStreamRenderTexture.Create();
    
            // assign the render texture to the object material 
            Material sphereMaterial = sphere.GetComponent<Renderer>().sharedMaterial;
    
            //create a VideoPlayer component 
            videoPlayer = gameObject.AddComponent<VideoPlayer>();
    
            // Set the video to loop. 
            videoPlayer.isLooping = true;
    
            // Set the VideoPlayer component to play the video from the texture 
            videoPlayer.renderMode = VideoRenderMode.RenderTexture;
    
            videoPlayer.targetTexture = videoStreamRenderTexture;
    
            // Add AudioSource 
            audioSource = gameObject.AddComponent<AudioSource>();
    
            // Pause Audio play on Awake 
            audioSource.playOnAwake = true;
            audioSource.Pause();
    
            // Set Audio Output to AudioSource 
            videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
            videoPlayer.source = VideoSource.Url;
    
            // Assign the Audio from Video to AudioSource to be played 
            videoPlayer.EnableAudioTrack(0, true);
            videoPlayer.SetTargetAudioSource(0, audioSource);
    
            // Assign the video Url depending on the current scene 
            switch (SceneManager.GetActiveScene().name)
            {
                case "VideoScene1":
                    videoPlayer.url = video1endpoint;
                    break;
    
                case "VideoScene2":
                    videoPlayer.url = video2endpoint;
                    break;
    
                default:
                    break;
            }
    
            //Set video To Play then prepare Audio to prevent Buffering 
            videoPlayer.Prepare();
    
            while (!videoPlayer.isPrepared)
            {
                yield return null;
            }
    
            sphereMaterial.mainTexture = videoStreamRenderTexture;
    
            //Play Video 
            videoPlayer.Play();
    
            //Play Sound 
            audioSource.Play();
    
            while (videoPlayer.isPlaying)
            {
                yield return null;
            }
        }
    
  10. 이 클래스에 필요한 마지막 메서드는 ChangeScene () 메서드로, 장면을 전환 하는 데 사용 됩니다.The last method you need for this class is the ChangeScene() method, which will be used to swap between scenes.

        public void ChangeScene()
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().name == "VideoScene1" ? "VideoScene2" : "VideoScene1");
        }
    

    ChangeScene () 메서드는 # 조건 연산자 라는 유용한 C 기능을 사용 합니다.The ChangeScene() method uses a handy C# feature called the Conditional Operator. 이렇게 하면 조건을 확인 한 다음 검사 결과에 따라 반환 되는 값을 모두 단일 문 내에서 수행할 수 있습니다.This allows for conditions to be checked, and then values returned based on the outcome of the check, all within a single statement. 조건 연산자에 대 한 자세한 내용을 보려면이 링크를따르세요.Follow this link to learn more about Conditional Operator.

  11. Unity로 반환 하기 전에 Visual Studio에서 변경 내용을 저장 합니다.Save your changes in Visual Studio before returning to Unity.

  12. Unity 편집기로 돌아가서, Videocontroller 클래스 [from] {. 밑줄} 스크립트 폴더를 계층 패널의 기본 카메라 개체로 끌어 놓습니다.Back in the Unity Editor, click and drag the VideoController class [from]{.underline} the Scripts folder to the Main Camera object in the Hierarchy Panel.

  13. 주 카메라 를 클릭 하 고 검사기 패널 을 확인 합니다.Click on the Main Camera and look at the Inspector Panel. 새로 추가한 스크립트 구성 요소에 빈 값이 있는 필드가 있음을 알 수 있습니다.You will notice that within the newly added Script component, there is a field with an empty value. 코드 내에서 공용 변수를 대상으로 하는 참조 필드입니다.This is a reference field, which targets the public variables within your code.

  14. 아래 이미지에 표시 된 것 처럼 계층 패널 에서 슬롯으로 in의 out구 개체를 끌어 옵니다.Drag the InsideOutSphere object from the Hierarchy Panel to the Sphere slot, as shown in the image below.

    VideoController 클래스 만들기  videocontroller 클래스 만들기Create the VideoController class Create the VideoController class

6 장-응시 클래스 만들기Chapter 6 - Create the Gaze class

이 클래스는 사용자가 보고 있는 개체를 검색 하기 위해 기본 카메라 에서 앞으로 프로젝션 될 raycast 를 만드는 역할을 합니다.This class is responsible for creating a Raycast that will be projected forward from the Main Camera, to detect which object the user is looking at. 이 경우에는 사용자가 장면의 GazeButton 개체를 보고 동작을 트리거할 수 있는지 여부를 확인 해야 합니다.In this case, the Raycast will need to identify if the user is looking at the GazeButton object in the scene and trigger a behavior.

이 클래스를 만들려면:To create this Class:

  1. 이전에 만든 스크립트 폴더로 이동 합니다.Go to the Scripts folder you created previously.

  2. 프로젝트 패널을 마우스 오른쪽 단추로 클릭 하 고 *만들기 * C # 스크립트 * *를 클릭 합니다.Right-click in the Project Panel, *Create *C# Script**. 스크립트 이름을 응시 로 합니다.Name the script Gaze.

  3. 응시 _ 스크립트를 두 번 클릭 하 여 _ Visual Studio 2017 을 사용 하 여 엽니다.Double click on the new **Gaze_ script to open it with _* Visual Studio 2017.*

  4. 다음 네임 스페이스가 스크립트의 맨 위에 있는지 확인 하 고 다른 네임 스페이스를 제거 합니다.Ensure the following namespace is at the top of the script, and remove any others:

    using UnityEngine;
    
  5. 그런 다음, 다음 변수를 응시 클래스 내에 추가 합니다.Then add the following variables inside the Gaze class:

        /// <summary> 
        /// Provides Singleton-like behaviour to this class. 
        /// </summary> 
        public static Gaze instance;
    
        /// <summary> 
        /// Provides a reference to the object the user is currently looking at. 
        /// </summary> 
        public GameObject FocusedGameObject { get; private set; }
    
        /// <summary> 
        /// Provides a reference to compare whether the user is still looking at 
        /// the same object (and has not looked away). 
        /// </summary> 
        private GameObject oldFocusedObject = null;
    
        /// <summary> 
        /// Max Ray Distance 
        /// </summary> 
        float gazeMaxDistance = 300;
    
        /// <summary> 
        /// Provides whether an object has been successfully hit by the raycast. 
        /// </summary> 
        public bool Hit { get; private set; }
    
  6. 이제 해제 ()Start () 메서드에 대 한 코드를 추가 해야 합니다.Code for the Awake() and Start() methods now needs to be added.

        private void Awake()
        {
            // Set this class to behave similar to singleton 
            instance = this;
        }
    
        void Start()
        {
            FocusedGameObject = null;
        }
    
  7. Update () 메서드에 다음 코드를 추가 하 여 Raycast를 프로젝션 하 고 대상 적중을 검색 합니다.Add the following code in the Update() method to project a Raycast and detect the target hit:

        void Update()
        {
            // Set the old focused gameobject. 
            oldFocusedObject = FocusedGameObject;
            RaycastHit hitInfo;
    
            // Initialise Raycasting. 
            Hit = Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hitInfo, gazeMaxDistance);
    
            // Check whether raycast has hit. 
            if (Hit == true)
            {
                // Check whether the hit has a collider. 
                if (hitInfo.collider != null)
                {
                    // Set the focused object with what the user just looked at. 
                    FocusedGameObject = hitInfo.collider.gameObject;
                }
                else
                {
                    // Object looked on is not valid, set focused gameobject to null. 
                    FocusedGameObject = null;
                }
            }
            else
            {
                // No object looked upon, set focused gameobject to null.
                FocusedGameObject = null;
            }
    
            // Check whether the previous focused object is this same 
            // object (so to stop spamming of function). 
            if (FocusedGameObject != oldFocusedObject)
            {
                // Compare whether the new Focused Object has the desired tag we set previously. 
                if (FocusedGameObject.CompareTag("GazeButton"))
                {
                    FocusedGameObject.SetActive(false);
                    VideoController.instance.ChangeScene();
                }
            }
        }
    
  8. Unity로 반환 하기 전에 Visual Studio에서 변경 내용을 저장 합니다.Save your changes in Visual Studio before returning to Unity.

  9. Scripts 폴더의 Scripts 클래스를 클릭 하 고 계층 패널의 기본 카메라 개체로 끕니다.Click and drag the Gaze class from the Scripts folder to the Main Camera object in the Hierarchy Panel.

7 장-두 Unity 장면 설정Chapter 7 - Setup the two Unity Scenes

이 챕터의 목적은 각각 비디오를 스트리밍하는 두 개의 장면을 설정 하는 것입니다.The purpose of this Chapter is to setup the two scenes, each hosting a video to stream. 이미 만든 장면을 복제 하므로 다시 설정할 필요가 없습니다. 그러나 GazeButton 개체가 다른 위치에 있고 다른 모양을 갖도록 하기 위해 새 장면을 편집 하는 경우에는 새 장면을 편집 해도 됩니다.You will duplicate the scene you have already created, so that you do not need to set it up again, though you will then edit the new scene, so that the GazeButton object is in a different location and has a different appearance. 이는 장면을 변경 하는 방법을 보여 주기 위한 것입니다.This is to show how to change between scenes.

  1. 파일로 이동 하 여이 작업을 수행 하려면 다른 이름으로 장면 저장...을 > 합니다. 저장 창이 표시 됩니다.Do this by going to File > Save Scene as.... A save window will appear. 새 폴더 단추를 클릭 합니다.Click the New folder button.

    7 장-두 Unity 장면 설정

  2. 폴더 이름을 장면 으로 합니다.Name the folder Scenes.

  3. 장면 저장 창이 계속 열려 있습니다.The Save Scene window will still be open. 새로 만든 장면 폴더를 엽니다.Open your newly created Scenes folder.

  4. 파일 이름: 텍스트 필드에 VideoScene1 를 입력 하 고 저장 을 누릅니다.In the File name: text field, type VideoScene1, then press Save.

  5. Unity로 돌아가서, 장면 폴더를 열고 VideoScene1 파일을 마우스 왼쪽 단추를 클릭 합니다.Back in Unity, open your Scenes folder, and left-click your VideoScene1 file. 키보드를 사용 하 고 ctrl + D 를 누르면 해당 장면이 복제 됩니다.Use your keyboard, and press Ctrl + D you will duplicate that scene

    편집 > 복제 로 이동 하 여 중복 명령을 수행할 수도 있습니다.The Duplicate command can also be performed by navigating to Edit > Duplicate.

  6. Unity는 장면 이름 번호를 자동으로 증가 하지만이를 확인 하 여 이전에 삽입 된 코드와 일치 하는지 확인 합니다.Unity will automatically increment the scene names number, but check it anyway, to ensure it matches the previously inserted code.

    VideoScene1VideoScene2 가 있어야 합니다.You should have VideoScene1 and VideoScene2.

  7. 두 개의 장면을 사용 하 여 파일 > 빌드 설정 으로 이동 합니다.With your two scenes, go to File > Build Settings. 빌드 설정 창을 열고, 빌드 섹션에서 장면을 장면을 끌어 옵니다.With the Build Settings window open, drag your scenes to the Scenes in Build section.

    7 장--두 Unity 장면 설정

    Ctrl 단추를 누른 채 각 장면을 마우스 왼쪽 단추로 클릭 하 고 마지막으로 둘 다로 끌어 장면 폴더에서 두 장면을 모두 선택할 수 있습니다.You can select both of your scenes from your Scenes folder through holding the Ctrl button, and then left-clicking each scene, and finally drag both across.

  8. 빌드 설정 창을 닫고 VideoScene2 을 두 번 클릭 합니다.Close the Build Settings window, and double click on VideoScene2.

  9. 두 번째 장면을 연 상태에서 InGazeButton 자식 개체를 클릭 하 고 다음과 같이 변환을 설정 합니다.With the second scene open, click on the GazeButton child object of the InsideOutSphere, and set its Transform as follows:

    변환 위치TRANSFORM - POSITION
    X 0X 0 Y 1.3Y 1.3 Z 3.6Z 3.6
    변환-회전TRANSFORM - ROTATION
    X 0X 0 Y 0Y 0 Z 0Z 0
    변환-배율TRANSFORM - SCALE
    X 1X 1 Y 1Y 1 Z 1Z 1
  10. GazeButton child가 선택 된 상태에서 검사기메시 필터 를 확인 합니다.With the GazeButton child still selected, look at the Inspector and at the Mesh Filter. 메시 참조 필드 옆에 있는 대상을 클릭 합니다.Click the little target next to the Mesh reference field:

    7 장--두 Unity 장면 설정

  11. 메시 선택 팝업 창이 표시 됩니다.A Select Mesh popup window will appear. 자산 목록에서 큐브 메시를 두 번 클릭 합니다.Double click the Cube mesh from the list of Assets.

    7 장--두 Unity 장면 설정

  12. 메시 필터 는 업데이트 되 고 이제 큐브 를 업데이트 합니다.The Mesh Filter will update, and now be a Cube. 이제 구 collider 옆의 기어 아이콘을 클릭 하 고 구성 요소 제거 를 클릭 하 여이 개체에서 Collider를 삭제 합니다.Now, click the Gear icon next to Sphere Collider and click Remove Component, to delete the collider from this object.

    7 장--두 Unity 장면 설정

  13. GazeButton 가 선택 된 상태에서 검사기 아래쪽의 구성 요소 추가 단추를 클릭 합니다.With the GazeButton still selected, click the Add Component button at the bottom of the Inspector. 검색 필드에 box 를 입력 하 고 상자 collider 가 옵션으로 선택 되어 GazeButton 개체에 상자 collider 를 추가 합니다.In the search field, type box, and Box Collider will be an option -- click that, to add a Box Collider to your GazeButton object.

    7 장--두 Unity 장면 설정

  14. 이제 GazeButton 가 부분적으로 업데이트 되 고, 다른 것 처럼 보이지만, 이제는 새 자료 를 만들어이를 완전히 다르게 표시 하 고 첫 번째 장면의 개체와 다른 개체로 인식 하기가 더 쉽습니다.The GazeButton is now partially updated, to look different, however, you will now create a new Material, so that it looks completely different, and is easier to recognize as a different object, than the object in the first scene.

  15. 프로젝트 패널 내에서 재질 폴더로 이동 합니다.Navigate to your Materials folder, within the Project Panel. Buttonmaterial 재질을 복제 합니다. + 키보드에서 Ctrl D 를 누르거나 재질 을 마우스 왼쪽 단추로 클릭 한 다음 파일 편집 메뉴 옵션에서 중복 을 선택 합니다.Duplicate the ButtonMaterial Material (press Ctrl + D on the keyboard, or left-click the Material, then from the Edit file menu option, select Duplicate).

    7 장--두 Unity 장면을 설정  7 장--두 Unity 장면을 설정 합니다.Chapter 7 -- Setup the two Unity Scenes Chapter 7 -- Setup the two Unity Scenes

  16. buttonmaterial 재질 (여기서는 buttonmaterial 1 이라고 함)을 선택 하 고 검사기 내에서 albedo 색 창을 클릭 합니다.Select the new ButtonMaterial Material (here named ButtonMaterial 1), and within the Inspector, click the Albedo color window. 다른 색을 선택할 수 있는 팝업이 표시 됩니다. 여기서 원하는 것을 선택 하 고 팝업을 닫습니다.A popup will appear, where you can select another color (choose whichever you like), then close the popup. 자료는 자체 인스턴스가 되며 원본과 다릅니다.The Material will be its own instance, and different to the original.

    7 장--두 Unity 장면 설정

  17. 자료GazeButton 자식으로 끌어 옵니다. 그러면 첫 번째 장면 단추와 쉽게 구분할 수 있도록 모양이 완전히 업데이트 됩니다.Drag the new Material onto the GazeButton child, to now completely update its look, so that it is easily distinguishable from the first scenes button.

    7 장--두 Unity 장면 설정

  18. 이 시점에서 UWP 프로젝트를 빌드하기 전에 편집기에서 프로젝트를 테스트할 수 있습니다.At this point you can test the project in the Editor before building the UWP project.

    • 편집기 에서 재생 단추를 누르고 헤드셋을 착용 합니다.Press the Play button in the Editor and wear your headset.

      7 장--두 Unity 장면 설정

  19. 두 개의 GazeButton 개체를 확인 하 여 첫 번째와 두 번째 비디오 간을 전환 합니다.Look at the two GazeButton objects to switch between the first and second video.

8 장-UWP 솔루션 빌드Chapter 8 - Build the UWP Solution

편집기에 오류가 없으면 빌드할 준비가 된 것입니다.Once you have ensured that the editor has no errors, you are ready to Build.

빌드:To Build:

  1. 파일 > 저장 을 클릭 하 여 현재 장면을 저장 합니다.Save the current scene by clicking on File > Save.

  2. Unity C # 프로젝트 라는 상자를 선택 합니다 .이는 빌드를 완료 한 후 클래스를 편집 하는 데 사용할 수 있으므로 중요 합니다.Check the box called Unity C# Projects (this is important because it will allow you to edit the classes after build is completed).

  3. 파일 > 빌드 설정 으로 이동 하 고 빌드 를 클릭 합니다.Go to File > Build Settings, click on Build.

  4. 솔루션을 빌드하는 데 사용할 폴더를 선택 하 라는 메시지가 표시 됩니다.You will be prompted to select the folder where you want to build the Solution.

  5. 빌드 폴더를 만들고 해당 폴더 내에서 원하는 적절 한 이름을 사용 하 여 다른 폴더를 만듭니다.Create a BUILDS folder and within that folder create another folder with an appropriate name of your choice.

  6. 새 폴더를 클릭 한 다음 폴더 선택 을 클릭 하 여 해당 폴더를 선택 하 고 해당 위치에서 빌드를 시작 합니다.Click your new folder and then click Select Folder, so to choose that folder, to begin the build at that location.

    8 장--UWP 솔루션 빌드  8 장--Uwp 솔루션 빌드Chapter 8 -- Build the UWP Solution Chapter 8 -- Build the UWP Solution

  7. Unity가 빌드를 완료 하면 (시간이 걸릴 수 있음) 빌드 위치에서 파일 탐색기 창이 열립니다.Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build.

9 장-로컬 컴퓨터에 배포Chapter 9 - Deploy on Local Machine

빌드가 완료 되 면 빌드 위치에 파일 탐색기 창이 표시 됩니다.Once the build has been completed, a File Explorer window will appear at the location of your build. 이름을 지정 하 고 빌드한 폴더를 연 다음 해당 폴더 내에서 솔루션 (.sln) 파일을 두 번 클릭 하 여 Visual Studio 2017에서 솔루션을 엽니다.Open the Folder you named and built to, then double click on the solution (.sln) file within that folder, to open your solution with Visual Studio 2017.

남은 작업은 사용자의 컴퓨터 (또는 로컬 컴퓨터)에 앱을 배포 하는 것입니다.The only thing left to do is deploy your app to your computer (or Local Machine).

로컬 컴퓨터에 배포 하려면:To deploy to Local Machine:

  1. Visual Studio 2017 에서 방금 만든 솔루션 파일을 엽니다.In Visual Studio 2017, open the solution file that has just been created.

  2. 솔루션 플랫폼 에서 X86, 로컬 컴퓨터 를 선택 합니다.In the Solution Platform, select x86, Local Machine.

  3. 솔루션 구성 에서 디버그 를 선택 합니다.In the Solution Configuration select Debug.

    9 장--로컬 컴퓨터에 배포

  4. 이제 솔루션에 대 한 패키지를 복원 해야 합니다.You will now need to restore any packages to your solution. 솔루션 을 마우스 오른쪽 단추로 클릭 하 고 솔루션에 대 한 NuGet 패키지 복원 ...을 클릭 합니다.Right-click on your Solution, and click Restore NuGet Packages for Solution...

    참고

    이 작업은 Unity가 빌드된 패키지가 로컬 컴퓨터 참조를 대상으로 해야 하기 때문에 수행 됩니다.This is done because the packages which Unity built need to be targeted to work with your local machines references.

  5. 빌드 메뉴로 이동 하 여 솔루션 배포 를 클릭 하 여 응용 프로그램을 컴퓨터에 테스트용으로 로드.Go to Build menu and click on Deploy Solution to sideload the application to your machine. Visual Studio는 먼저 응용 프로그램을 빌드한 다음 배포 합니다.Visual Studio will first build and then deploy your application.

  6. 이제 앱이 설치 된 앱 목록에 표시 되어 시작 될 준비가 되었습니다.Your App should now appear in the list of installed apps, ready to be launched.

    9 장--로컬 컴퓨터에 배포

Mixed Reality 응용 프로그램을 실행 하는 경우 앱 내에서 사용한 Into Out구에 모델 내에 있습니다.When you run the Mixed Reality application, you will you be within the InsideOutSphere model which you used within your app. 이 구는 이러한 종류의 관점에서 filmed 된 들어오는 비디오 (360)를 제공 하 여 비디오가 스트리밍되는 위치입니다.This sphere will be where the video will be streamed to, providing a 360-degree view, of the incoming video (which was filmed for this kind of perspective). 비디오를 로드 하는 데 몇 초 정도 걸릴 수 있으며, 비디오를 가져와 다운로드 한 다음 앱으로 스트리밍하려면 앱에 사용 가능한 인터넷 속도가 적용 됩니다.Do not be surprised if the video takes a couple of seconds to load, your app is subject to your available Internet speed, as the video needs to be fetched and then downloaded, so to stream into your app. 준비가 되 면 장면을 변경 하 고 red 구를 gazing 하 여 두 번째 비디오를 엽니다.When you are ready, change scenes and open your second video, by gazing at the red sphere! 그런 다음 두 번째 장면에서 파란색 큐브를 사용 하 여 뒤로 이동 합니다.Then feel free to go back, using the blue cube in the second scene!

완성 된 Azure Media Service 응용 프로그램Your finished Azure Media Service application

축 하 합니다. Azure 미디어 서비스를 활용 하 여 360 비디오를 스트리밍하는 혼합 현실 앱을 빌드 했습니다.Congratulations, you built a mixed reality app that leverages the Azure Media Service to stream 360 videos.

랩 결과

랩 결과

보너스 연습Bonus Exercises

연습 1Exercise 1

이 자습서 내에서 단일 장면을 사용 하 여 비디오를 변경 하는 것만 가능 합니다.It is entirely possible to only use a single scene to change videos within this tutorial. 응용 프로그램을 실험 하 고 단일 장면으로 만듭니다.Experiment with your application and make it into a single scene! 혼합에 다른 비디오를 추가할 수도 있습니다.Perhaps even add another video to the mix.

연습 2Exercise 2

Azure 및 Unity를 실험 하 고 인터넷 연결의 강도에 따라 앱에서 다른 파일 크기의 비디오를 자동으로 선택 하는 기능을 구현 해 보세요.Experiment with Azure and Unity, and attempt to implement the ability for the app to automatically select a video with a different file size, depending on the strength of an Internet connection.