RGBCamera を読み解いてみる

概要

TrackableImageEmulator を読み解いてみる - NOSIX に引き続き、 RGB Camera の使い方を理解するために、 サンプルとして提供されている RGBCamera (Scene) のソースコードを解読してみます。 個人的な読解結果であるため誤りが含まれている可能性があることをご了承ください。

目次

確認環境

  • NRSDK 1.2.1

解説

TrackableImageEmulator を読み解いてみる - NOSIX と同様に HierarchyScripts を網羅したいところですが、内容に重複する部分が多いため重複部分は省略します。

TrackableImageEmulator を読み解いてみる - NOSIX との差異は、大きく分けて 3 点あります。

  • NRInput (Component) で Override Camera Center を設定する
  • CanvasRaycastTarget (Component) で Canvas を Raycast Target に設定する
  • CameraCaptureController (Component) で NRRGBCamTexture を操作する

NRInput の Override Camera Center に CenterCamera を設定する変更は、コードを読む限りでは不要(なのではないかと思います【検証予定】)。 設定しない場合は MainCamera が使用されます。 RGBCamera (Scene) では CenterCamera が MainCamera になっています。

CanvasRaycastTarget は Raycast に関する設定なので、RGB Camera の使用に関係しているわけではない(と思います【検証予定】)。

RGB Camera の使用に関しては CameraCaptureController (Component) だけを理解すれば良い(と思われます)。 CameraCaptureController (Component) では NRRGBCamTexture を使っています。 NRRGBCamTexture は Texture の生成/破棄と NRRgbCamera の操作を行います。

Hierarchy

  • RGBCamera (Scene)
    • NRCameraRig (Perfab)
    • NRInput (Prefab)
    • TextureCanvas
      • [C] Canvas
      • [C] Canvas Scaler
      • [C] CanvasRaycastTarget
      • CaptureController
        • [C] CameraCaptureController
        • RawImage
          • [C] Raw Image
        • FrameCount
          • [C] Text
        • Controller
          • [C] Grid Layout Group
          • Play
            • [C] Image
            • [C] Button
            • Text
              • [C] Text
          • Pause
            • [C] Image
            • [C] Button
            • Text
              • [C] Text
          • Stop
            • [C] Image
            • [C] Button
            • Text
              • [C] Text
    • Directional Light : 上から差し込むライト
      • [C] Light

Scripts

NRInput の Scripts

  • NRInput (in Scripts/Input/Controller)
    • こちらを参照
    • Override Camera Center に CenterCamera が設定されている
      • None が設定されている場合は CameraCenter として Camera.main が使用される
      • Camera.main は MainCamera Tag が付与されている Camera なので、このサンプルでは None でも構わない(と思われる【未検証】)

TextureCanvas の Scripts

  • CanvasRaycastTarget (in Scripts/Input/EventSystem/CanvasRaycast)
    • Inspector での設定項目
      • Ignore Reversed Graphics : true
    • CanvasTargetController に Canvas を登録する
      • 実際に登録するのは ICanvasRaycastTarget として
      • ICanvasRaycastTarget は canvas, enabled, ignoreReversedGraphics を持つ
      • CanvasTargetController に設定された CanvasNRPointerRaycaster で Raycast(Ray ray, float distance, List<RaycastResult> raycastResults) を実行する際にRaycast 対象の Canvas として使用される
        • 但し、Enable Graphic Raycast が有効である必要がある
  • CameraCaptureController (in Demos/RGBCamera/Scripts)
    • Inspector での設定項目
      • Capture Image : RawImage (RawImage)
      • Frame Count : FrameCount (Text)
    • NRRGBCamTexture を使い画像を取り込む
      • GetTexture() で Texture を取得し、取得した Texture を RawImage に設定する
      • FrameCount でフレーム数を取得し、取得したフレーム数を FrameCount (Text) に設定する
      • Play() で取り込み開始
      • Pause() で取り込み停止
      • Stop() で取り込み終了
      • Stop() すると Texture が破棄されるので、Stop() 後に再度 Play() する場合は GetTexture() を再実行する必要がある
      • (Reference の更新まで手がまわっていないのか、Reference には記載がないクラス)