Psychic VRラボの殴り書き

uMMOアセットを用いてコード不要でネットワーク同期

uMMOアセット

Unityを用いて、Gameobjectをネットワーク越しに同期するにはUnityが提供する機能であるUNETを用います。UNETを用いるにはコードを色々書く必要があるので、便利なアセットがないかと思い調べてみたところ良さそうなアセットuMMOを見つけたため利用してみました。

uMMOアセット

ただ、公式のマニュアルや日本語の情報が見当たらなかったので、利用メモを残しておきます。

Cubeを同期する

まずは、極めてシンプルな動作を実現させてみることで、基本概念を学びましょう。同一マシン上で、ネットワーク経由で2つのアプリケーションのCubeを同期させます。1つのプロジェクトで開発を行い、コピーしたプロジェクトを別Unityで開いてテストをします。

1, 同期(Sync)対象オブジェクトの設定

 

・Cubeを作って名前をCubeToSyncに変更
・Net Objectスクリプトをアタッチ
・Synchronization MethodsをuMMO_PLUGINに変更
SyncUsing_DEFAULT_NATIVE_COMPONENT: バックエンドでUNETのNative機能を利用
SyncUsing_DEFAULT_uMMO_PLUGIN: バックエンドでuMMO独自のPluginを利用。データが圧縮されるなど効率がいいようです。同期もUNET Nativeより滑らか。
・Object TypeをNon Player Objectに設定

・設定の終わったCubeToSyncゲームオブジェクトをPrefab化する。次の設定で利用する。

uMMO2

2, uMMOネットワークマネージャーの設定

・/Assets/uMMO/Extension/prefabs/uMMO をヒエラルキーに追加
・uMMOの子オブジェクトのPL_UNETNetworkManagerの設定を変更
Auto Create Playerのチェックを外す(チェックONの場合は、Player Prefabで設定されたGameobjectが起動時にインスタンス化されます)
Registered Spawnable Prefabsに同期対象のPrefabを登録する

uMMO3

3, Unityプロジェクトをコピーして、同一マシンで2つのプロジェクトを開く

uMMOは一つのプロジェクトがサーバーとしてもクライアントとしても動作できるようになっています。
デフォルトでは、
・サーバーになるかクライアントになるかを起動時にユーザーが選択する
・Clientの接続先サーバーはLocalhost
・ポート7777を利用

uMMO4

起動後
右のUnityエディタでDedicated Serverを選択する
左のUnityエディタでClientを選択する

右のUnity(サーバー)のCubeをSceneビューで上下に動かすと、左(クライアント)のCubeも同期されて動きます。

uMMO5

 

Unity-chanを同期する(Mechanimキャラクターの同期)

では次に、Animatorを使って動いている、キャラクターのアニメーションを同期させてみます。

ユニティちゃん 3Dモデルデータをダウンロードしてプロジェクトに追加しておきます。
・/Assets/UnityChan/Scnes/ActionCheck をベースに改造します

1, 同期(Sync)対象オブジェクトの設定:UnityChan

Cubeの場合と同様に、同期対象であるUnityChanにNet Objectスクリプトをアタッチして設定します。

・Synchronization MethodsをuMMO_PLUGINに変更
その際、Animatorに設定されたNextとBackにもチェック
・Object TypeをNon Player Objectに設定
・自動的に追加されるNetwork AnimatorスクリプトのAnimatorの設定
unitychanプレファブを選択。その際、Animatorに設定されたNextとBackにもチェック

unity4

unity5

unitychanにアタッチしたスクリプトを設定し終わったら、忘れずにApply Changes To Prefabを実行して、Prefabに変更を反映させます。

unity2

2, uMMOネットワークマネージャーの設定

・/Assets/uMMO/Extension/prefabs/uMMO をヒエラルキーに追加
・uMMOの子オブジェクトのPL_UNETNetworkManagerの設定を変更
Auto Create Playerのチェックを外す(チェックONの場合は、Player Prefabで設定されたGameobjectが起動時にインスタンス化されます)
Registered Spawnable Prefabsに同期対象のunitychanプレハブを登録する

unity3

3, 実行して確認

サーバー側でアニメーションを変更すると、クライアント側も動悸して変更されます

 

imageLicenseLogo

この作品はユニティちゃんライセンス条項の元に提供されています

カテゴリー: Unity

クリエイターのためのVR制作・配信プラットフォーム『STYLY』のパブリックβ版をリリース

STYLY
バーチャルリアリティー(以下VR)技術を用いたファッションVRサービスを手がける株式会社Psychic VR Lab(本社:東京都新宿区、代表取締役:山口征浩)は、すべてのクリエイターがクラウド上でVR空間を制作、配信をすることを可能にするプラットフォーム 『 STYLY 』のパブリックβ版を8月4日リリースいたしました。 すべての機能は無料で利用可能です。
 今後取り込み可能なアプリケーション及び、対応端末の拡充を順次行い、様々なクリエイターが空間を用いたプレゼンテーションを行っていただけるように機能拡張を行ってゆく予定です。

STYLY によるVR空間編集画面

■STYLYについて

『 STYLY 』はWebブラウザのみで稼働するVR制作、配信クラウドサービスです。Mac、Windowsに対応し、VR対応ではない普及型パソコンでも稼働いたします。
STYLY で制作、配信した作品をVRで閲覧するアプリケーションの配信も開始いたします。
(まずはHTC Vive対応版を専用サイトで配布開始。今後SteamやOculus Store にて配信予定)

これまで弊社は、VRを使った店舗施策として伊勢丹様、PARCO様等と、数多くの展示を行わせていただきましたが、これは全てSTYLYを使って製作されたものです。そして、2017年3月に米国オースティンで開催されたSXSW2017にてプライベートβ版を公開し、現在500人の先行ユーザ様にご利用頂いております。そしてのユーザコミュニティにて機能改善要望を収集し、改善を行ってまいりました。
また、スタートアップ支援プログラムMicrosoft BizSpark Plusに採択され、日本マイクロソフト株式会社の支援のもとAzureクラウドを用いた高品質なサービスを提供しております。

■STYLY の機能について

1.Webブラウザのみで稼働するクラウドサービス
STYLY はWebブラウザのみで稼働するため、アプリケーションや拡張機能のダウンロードの必要がなく、MacでもWindowsでも稼働します。
PCのスペックも一般的な普及型PCでの利用を想定しており、多くのPCユーザがVR空間の制作を作成することが可能となります。

2.様々なクリエイティブツールと連携
MAYA, Blenderなどの定番3DソフトやYouTube, Instagramといったサービスをプログラミングの必要なく取り込むことが可能となっており、多くのクリエイターがすぐにVR空間構築して活用可能です。 対応ソフトやサービスは順次拡大してゆく予定です。

3.様々なデバイスに対応、特別な処理を必要とせず、即時配信可能。
STYLYは製作している空間を、閲覧用VRアプリケーションを使ってほぼリアルタイムに空間にアクセスし閲覧することがが可能です。VR空間のデータはストリーミング配信し、ユーザのストレスをを極力排除いたします。
閲覧用VRアプリケーションは、HTC Vive版よりリリースし、今後Oculus Rift版, Daydream版, Gear VR版等、様々なデバイス対応版をリリース予定です。
クリエイターはデバイスを気にせず空間の制作が可能となります。

※現在はHTC VIVEのみ。各デバイスには順次対応予定。

STYLYは今後、様々なクリエイティブツールとの連携を展開し、すべてのクリエイターにVR,MRの構築が可能となるプラットフォームへと発展させて行きます。

教育機関様用に特別プランもご用意しておりますので、ご興味ある方はお問い合わせください。また、対応サービス、ソフト、デバイスについては順次発表して参ります。

VR空間内のホーム画面

■関連URL
STYLY http://suite.styly.cc/

■会社概要

 
社名              株式会社Psychic VR Lab
本店所在地   〒160-0022  東京都新宿区新宿 1-34-2 MORIAURA 2F
代表取締役     山口征浩
設立          2016年5月19日
ウェブサイト   http://psychic-vr-lab.com/

<本件に関するお問い合わせ先>
株式会社Psychic VR Lab   担当  渡邊
Mail :  info@styly.cc

カテゴリー: STYLY, VR

オフィスを移転に伴い、儀式を執り行いました

Psychic VR Labは事業拡大のため、新宿御苑にオフィスを移転いたしました。移転に伴い2017年4月3日、新オフィスにて移転式典を執り行いました。

新住所はこちらです
〒160-0022 東京都新宿区新宿1-34-2 MORIAURA 2F

Psychic VR Labオフィス移転式典

DSC_4430DSC_4811DSC_4440DSC_4583IMG_3119

 

 

カテゴリー: その他

UnityのC#でまとめてGameobjectのShader変更・コライダー追加

下位Gameobjectも含めてシェーダーを変更

下位Gameobjectも含めてMeshがあればMesh Collidarを追加

呼び出しサンプル

  1. プロジェクト内のobjファイルを読み込む
  2. シェーダーをUnlitに変更する
  3. メッシュコライダーを追加する(ConvexオプションON)
  4. Prefabに保存する

 

 

 

カテゴリー: Unity

ノンコーディングでVIVEコントローラーの利用(Playmaker)

Steam VR Playmaker - Toolkit

Playmakerはヴィジュアルスクルプティングを用いてコードを書かずにUnityで開発を行うことができる便利なアセットです。Playmakerに対応しているアセットも多く公開されていて、多種多様なことがノンコーディングで実現できるようになってきています。

今回は、HTC VIVE用のコントローラーをPlaymakerから利用できるアセットと、使い勝手を良くするための方法をメモしておきます。

下記3つのアセットをインポートします。

Playmaker (有料)
Editor Extensions/Visual Scripting

Playmaker Editor Extensions/Visual Scripting Hutong Games LLC

SteamVR Plugin (無料)
Scripting

SteamVR Plugin

Steam VR Playmaker – Toolkit (有料)
Editor Extensions/Game Toolkits

Steam VR Playmaker - Toolkit

これで、SteamVRの機能がPlaymakerから利用できるようになります。

公式ドキュメントはこちら

ドキュメントを読んで実装するとこんな感じになります。
vive4

待受するステートが必要になるため使い勝手が良くありません。待ち受けるイベントの種類事に全部記述する必要がある。

 

そこでPlaymakerのGlobal Transition機能を利用してどこからでもトリガーやボタンのイベントを拾えるようにします。(この投稿最後でダウンロード可能)

Global Eventの登録

vive6

各ボタンが押された時にGlobal Eventを発火するように設定

vive5

vive7

これで準備完了

では、イベントが起こった際の動作を記述してみましょう。
FSM上に新しいStateを作成し、Add Global Transitionから登録したVIVE用のグローバルイベントを選択します。

vive8

こんな形で、メインのStateの遷移とは別に、コントローラーのイベントを起点に処理を走らせることができるので、処理の流れも記述もわかりやすくなりました。

vive9

 

FSMダウンロード

グローバルイベントを登録したFSMはこちらからダウンロードしてください。
利用するには上記でかいた有料のものを含む3つのアセットを予めインポートしておく必要があります。

 

カテゴリー: HTC VIVE, Unity

伊勢丹彩り祭2016にてSTYLY VRショッピングを体験

14040012_10153678532902041_841660605054308222_n

未来解放区万博 〜デザインとテクノロジーは、私たちの未来を変える!?〜

8月24日[水]〜9月13日[火]
□新宿店本館2階=センターパーク/TOKYO解放区

HATRA、BALMUNG、chlomaの3ブランドの世界の中に入りこみ、実在する服をバーチャルの世界で楽しみながら買うことができる〈STYLY(スタイリー)〉のVRショッピング体験を実施。実際の洋服を高精細3Dスキャンしているので、生地の質感やディテイルなど細部まで確認でき、あたかも洋服が目の前にあるかのように感じることができます。あわせて、若手クリエーターが中心となって「デジタル」をモノとコトの両方から提案。デジタルコラージュが特徴の〈バルムング〉や、ロボティクスファッションクリエーター きゅんくんが制作したウェアラブルロボット〈メカフクリオネ〉は、その中でも特別な存在感を放ちます。

 

掲載記事

〈STYLY〉で近未来のバーチャルショッピングを体験!(ISETAN GUIDE)

ファッション×テクノロジーの新たなライフスタイルを提案!(ISETAN SHIN JUKUブログ)

三越伊勢丹、AI利き酒やVRなどテクノロジーを活用した販売サービスをさらに強化(IoT News)

「2016彩り祭」新宿伊勢丹AR・VR技術で接客拡大に挑戦(ARの件)

三越伊勢丹がテクノロジーでファッションを提案、最新デジタルアイテムやVRショッピングも(Fashion Snap)

 

カテゴリー: HTC VIVE, Unity

Gameobjectのテクスチャをアスペクト比正しく貼り付ける

Unityで貼り付ける元画像の縦横比と、貼り付け先の縦横比が違った場合、引き伸ばされて画像が表示されてしまいます。

下記のように、アスペクト比が異なる場合は、画像がいっぱいに表示されるように調整して貼り付けます。

NekoImage

 

 

 

カテゴリー: Unity

Unityからc#でAmazon Web ServiceのS3ストレージにアップロードするメモ

Unity5.3からAWSのS3ストレージへファイルをアップロードするメモです。

キーポイント

  • AWSが用意しているAWS Mobile SDK for Unityを利用する
  • S3への認証はCognito Identityを用いる

参考リンク

手順

S3バケットの作成

任意の名前でS3バケットを生成しておきます。Regionはどこでも構いません。今回はTokyoリージョンにtest-bucket-unityとバケット名で作成しました。

s3-1

以下のポリシーは、test-bucket-unity バケット内のすべてのファイルを表示できるアクセス許可をすべての閲覧者に付与します。このポリシーをコピーし、[Bucket Policy Editor] に貼り付けます。

 

Permissionの追加でAny Authenticated AWS UserにListとUpload/Delete権限を付与します。

aws

Identify Pool Idの取得

AWSログイン後、Amazon Cognito管理ページに移動します。 Cogniteは2016年6月現在US-EASTリージョンでしか提供されていません。

s3-2

Manage Federated Identitiesに進みます。

s3-3

Identify pool nameを名づけて、Enable access to unauthenticated identitiesをチェックしてCreate PoolをクリックしてIdentify Poolを作成します。

s3-4

アクセス権限設定のためのIAMロールを新規に作成します。特に規定の値から何も変更せずに「許可」をクリックします。

次に進むと、UnityからAWSへCognito Identify pool IDを用いたアクセスコードのサンプルが表示されます。

s3-5

IAMロール変更(S3アクセス権限付与)

次に作成したIdentify poolでS3へアクセスできるようにしておきましょう。IAMコンソールに移動して、ロールを見ると先ほど生成したIAMロール(今回の場合Cognito_test_pool_nameAuth_Role)がありますので設定を変更します。

s3-6

S3へのフルアクセスポリシーをアタッチします。

s3-7

これで、S3へのアクセス権限は完了。

Unity上でAWS利用

What is the AWS Mobile SDK for Unity? ページからAWS Mobile SDK for Unityをダウンロードします。

解凍したフォルダから下記2つのパッケージをインポートします。

  • AWSSDK.S3.3.1.7.2.unitypackage
  • AWSSDK.IdentityManagement.3.1.4.3.unitypackage

S3ExampleデモシーンでS3にアクセスできることを確認しましょう。

s3-8

S3にファイルをアップロードするクラスを作ったのでシェアしておきます。

利用するには下記のようにする

メモ

Exception: Main thread has not been set, is the AWSPrefab on the scene?エラーは
UnityInitializer.AttachToGameObject(this.gameObject);
で対処

Editorモードでは動かない?。。。。->動かないようです。。

 

追記(2016/09/04)

エディタモードでは上記方法でS3へのアップロードができないのでc#でコマンドライン上で動くコンソールアプリを開発しUnityから呼び出すことにした。コンソールアプリでは若干実装の方法が異なる
https://github.com/from2001/S3Uploader

1, Visual Studioでコンソールアプリケーションプロジェクトを作成

2,必要ライブラリをNugetでインストール

3,s3upload.cs(コンソールアプリ用)を作成

4,呼び出し方は同じ

S3アップロード用のコマンドラインツールはこちらにアップしました。
S3Uploader

 

カテゴリー: Unity

Asset Bundle利用メモ

Unityのアセットバンドルの利用方法をメモ

アセットストアよりAssetBundle Manager & Example Scenesをダウンロードしてインポート。

ab1

Asset Bundle Managerに関してはまず下記を読んでおく。

ここが変わる!Unity 5のスマホ開発 ~アセットバンドル、ビルド、プラグイン~

 

メモ

  • Local Asset Bundle Serverを実行時に
    Win32Exception: ApplicationName='”C:/Program Files/Unity5.3.5p2/Editor\Data\MonoBleedingEdge\bin\mono.exe”‘エラー
    が出る。=>一度Build AssetBundleを実行するとエラーが発生しなくなる
  • Local Asset Bundle Serverは内部でAssetBundleServer.exeが実行されPort7888のウェブサーバーとして機能する。プロジェクトフォルダ内の\AssetBundlesはhttp://localhost:7888/に対応。他のプロジェクトでビルドしたアセットをテストで利用したい場合はSimulationモードではなく、AssetBundleServerを利用すること。
  • Asset Bundle Managerは二重ロードや依存解決してくれるコードが含まれていて便利なラッパー。
  • アセットバンドルにはスクリプトを含めることができない

 

Asset Bundleを体験して理解するために、一連の流れを試してみる

ABProject1で作成したPrefabアセットを、ABProject2で読み込んでみる

ABProject1にて(アセットバンドル作成)

  1. Asset StoreからAssetBundle Manager & Example Scenesをインポート
    1. オブジェクトを作成(CylinderとCubeを組み合わせた)
    2. ProjectビューにドラッグしてPrefab化(Prefab名:asset_prefab1)
    3. ProjectビューのPrefabにInspectorビューでAssetBundle名をつける(AssetBundle名:ab1)ab2
  2. アセットをビルド(Assets – AssetBundles – BuildAssetbundles)ab3
  3. Windowsの場合は\ABProject1\AssetBundles\Windows以下にビルドされたアセットが作成される。

ABProject2にて(アセットバンドル読み込み)

  1. Asset StoreからAssetBundle Manager & Example Scenesをインポート
  2. アセットをビルド(Assets – AssetBundles – BuildAssetbundles)をダミー実行する。これを初回行わないとLocalAssetBundleServerがエラーを吐く
  3. ABProject1で作成したアセットファイルをABProject2フォルダにコピーする
    コピーファイル:ab1、ab1.manifest
    コピー元:\ABProject1\AssetBundles\Windows
    コピー先:\ABProject2\AssetBundles\Windows
  4. LocalAssetBundleServerを起動
    ab5
  5. アセットロード用のスクリプトを設定
    LoadAssetsスクリプトを任意のオブジェクト(今回はLoaderと名付けた空オブジェクト)に貼り付ける
    Asset Bundle Name:ビルドするときに名付けたアセット名
    Asset Name:復元するアセット化したPrefabの名前ab6
  6. 実行すると、アセットバンドル化したPrefabが読み込まれますab7

 

動作を含むオブジェクトをアセットバンドル化して配信したい

アセットバンドルには通常の方法ではスクリプトを含めることができません。アセットバンド化する際にはスクリプトの参照情報のみビルドされます。つまり、スクリプトファイルは、アセット読み込み側プロジェクトにも予め用意しておかなくてはいけません。

特殊な方法としてスクリプトをDLL化して配信するという方法がありますが今回は扱いません。下記のサイトに方法がありますので、参考に。
ゲームをビルドした後でもスクリプト(機能)を追加する(テラシュールブログ)
How to compile script to include it to AssetBundle?(Unity Forum)

動きを含むアセットを配信する一番簡単な方法はPlaymakerなどビジュアルスクリプティングソリューションを用いることのように思います。Playmakerで設定したオブジェクトの挙動はビルド時にアセットバンドル化されるため配信可能です。読み込み側プロジェクトにもPlaymakerをインストールしておけば、配信先でも動作します。ものすごく簡単で便利。

ab8

アセットバンドルのキャッシュに関して

AssetBundle Manager & Example ScenesのLoadAssets.csスクリプトは内部でLoadFromCacheOrDownload関数をもちいてアセットをダウンロードしています。既に読み込んだことのあるAssetbundle名のアセットは、LoadAssets.csスクリプトもLoadFromCacheOrDownload関数もキャッシュから読み込みます。つまり、普通にビルドするアセットバンドルを更新して配信するだけでは、そのアセットが新しいものなのかどうか判断してくれません。

キャッシュをクリアするには

  • LoadFromCacheOrDownloadの引数でバージョンを指定する。(キャッシュした時より大きい番号を指定すると再読込する)
  • Caching.CleanCache();関数でキャッシュをクリアする

アップロードされているmanifestファイル更新されている時だけアセット本体ダウンロードしなおしてくれればいいのに。。。自作するかな。

スクリプト経由でAssetBundleNameを付加する方法


 

 

とりあえず、ここまで。後々追記予定。

 

 

カテゴリー: Unity

Unityでビデオストリーミングをテクスチャとして表示する(アセットなしでOK)

テクスチャ上でビデオを再生するにはAVProアセットEasy Movie Texture (Video Texture)などを使う方法がありますがUnityのMovieテクスチャを使えば追加アセット無しでも実現することが可能です。

ウェブサーバーからストリーミングされる動画をテクスチャに貼るにはどうしたらいいものかと調べていたらUnity標準のMovieテクスチャでも実現できることがわかった。ただし、動画ファイル形式はogg形式でないとダメなようだ。

ウェブサーバー上のoggビデオファイルをストリーミング再生する

下記コードをOggVideoStreamingTexture.csとして保存する。

任意のGameobjectに貼り付けます。

OggVideoURL:ストリーム再生するoggビデオのURL
サンプルで http://www.unity3d.com/webplayers/Movie/sample.ogg を利用して試そう

GameobjectForVideoTexture:ビデオを表示するオブジェクト。未指定の場合はスクリプトをアタッチしたオブジェクトに動画が表示されます。

ogg1

実行すると動画が表示されます。サーバーからダウンロード途中でも再生がスタートします。エラーが2つ出ますが無視してOKです。海外のフォーラムでも話題にでていましたがUnityのバグっぽい。

ogg2

 

ogg形式へビデオファイルのコンバート方法

上記スクリプトでの動画ストリーミング再生には、動画のファイル形式がogg形式である必要があります。各種ビデオファイルをogg形式へ変換するスクリプトを作成したので紹介しておく。スクリプトはVBScriptで記述したWidnows Scripting Hostです。(VBScriptを拡張子.vbsで保存すればそのままWindowsで実行できて便利)

  1. ffmpegのダウンロード
    ffmpeg公式サイトからWindows用バイナリをダウンロード
    zipファイルを解凍する
  2. 下記スクリプトをConvert_video_to_ogg.vbsとして保存。1で解凍したffmpegフォルダに設置する
  3. Convert_video_to_ogg.vbs をダブルクリックして実行

説明文書が表示されるのでOKを押す

ogg3

ビデオファイルを選択する

ogg4

後は、変換されるのを待つ。oggファイルは元ビデオと同じフォルダに生成されます。

ogg5

ffmpegとogg変換スクリプトのセットをこちらに置いておきます( GPL 3.0ライセンスによる再配布)

zipiconffmpeg-20160610-git-0a9e781-win32-static_with_ogg_video_convert_script.zip

 

 

カテゴリー: Unity