Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PhotonでOculusAvatarを動かす方法
Search
Keizo Nagamine
July 17, 2019
Technology
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PhotonでOculusAvatarを動かす方法
Keizo Nagamine
July 17, 2019
More Decks by Keizo Nagamine
See All by Keizo Nagamine
福岡XR部でのHubs活用事例報告っ!
kzonag
0
210
ついに届いたNreal! -サンプルランチャーを作ってみた-
kzonag
0
270
福岡XR部の紹介と最近のオンライン活動
kzonag
0
2.3k
ZoomとHubsの繋げ方
kzonag
0
700
VTuberになるために必要な要素技術
kzonag
0
140
リアルと重ねるVR
kzonag
0
2.7k
UnityでOculuQuest入門
kzonag
0
1.2k
XRのおさらいと最近ホットな話題
kzonag
0
130
UnityマンがA-Frameさわってみて感じた共通点とか
kzonag
0
740
Other Decks in Technology
See All in Technology
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
220
Snowflakeと仲良くなる第一歩
coco_se
4
480
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
120
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
200個のGitHubリポジトリを横断調査したかった
icck
0
130
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
4
1.1k
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
590
失敗を資産に変えるClaude Code
shinyasaita
0
680
新しいVibe Codingと”自走”について
watany
6
330
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
170
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
390
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
130
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Embracing the Ebb and Flow
colly
88
5.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Tell your own story through comics
letsgokoyo
1
950
BBQ
matthewcrist
89
10k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
Believing is Seeing
oripsolob
1
150
Transcript
Photonで OculusAvatarを 動かす方法 @KzoNag XRミーティング 福岡 2019年7月17日 #XRMTG #福岡XR部
自己紹介 ながみね @KzoNag Jollystics Inc. / 福岡XR部 Unityを触っていることが多い XR/インタラクティブ/モバイル 5
発端 6 前にGoで試した OculusAvatarをマルチ プレイできるサンプルを Questでも試したかった
Questでは動かせないことが発覚! 中で利用してるP2P通信などの機能はアプリIDを発行しないと使えない しかしデベロッパーサイトでのアプリ作成でPlatformをQuestにできない Questアプリの企画審査に通過する必要がある!? だがしかし 7
そこで 8 https://developer.oculus.com/documentation/avatarsdk/latest/concepts/avatars-sdk-intro/ https://www.photonengine.com/ja-JP/PUN
ドキュメントがあります https://doc.photonengine.com/ja-jp/pun/current/demos-and-tutorials/oculusavatarsdk 9
今日の話の目的 ドキュメントはOculus AvatarとPhotonを知ってることが前提 コピペしたら動いたけど中身の理解のハードルはやや高そう いろいろ触ってチョット分かってきたので共有します 10
Oculus Avatar Oculusが提供するアバターの仕組み Rift(S)/Go/Quest + SteamVRなどでも動かせる AvatarSDKで自作アプリに導入できる 11 https://developer.oculus.com/documentation/avatarsdk/latest/concepts/avatars-sdk-intro/
Oculus Avatar SDK Asset StoreでOculus Integrationを入れたらAvatarSDKも入る (以前は各種SDKの個別版も配布してたけど今は全部入りだけっぽい?) 12
LocalAvatar (シンプルなサンプル) 一人称視点と三人称視点の2つのアバターオブジェクト LocalAvatarはプレハブになっているのですぐに使える 13 Little_LocalAvatar LocalAvatar
LocalAvatarとRemoteAvatar 16 LocalAvatar HMDとコントローラーの情報 をもとにアバターを制御 RemoteAvatar シリアライズされたアバター データをもとにアバターを制御
LocalAvatarとRemoteAvatar 17 LocalAvatar RemoteAvatar アバター データ HMDとコントローラーの情報 をもとにアバターを制御 シリアライズされたアバター データをもとにアバターを制御
RemoteLoopback (シンプルなサンプル②) LocalAvatarから取得したアバターデータを RemoteAvatarに流し込むサンプル 18 RemoteAvatar LocalAvatar
LocalAvatar → アバターデータ 19 void Start() { LocalAvatar.RecordPackets = true;
LocalAvatar.PacketRecorded += OnLocalAvatarPacketRecorded; } void OnLocalAvatarPacketRecorded(object sender, OvrAvatar.PacketEventArgs args) { using (MemoryStream outputStream = new MemoryStream()) { BinaryWriter writer = new BinaryWriter(outputStream); ... byte[] avatarData = outputStream.ToArray(); SendPacketData(avatarData); } }
アバターデータ → RemoteAvatar 20 void ReceivePacketData(byte[] data) { using (MemoryStream
inputStream = new MemoryStream(data)) { BinaryReader reader = new BinaryReader(inputStream); int sequence = reader.ReadInt32(); OvrAvatarPacket avatarPacket; ... LoopbackAvatar.GetComponent<OvrAvatarRemoteDriver>().QueuePacket(sequence, avatarPacket); } }
マルチプレイの構成 21 アバター データ アバター データ アバター データ アバター データ
PlayerA PlayerB LocalAvatar LocalAvatar RemoteAvatar RemoteAvatar ネットワーク経由のデータの 送受信をどうするか
PlatformSDKのP2P通信を利用してアバターデータを送受信 ルーム制御やボイスチャットなどOculusRooms的な機能が実現されてる SocialStarter(しっかりしたサンプル) 22 XR部のメンバーに手伝ってもらって アバターが動くことを確認した
Photon マルチプレイゲームに必要なネットワーク機能を提供するサービス 無料プランあり Unity向けパッケージ : Photon Unity Networking (PUN) 25
https://www.photonengine.com/ja-JP/PUN
ネットワークオブジェクト 26 PhotonView 同期するコンポーネントを監視する役割 同じViewIDを持つ相手と同期する オブジェクトの所有権などの情報も持つ Photon***View 同期するコンポーネント TransformやRigidbodyなどは用意されている 自作することも可能
ネットワークオブジェクトの生成 27 Client1 Client2 Instantiateを実行して オブジェクト生成 Client1に合わせて オブジェクト生成 ViewID=1 ViewID=1
PhotonNetwork.Instantiate(prefabName, position, rotation); Cube Cube
ネットワークオブジェクトの同期 28 Client1 Client2 プレイヤー操作で 移動 Client1に 同期して移動 ViewID=1 ViewID=1
IPunObserbable 29 PhotonViewの監視対象となるインターフェイス public class PhotonAvatarView : MonoBehaviour, IPunObservable {
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if(stream.IsWriting) { byte[] data = null; stream.SendNext(data); } if(stream.IsReading) { byte[] data = (byte[])stream.ReceiveNext(); } } } ここでLocalAvatarのアバターデータを送信 受信したアバターデータを RemoteAvatarに流し 込む
異なるプレハブ間の同期 30 ViewID=1 ViewID=1 LocalAvatar RemoteAvatar PhotonAvatarView PhotonAvatarView Client1 Client2
こういう状態にしたい
異なるプレハブ間の同期(手順) 31 ViewID=0 LocalAvatar PhotonAvatarView Client1 Client2 ①通常のInstantiateでオブジェクト生成
異なるプレハブ間の同期(手順) 32 ViewID=1 LocalAvatar PhotonAvatarView Client1 ②手動でViewIDを割り当て
異なるプレハブ間の同期(手順) 33 LocalAvatar PhotonAvatarView Client1 Client2 ③ViewIDを指定して生成イベント発行 ViewID=1 ViewID=1で 生成して
異なるプレハブ間の同期(手順) 34 ViewID=1 LocalAvatar RemoteAvatar PhotonAvatarView PhotonAvatarView Client1 Client2 ④指定されたViewIDでオブジェクト生成
ViewID=1
そんなこんなでできたもの 36 https://twitter.com/KzoNag/status/1149360901205610497?s=20
Have a nice avatar life!
CREDITS Special thanks to all the people who made and
released these awesome resources for free: ▪ Presentation template by SlidesCarnival ▪ Photographs by Unsplash 38