Placeholder Image

字幕表 動画を再生する

AI 自動生成字幕
  • Hi XR developers!

    XRの開発者の皆さん、こんにちは!

  • In previous videos we've looked at a lot of mixed reality features such as pass-through, scene understanding and environment occlusion.

    これまでのビデオでは、パススルー、シーン理解、環境オクルージョンなど、多くの複合現実感機能を見てきた。

  • We've also looked at several methods on how to place objects in our room with the MRUK or Mixed Reality Utility Kit or MetaScene API with the OVR Scene Manager.

    また、MRUK(Mixed Reality Utility Kit)やMetaScene APIとOVR Scene Managerを使って、オブジェクトを部屋に配置する方法もいくつか見てきました。

  • But what if we want to save our objects consistently across game sessions in our scene and load them where they were before?

    しかし、ゲーム・セッションをまたいでオブジェクトをシーン内に一貫して保存し、以前の場所にロードしたい場合はどうすればいいのだろうか?

  • This is where spatial anchors come into play.

    そこで、空間的なアンカーの出番となる。

  • So today we're going to look at how to create, save, unsave and load spatial anchors in our scene.

    そこで今日は、シーンに空間アンカーを作成、保存、解除、ロードする方法を見ていきましょう。

  • If you like this type of content, please take a second to like and subscribe to this channel.

    このようなコンテンツがお好きな方は、ぜひ「いいね!」とチャンネル登録をお願いします。

  • If you'd like to get access to the source code of each project, please consider to join my Patreon.

    各プロジェクトのソースコードへのアクセスをご希望の方は、私のパトロンへの参加をご検討ください。

  • If you have any questions, feel free to join our growing XR developer community on Discord.

    ご質問があれば、DiscordのXR開発者コミュニティにお気軽にご参加ください。

  • And now, let's jump into OVR Spatial Anchors.

    それでは、OVR空間アンカーに飛び込もう。

  • As always, we start by setting up a new Unity project.

    いつものように、新しいUnityプロジェクトをセットアップすることから始めます。

  • I am using the MetaXR SDK version 60.

    MetaXR SDKバージョン60を使用しています。

  • I also installed the Mixed Reality Utility Kit for a later showcase.

    また、後で披露するために複合現実ユーティリティ・キットもインストールした。

  • To know how to use the Utility Kit, watch my video here.

    ユーティリティ・キットの使い方については、こちらのビデオをご覧ください。

  • Make sure you set up your project correctly with Meta's project setup tool as well.

    メタのプロジェクト・セットアップ・ツールでプロジェクトを正しくセットアップしてください。

  • To set up our scene, we used Meta's building blocks, which I explained in detail in a previous video, that you can watch here.

    シーンをセットアップするために、メタのビルディング・ブロックを使いました。メタのビルディング・ブロックについては、以前のビデオで詳しく説明しましたので、こちらをご覧ください。

  • For this scene, I only need a camera rig and a pass-through layer.

    このシーンで必要なのは、カメラリグとパススルーレイヤーだけだ。

  • I then created a new game object called Spatial Anchor Manager, where we will attach our custom components in a minute.

    そして、Spatial Anchor Managerという新しいゲームオブジェクトを作成しました。

  • I would like to start with a simple anchor placement script.

    簡単なアンカー配置スクリプトから始めたい。

  • Inside this class, we declare a public variable called AnchorPrefab to hold a reference to the prefab you want to instantiate in the game.

    このクラスの内部で、AnchorPrefab というパブリック変数を宣言し、ゲーム内でインスタンス化したいプレハブへの参照を保持します。

  • Inside the update method, there's a conditional check using the OVR input to determine if the primary index trigger button on the right Oculus Touch controller has been pressed.

    updateメソッドの中には、右のOculus Touchコントローラのプライマリインデックストリガーボタンが押されたかどうかを判断するために、OVR入力を使った条件チェックがあります。

  • If you are interested to learn in detail how to read the input from your OVR controllers, check out my video about it here.

    OVRコントローラーからの入力を読み取る方法を詳しく知りたい方は、こちらのビデオをご覧ください。

  • When pressed, it calls the CreateSpatialAnchor method.

    押されると、CreateSpatialAnchorメソッドが呼び出される。

  • This method creates an instance of the prefab at the current position and rotation of the right controller, utilizing the OVR input, and then adds an OVRSpatialAnchor component to newly created prefab instance.

    このメソッドは、OVR入力を利用して、右コントローラの現在の位置と回転でプレハブのインスタンスを作成し、新しく作成されたプレハブのインスタンスにOVRSpatialAnchorコンポーネントを追加します。

  • Let's set it up in our scene now by applying the script to our new game object.

    スクリプトを新しいゲームオブジェクトに適用して、シーンにセットアップしてみましょう。

  • We then need a prefab we would like to spawn.

    次に、スポーンしたいプレハブが必要です。

  • The prefab we will use here has no logic on it, it simply contains the visuals of our anchor.

    ここで使うプレハブにはロジックはなく、単にアンカーのビジュアルが入っているだけです。

  • Drag the prefab into the inspector, and let's give this a try.

    プレハブをインスペクタにドラッグして、これを試してみましょう。

  • Fantastic!

    ファンタスティックだ!

  • As you can see, we can now easily create anchors at the pressing the trigger button.

    ご覧のように、トリガーボタンを押すだけで簡単にアンカーを作成できるようになった。

  • Let's go one step further and see how we can save or unsave these anchors at this exact location in our space.

    さらに一歩進んで、スペースのこの正確な位置にこれらのアンカーを保存したり、保存を解除したりする方法を見てみよう。

  • We create a new script for our extended logic that we will call SpatialAnchorManager.

    SpatialAnchorManagerと呼ぶ拡張ロジック用の新しいスクリプトを作成します。

  • We can keep the reference to our prefab, but we want to add a little bit more information about our anchor.

    プレハブへの参照はそのままにして、アンカーに関する情報をもう少し追加したい。

  • We create a private variable for a canvas that we will later add to our prefab.

    後でプレハブに追加するキャンバスのプライベート変数を作成します。

  • This canvas holds two text fields for the anchor's ID and also a text that tells us if the anchor has been saved or not.

    このキャンバスには、アンカーのIDと、アンカーが保存されているかどうかを示すテキストフィールドが2つあります。

  • We then need a list of anchors to keep track of them in order to save or unsave them.

    そして、アンカーを保存したり解除したりするために、アンカーを追跡するためのリストが必要になる。

  • Lastly, we define a private spatial anchor called LastCreatedAnchor to be able to either save or unsave the currently created anchor.

    最後に、LastCreatedAnchorというプライベートな空間アンカーを定義し、現在作成されているアンカーを保存または解除できるようにする。

  • Perfect!

    完璧だ!

  • We check again if we pressed our trigger button, and if so, we call the CreateSpatialAnchor method.

    トリガーボタンが押されたかどうかを再度チェックし、押された場合はCreateSpatialAnchorメソッドを呼び出す。

  • The difference here is that we will already apply an OVR spatial anchor component to our prefab, so we can simply instantiate it here without adding this component.

    ここでの違いは、すでにOVR空間アンカーコンポーネントをプレハブに適用しているので、このコンポーネントを追加することなく、単純にここでインスタンス化できることです。

  • We then save the canvas and text fields of this particular anchor in our variables.

    次に、この特定のアンカーのキャンバスとテキスト・フィールドを変数に保存する。

  • Our goal is to get the anchor's ID after it has been created.

    私たちの目標は、アンカーが作成された後に、そのアンカーのIDを取得することである。

  • Since this process is working asynchronously by the Oculus Runtime, we can best handle this delay by calling a coroutine which we will call AnchorCreated.

    このプロセスはOculus Runtimeによって非同期で動作しているので、AnchorCreatedと呼ぶコルーチンを呼び出すことでこの遅延を処理することができます。

  • In this case, we provide this method with our created anchor and then wait until the creation is complete and the anchor has been localized by the Oculus Runtime.

    この場合、作成したアンカーをこのメソッドに提供し、作成が完了し、アンカーがOculus Runtimeによってローカライズされるまで待ちます。

  • If so, we can go ahead to fetch the ID of the anchor.

    もしそうなら、アンカーのIDを取得しよう。

  • We then add the newly created anchor to our list of anchors.

    そして、新しく作成したアンカーをアンカーのリストに追加する。

  • After that, we save the new anchor as the anchor we last created.

    その後、新しいアンカーを前回作成したアンカーとして保存する。

  • This allows us to finally set our ID text as well as our status text.

    これでようやく、IDテキストとステータステキストを設定することができる。

  • Let's set this up in our Unity scene now.

    これをUnityのシーンにセットアップしてみましょう。

  • We can remove the old script and apply the SpatialAnchorManager.

    古いスクリプトを削除し、SpatialAnchorManagerを適用することができます。

  • We then have to apply a new prefab.

    そして新しいプレハブを適用しなければならない。

  • You can see that I already created one which contains an OVR spatial anchor component.

    OVR空間アンカー・コンポーネントを含むものをすでに作成したことがわかるだろう。

  • Furthermore, I added a canvas which contains two text fields.

    さらに、2つのテキスト・フィールドを含むキャンバスを追加した。

  • We can now apply this prefab to our and test out our new prefab creation logic.

    このプレハブを私たちのプレハブに適用し、新しいプレハブ作成ロジックをテストすることができます。

  • Great!

    素晴らしい!

  • As you can see, we are now able to not only create but wait for and display each anchor's ID which is crucial for our next step.

    ご覧のように、各アンカーのIDを作成するだけでなく、待機して表示することができるようになった。

  • In the next step, we want to be able to save and also unsave the currently selected anchor.

    次のステップでは、現在選択されているアンカーを保存したり、保存を解除したりできるようにしたい。

  • To do that, we make use of Unity Player Prefs.

    そのために、Unity Player Prefsを利用します。

  • Unity Player Prefs are a simple key value storage system used to save and load small amounts of data such as player preferences or game settings between game sessions without requiring complex file handling.

    Unity Player Prefsは、複雑なファイル操作を必要とせずに、ゲームセッション間でプレイヤーの設定やゲーム設定などの少量のデータを保存およびロードするために使用されるシンプルなキーバリュー保存システムです。

  • To save those key values, we create a constant string that will save the anchor's IDs.

    これらのキー値を保存するために、アンカーのIDを保存する定数文字列を作成する。

  • We use constant strings for Unity Player Prefs keys to prevent typos and ensure consistency.

    私たちは、タイプミスを防ぎ、一貫性を確保するために、Unity Player Prefsキーに定数文字列を使用しています。

  • In the update method, we would like to introduce two new buttons.

    アップデート・メソッドでは、2つの新しいボタンを紹介したい。

  • If we press button 1, we would like to save our anchor and we unsave it when pressing button 2.

    ボタン1を押すとアンカーが保存され、ボタン2を押すと保存が解除される。

  • If we now look at the save last created anchor method, we can see that all we need to do is to call the save method.

    最後に作成したアンカーを保存するメソッドを見てみると、必要なのはsaveメソッドを呼び出すことだけであることがわかる。

  • If the saving was successful, we would like to update the status text on the anchor to saved.

    保存が成功したら、アンカーのステータステキストを保存済みに更新したい。

  • Lastly, to save the anchor to our Player Prefs, we call the save ID to Player Prefs method and provide it with the anchor's ID.

    最後に、アンカーをPlayer Prefsに保存するために、save ID to Player Prefsメソッドを呼び出し、アンカーのIDを与えます。

  • It first checks if the key exists, indicating the total count of IDs saved.

    まず、キーが存在するかどうかをチェックし、保存されているIDの総数を示す。

  • If not found, it initializes this count to zero.

    見つからない場合は、このカウントをゼロに初期化する。

  • Then, it retrieves the current number of IDs saved, saves the new ID using a key formed by appending this number to UUID, and increments the saved ID count by updating the string with the new total.

    次に、現在保存されているIDの数を取得し、この数をUUIDに追加したキーを使って新しいIDを保存し、新しい合計で文字列を更新することで保存されたIDの数を増やす。

  • Lastly, to unsave, we literally just have to call the erase method from Oculus, from our anchor, and update the status text.

    最後に、保存を解除するには、文字通り、アンカーからOculusの消去メソッドを呼び出し、ステータス・テキストを更新するだけでよい。

  • Optionally, if you would like to actually delete your anchor, you could now simply call the destroy method from Unity.

    オプションとして、実際にアンカーを削除したい場合は、Unityからdestroyメソッドを呼び出せばよい。

  • Let's go back to Unity and give this a go.

    Unityに戻ってやってみよう。

  • By pressing the A button, we can now save the anchor and easily unsave it again by pressing the B button.

    Aボタンを押してアンカーを保存し、Bボタンで保存を解除する。

  • Fantastic!

    ファンタスティックだ!

  • We now built the foundation for our last and final iteration of our code.

    これで私たちは、コードの最後の、そして最終的な反復の基礎を築いた。

  • Here, I would like to show you how to unsave all anchors at once, and how to load anchors we have saved before.

    ここでは、すべてのアンカーの保存を一度に解除する方法と、以前に保存したアンカーをロードする方法を紹介したい。

  • Firstly, we create another private variable called anchorLoader.

    まず、anchorLoaderという別のプライベート変数を作成する。

  • This will be a script we create in a second.

    これはすぐに作成するスクリプトである。

  • Since we want to attach this component to the same game object, we can fetch a reference directly in the awake method.

    このコンポーネントを同じゲームオブジェクトにアタッチしたいので、awakeメソッドで直接参照を取得します。

  • Then, in the update method, if we press the grab button, we want to unsave all the anchors in our list and the ones that are already saved to the player prefs.

    次に、updateメソッドで、grabボタンを押すと、リスト内のすべてのアンカーと、すでにプレーヤーのprefsに保存されているアンカーの保存を解除します。

  • If we press down on the thumbstick, we would like to load all the anchors we have previously saved to the player prefs.

    サムスティックを押し下げると、プレーヤープレ設定に保存したアンカーがすべてロードされます。

  • In the unsaveAllAnchors method, we iterate through our list of anchors and call the unsaveAnchor method for each of them.

    unsaveAllAnchorsメソッドでは、アンカーのリストを繰り返し、それぞれのアンカーに対してunsaveAnchorメソッドを呼び出す。

  • We provide this method with the anchor parameter and call the erase method on that anchor similarly to before.

    このメソッドにアンカー・パラメーターを与え、以前と同様にそのアンカーに対して消去メソッドを呼び出す。

  • We then get a reference to the status text of each anchor and set the text to not saved.

    次に、各アンカーのステータステキストへの参照を取得し、テキストを保存しないに設定する。

  • After that, back in the unsaveAllAnchors method, we clear the anchors list and call the clearAllIds from player prefs method to not only remove our list of anchors, but also the anchors that were already saved previously.

    その後、unsaveAllAnchorsメソッドに戻って、アンカーリストをクリアし、プレーヤーのprefsメソッドからclearAllIdsを呼び出して、アンカーリストを削除するだけでなく、以前に保存したアンカーも削除します。

  • This method checks if the key exists in player prefs, indicating there are already saved IDs.

    このメソッドは、プレーヤーのプレフィールにキーが存在するかどうかをチェックし、すでに保存されたIDがあることを示します。

  • If it exists, it retrieves the count of saved IDs and iterates through each one, deleting the keys associated with them.

    もし存在すれば、保存されたIDのカウントを取得し、それぞれを繰り返し、関連するキーを削除する。

  • After deleting all ID keys, it removes the key itself.

    すべてのIDキーを削除した後、キーそのものを削除する。

  • Effectively resetting the count and finally calls playerPrefs.save to actually commit these changes to the metaquest device.

    効果的にカウントをリセットし、最後にplayerPrefs.saveを呼び出して、これらの変更を実際にメタクエストデバイスにコミットする。

  • Next, for loading our saved anchors, we call the loadAnchorsById method from a new script that we are going to create now called anchorLoader.

    次に、保存したアンカーをロードするために、これから作成する新しいスクリプト「anchorLoader」からloadAnchorsByIdメソッドを呼び出します。

  • The script starts with a declaration of several important variables.

    スクリプトは、いくつかの重要な変数の宣言から始まる。

  • First, we declare a private variable that holds a reference to the anchor prefab.

    まず、アンカープレハブへの参照を保持する private 変数を宣言します。

  • We then create another variable that holds a reference to the SpatialAnchorManager component.

    次に、SpatialAnchorManagerコンポーネントへの参照を保持する別の変数を作成する。

  • Lastly, we create a unity action that defines a callbacks related to anchor loading operations.

    最後に、アンカー読み込み操作に関連するコールバックを定義するunityアクションを作成する。

  • The boolean parameter indicates the success of the loading operation, since this component will sit on the same game object as the SpatialAnchorManager.

    このコンポーネントはSpatialAnchorManagerと同じゲームオブジェクトに配置されるため、booleanパラメータはロード操作の成功を示します。

  • We can easily get the component in the awake method.

    このコンポーネントは、awakeメソッドで簡単に手に入れることができる。

  • We can then also get a reference to the prefab that we already assigned in the SpatialAnchorManager.

    SpatialAnchorManager ですでに割り当てたプレハブへの参照も取得できます。

  • Lastly, we call the onLocalized method as soon as our loading process has been successful.

    最後に、読み込みが成功したらすぐにonLocalizedメソッドを呼び出す。

  • This loadAnchorsById method, which we call directly from the SpatialAnchorManager, initiates the process of loading spatial anchors that have been previously saved by their IDs.

    このloadAnchorsByIdメソッドは、SpatialAnchorManagerから直接呼び出され、以前にIDで保存された空間アンカーをロードするプロセスを開始します。

  • It starts by checking if there is a record in player prefs for the number of IDs saved.

    まず、プレーヤーのプレフィールにIDの保存数が記録されているかどうかをチェックします。

  • If no record exists, it sets this count to zero, indicating there are IDs to load.

    レコードが存在しない場合は、このカウントをゼロに設定し、ロードするIDがあることを示す。

  • It then retrieves the count of IDs and proceeds only if there is at least one ID to load.

    その後、IDのカウントを取得し、ロードするIDが少なくとも1つある場合にのみ処理を進める。

  • For each saved ID, it constructs a GUID object from the string retrieved from player prefs.

    保存されたIDごとに、プレーヤーのprefsから取得した文字列からGUIDオブジェクトを構築します。

  • These IDs are used to configure a loadOptions object, specifying that the anchors should be loaded from local storage with no timeout, and then passed to the load method.

    これらのIDはloadOptionsオブジェクトを設定するために使われ、アンカーがタイムアウトなしでローカルストレージからロードされることを指定し、loadメソッドに渡される。

  • There is two options of saving and loading anchors, locally or in the cloud.

    アンカーの保存と読み込みには、ローカルまたはクラウドの2つのオプションがある。

  • We will look at cloud saving and loading in a different video about shared spatial anchors.

    クラウドの保存とロードについては、共有空間アンカーについての別のビデオで見てみよう。

  • The load method is responsible for the asynchronous loading of unbound anchors based on the provided load options, which include the IDs to load, the storage location, and a timeout setting.

    ロードメソッドは、ロードするID、保存場所、タイムアウト設定などのロードオプションに基づいて、アンカーを非同期にロードする。

  • It calls the static method loadUnboundedAnchors on the OVR spatial anchor to load these anchors, providing a callback function that is called once the loading process completes.

    OVR空間アンカーの静的メソッドloadUnboundedAnchorsを呼び出してこれらのアンカーをロードし、ロード処理が完了すると呼び出されるコールバック関数を提供します。

  • For each loaded anchor, the method checks if it is already localized.

    ロードされた各アンカーについて、そのアンカーがすでにローカライズされているかどうかをチェックする。

  • If so, it immediately triggers the onLoadAnchor callback with the anchor and a true success flag.

    もしそうなら、すぐにonLoadAnchorコールバックをアンカーとtrueの成功フラグでトリガーする。

  • If the anchor is not currently localizing, it initiates the localization process using the onLoadAnchor callback to handle completion.

    アンカーが現在ローカライズ中でない場合、onLoadAnchorコールバックを使ってローカライズ処理を開始し、完了を処理する。

  • This callback function is invoked for each anchor that has been successfully localized or was already localized at the time of loading.

    このコールバック関数は、ローカライズに成功したアンカー、またはロード時にすでにローカライズされていたアンカーごとに呼び出される。

  • It first checks if the localization was successful.

    まず、ローカライズが成功したかどうかをチェックする。

  • If not, it exits early.

    そうでない場合は早々に退場する。

  • For successful localizations, it instantiates the prefab at the pose of the unbound anchor.

    ローカライズに成功すると、バインドされていないアンカーのポーズでプレハブをインスタンス化する。

  • It then binds the unbound anchor to this newly instantiated game object, creating a permanent link between the anchor data and the game object.

    そして、バインドされていないアンカーを、新しくインスタンス化されたゲームオブジェクトにバインドし、アンカーデータとゲームオブジェクトの間に恒久的なリンクを作ります。

  • Lastly, it updates the text components of the instantiated anchor game object with the ID of the anchor and a message indicating that the anchor has been loaded from device storage, providing visual feedback within the scene regarding the status of each loaded anchor.

    最後に、インスタンス化されたアンカーゲームオブジェクトのテキストコンポーネントを、アンカーのIDと、アンカーがデバイスストレージからロードされたことを示すメッセージで更新し、ロードされた各アンカーのステータスに関する視覚的なフィードバックをシーン内に提供する。

  • Let's attach this script to our game object and press play.

    このスクリプトをゲームオブジェクトにアタッチして、再生ボタンを押してみよう。

  • We can now test all our features.

    これですべての機能をテストできる。

  • First, we create some anchors and press the A button on the anchors we want to save.

    まず、アンカーをいくつか作成し、保存したいアンカーのAボタンを押す。

  • If we then stop the game and start it again, we can simply press the thumbstick to load all previously saved anchors.

    その後ゲームを中断し、再び開始すれば、サムスティックを押すだけで、以前に保存したすべてのアンカーをロードすることができる。

  • This process may take a few seconds if the number of anchors is large.

    アンカーの数が多い場合、この処理に数秒かかることがある。

  • By pressing the grab button, we can erase all our anchors from storage.

    グラブボタンを押すことで、すべてのアンカーをストレージから消去することができる。

  • When we then start the game again and try to load our anchors, no anchors will be loaded anymore.

    ゲームを再開してアンカーをロードしようとしても、アンカーはロードされない。

  • Fantastic!

    ファンタスティックだ!

  • This was a lot of code, but you now know exactly how to handle every aspect of spatial anchors.

    これはたくさんのコードだったが、これで空間アンカーをあらゆる側面から処理する方法を正確に知ることができた。

  • Let's look at one last use case before we close off this video.

    このビデオを締めくくる前に、最後の使用例を見てみよう。

  • I prepared a scene using the Mixed Reality Utility Kit, where I want to create some logic to attach anchors to my wall.

    Mixed Reality Utility Kitを使って、壁にアンカーを取り付けるロジックを作成するシーンを用意した。

  • For this, I replaced the SpatialAnchorManager with a new script called WallPrefabPlacer, which we created in a previous video.

    そのために、SpatialAnchorManagerを、以前のビデオで作成したWallPrefabPlacerという新しいスクリプトに置き換えた。

  • I added the whole logic of the SpatialAnchorManager to this script.

    SpatialAnchorManagerのロジック全体をこのスクリプトに追加した。

  • The only difference is that we need to wait until the room model is created.

    唯一の違いは、部屋のモデルが作成されるまで待つ必要があることだ。

  • For this, we create this private variable isInitialized and set it true when the initialized method is called.

    そのために、isInitializedというプライベート変数を作り、初期化メソッドが呼ばれたときにtrueをセットする。

  • Then, in the update method, if we initialized our script, we get the controller position and rotation.

    次にupdateメソッドで、スクリプトを初期化すれば、コントローラーの位置と回転が得られる。

  • We then shoot a ray in the direction of our controller and check if we hit a wall in our room using the mRUKSingleton and its getCurrentRoom method.

    次に、コントローラーの方向に光線を発射し、mRUKSingletonとそのgetCurrentRoomメソッドを使って部屋の壁に当たったかをチェックする。

  • If we hit a wall and we are pressing the trigger button, like before, we would like to call the createSpatialAnchor method, with the difference that we now send the position and rotation of the prefab according to the hit position of the ray.

    壁にぶつかってトリガーボタンを押す場合、以前のようにcreateSpatialAnchorメソッドを呼び出します。

  • In the inspector, we assign the AnchorManager that contains our script to the SceneLoadedEvent of the MixedRealityUtilityKit component.

    インスペクタで、スクリプトを含むAnchorManagerをMixedRealityUtilityKitコンポーネントのSceneLoadedEventに割り当てます。

  • From there, we can call the initialized method.

    そこから、初期化されたメソッドを呼び出すことができる。

  • Also, make sure that you apply a prefab that contains a OVR SpatialAnchor component to the script.

    また、OVR SpatialAnchorコンポーネントを含むプレハブをスクリプトに適用してください。

  • I created this beautiful image frame that we can now apply to our walls.

    私はこの美しいイメージフレームを作った。

  • Before I forget it, the last thing we have to do is to fetch the new WallPrefabPlacer in our AnchorLoader, instead of the SpatialAnchorManager.

    忘れる前に、最後にしなければならないことは、SpatialAnchorManagerの代わりにAnchorLoaderで新しいWallPrefabPlacerを取得することです。

  • Let's give this a go.

    やってみようじゃないか。

  • And as you can see, we can now use the same functionalities as before, with the difference that our anchor now accurately attaches to our walls and gets loaded in exactly the same position when we load them from our device.

    そしてご覧の通り、以前と同じ機能が使えるようになった。違いは、アンカーが正確に壁に取り付けられるようになったことと、デバイスからロードするときにまったく同じ位置にロードされるようになったことだ。

  • I can't wait to see what you guys will build with this.

    君たちがこれで何を作るのか楽しみだ。

  • Alright guys, and that's it for this video.

    さて、今回のビデオはここまで。

  • I hope you learned a lot, and again, please take a second to like and subscribe to this channel.

    また、このチャンネルに「いいね!」とチャンネル登録をお願いします。

  • Subscribe to my Patreon if you want to get access to all the source code.

    すべてのソースコードにアクセスしたければ、私のパトロンに登録してください。

  • If you have any questions, feel free to join our growing XRDeveloper community on Discord.

    ご質問があれば、DiscordのXRDeveloperコミュニティにお気軽にご参加ください。

  • Thank you so much for watching, and see you in the next one.

    ご視聴ありがとうございました。

Hi XR developers!

XRの開発者の皆さん、こんにちは!

字幕と単語
AI 自動生成字幕

ワンタップで英和辞典検索 単語をクリックすると、意味が表示されます