~~NOTOC~~
====== ExportPhotographyCamera(カメラAPI) ======
このページは過去の情報となります。\\
新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。
VCI 上で各種カメラを管理するクラスです。
* VCI 上に写真撮影用カメラを作成することができます。
* **写真撮影時、ルームのキャプチャーカメラと同じように撮影結果を画像として保存します**。
* 一つの VCI 上に作成できる写真撮影用カメラの台数には**上限があります**。
* 現在の上限は**1台**
* **UniVCI v0.33.0** 以降で Export される VCI で使用できます。
* **バーチャルキャスト 2.1.3c** 以降で動作します。
* 現在、この API は**ルーム上でのみ動作します**。
UniVCI v0.33.0 パッケージ内の ''Assets/VCI-Official-Samples/CameraApiSample'' 以下にサンプル VCI が同梱されてますので、合わせてご確認ください。
^ ExportCameraSystem ^^^
^ 名前 ^ 説明 ^ バージョン ^
| [[vci:script:reference:exportphotographycamera#CreatePhotographyCamera| CreatePhotographyCamera]] | VCI 上にカメラを作成 | |
^ ExportPhotographyCamera ^^^
^ 名前 ^ 説明 ^ バージョン ^
| [[vci:script:reference:exportphotographycamera#GetCameraPreviewTextureId| GetCameraPreviewTextureId]] | プレビュー用のテクスチャの ID を取得 | |
| [[vci:script:reference:exportphotographycamera#GetAspectRatio| GetAspectRatio]] | プレビューと写真のテクスチャのアスペクト比を取得| |
| [[vci:script:reference:exportphotographycamera#TakePhotograph| TakePhotograph]] | 写真を撮影 | |
| [[vci:script:reference:exportphotographycamera#SetOnTakePhotoCallback| SetOnTakePhotoCallback]] | 撮影時に実行されるコールバック関数を登録 | |
|[[vci:script:reference:exportphotographycamera#GetVerticalFieldOfView| GetVerticalFieldOfView]] | 垂直 FOV を取得| |
|[[vci:script:reference:exportphotographycamera#SetVerticalFieldOfView| SetVerticalFieldOfView]] | 垂直 FOV を設定| |
|[[vci:script:reference:exportphotographycamera#GetNearClipPlane| GetNearClipPlane]] | Near Clip Plane までの距離を取得| |
|[[vci:script:reference:exportphotographycamera#SetNearClipPlane| SetNearClipPlane]] | Near Clip Plane までの距離を設定| |
|[[vci:script:reference:exportphotographycamera#ReleaseCamera| ReleaseCamera]] | カメラを破棄| |
===== CreatePhotographyCamera =====
ExportCameraSystem.** CreatePhotographyCamera fun(followTransform: ExportTransform): ExportPhotographyCamera**
VCI 上に写真撮影用カメラを生成します。\\
生成された写真撮影用カメラの位置や向きは、**引数に渡した [[https://developer.virtualcast.jp/vci-docs/api/classes/ExportTransform/index.html|ExportTransform]] に追従します**。\\
非同期で生成されるため、全員に表示させる場合は、初期化やメッセージ受信時などにカメラ作成する必要があります。
=== 引数 ===
''followTransform'': ExportTransform
* 生成されるカメラを追従させる Transform
=== 返り値 ===
''[[https://developer.virtualcast.jp/vci-docs/api/classes/ExportPhotographyCamera/index.html|ExportPhotographyCamera]]''
* 生成された写真撮影用カメラ
''nil''
* **生成可能な写真撮影用カメラの台数上限を超え、カメラの生成に失敗した時**に ExportPhotographyCamera の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラの位置姿勢を追従させるべき GameObject の Transform を取得
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
-- 写真撮影用カメラを生成する
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- 以後、変数 camera を通して写真撮影用カメラを操作できるようになる
===== GetCameraPreviewTextureId =====
ExportPhotographyCamera.** GetCameraPreviewTextureId fun(): string**
写真撮影用カメラの**プレビュー用のテクスチャ ID** を取得します。
* この ID は、 [[vci/script/reference/exportassets/material#SetTexture | ExportMaterial.SetTexture]] に渡すことで使用します。
* プレビューのテクスチャに表示される映像のフレームレート・画質は、**ルーム上に存在する他カメラ(他 VCI 上に生成された写真撮影用カメラ、フォトキャプチャーカメラ)が多いほど低下します**。
=== 引数 ===
なし
=== 返り値 ===
''string''
* プレビューテクスチャのテクスチャ ID
''nil''
* ''ExportPhotographyCamera'' が破棄済みであった場合、string の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラのプレビューを表示する
-- 写真撮影用カメラを生成
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- プレビューを表示すべき GameObject に、"Display" という名前のマテリアルが割り当てられているとする
local previewMaterialName = "Display"
-- 写真撮影用カメラのプレビューのテクスチャを示すIDを取得
local previewTextureId = camera.GetCameraPreviewTextureId()
-- ID を渡し、プレビューを表示する
vci.assets.material.SetTexture(previewMaterialName, previewTextureId)
===== GetAspectRatio =====
ExportPhotographyCamera.** GetAspectRatio fun(): number**
写真撮影用カメラのプレビューと写真のテクスチャのアスペクト比(横幅を縦幅で割った値)を取得します。\\
現状、すべての写真撮影用カメラのプレビュー/写真テクスチャのアスペクト比は **16:9 固定** です。
=== 引数 ===
なし
=== 返り値 ===
''number''
* 写真撮影用カメラのプレビューと写真のテクスチャのアスペクト比
''nil''
* ''ExportPhotographyCamera'' が破棄済みであった場合、number の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラのアスペクト比を取得する
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- アスペクト比を取得
local aspectRatio = camera.GetAspectRatio()
-- アスペクト比を VCI コンソールに表示
-- * 現在、アスペクト比は 16:9 で固定
-- * そのため 16/9 -> 1.777777... が表示される
print(aspectRatio)
===== TakePhotograph =====
ExportPhotographyCamera.** TakePhotograph fun(): bool**
写真を撮影します。\\
* ローカルマシンの負荷によっては即座に撮影されない場合があります。
* [[vci:script:reference:exportphotographycamera#SetOnTakePhotoCallback| ExportPhotographyCamera.SetOnTakePhotoCallback]] によって対象のカメラにコールバック関数が紐づけられている場合、写真撮影時にその関数が実行されます。
* 撮影した写真は、**''TakePhotograph'' が実行されたユーザーの環境上で画像として保存されます**。
* **画像の保存場所、ファイル名、ファイルフォーマット**は**フォトキャプチャーカメラによって撮影した場合と同じものになります**。
* **撮影した写真の解像度**は、**フォトキャプチャーカメラの解像度設定に準拠します**。
* **写真撮影後の0.5秒の間は、再度写真撮影を行うことができません。**
=== 引数 ===
なし
=== 返り値 ===
''bool''
* 写真撮影の成否
* 撮影後 0.5 秒以内に再度 ''TakePhotograph'' を実行した場合、写真撮影は行われず false が返されます。
* それ以外は、写真撮影が実行され true が返されます。
''nil''
* ''ExportPhotographyCamera'' が破棄済みであった場合、bool の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラで写真を撮影する
-- Use すると撮影が実行される "CameraButton" という SubItem があるとする
local cameraButtonName = "CameraButton"
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- "CameraButton" が Use されたら写真を撮影する
-- * SetOnTakePhotograph でコールバック関数がセットされていた場合、撮影成功時にその関数が実行される
function onUse(item)
if item == cameraButtonName then
camera.TakePhotograph()
end
end
===== SetOnTakePhotoCallback =====
ExportPhotographyCamera.** SetOnTakePhotoCallback fun()**
写真撮影時に実行されるコールバック関数を登録します。
=== 引数 ===
''callback'': fun(table photoMetadata)
* コールバックとして登録する関数
* ''photoMetadata''は、撮影された写真に関する以下の情報を持ちます。
* ''photoMetadata.textureId'': 撮影した写真のテクスチャ ID
* **撮影結果のテクスチャは、5秒後に無効化(テクスチャが真っ黒になる)されます**。
* 関数以外を渡した場合、コンソールにエラーメッセージを出力します。
=== 返り値 ===
なし
=== サンプル ===
-- 写真撮影時に実行されるコールバック関数をセットする
-- 撮影結果を表示すべき GameObject に "Photo" というマテリアルが割り当てられているとする
local photoMaterialName = "Photo"
-- 写真撮影時に実行されるコールバック関数を定義
function onTakePhotoCallback(photoMetadata)
-- photoMetadata テーブルから、撮影結果のテクスチャを示す ID を取得
local photoTextureId = photoMetadata.textureId
-- ID を渡して、撮影結果を表示する
vci.assets.material.SetTexture(photoMaterialName, photoTextureId)
end
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- コールバック関数をセットする
-- * 以後、ExportPhotographyCamera.TakePhotograph が実行されるたび onTakePhotoCallback が実行されるようになる
camera.SetOnTakePhotoCallback(onTakePhotoCallback)
===== GetVerticalFieldOfView =====
ExportPhotographyCamera.** GetVerticalFieldOfView fun(): number**
写真撮影用カメラの垂直 FOV を取得します。
* 単位は **degrees**
* デフォルトの値は **30**
=== 引数 ===
なし
=== 返り値 ===
''number''
* 写真撮影用カメラの垂直 FOV
''nil''
* ''ExportPhotographyCamera'' が破棄済みであった場合、number の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラの垂直 FOV 取得
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- 垂直 FOV を取得
local currentFov = camera.GetVerticalFieldOfView()
-- VCIコンソールにFOVの値が表示される
-- * デフォルト値は30
print(currentFov)
===== SetVerticalFieldOfView =====
ExportPhotographyCamera.** SetVerticalFieldOfView fun(value: number)**
写真撮影用カメラの垂直 FOV を設定します。
* 単位は **degrees**
=== 引数 ===
''value'': number
* 設定する垂直 FOV の値
* 設定可能な値の範囲は **1e-05 ~ 179** です。
* 範囲外の値を渡した場合、その値は範囲内に clamp されます。
=== 返り値 ===
なし
=== サンプル ===
-- 写真撮影用カメラの垂直 FOV を設定
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- 垂直 FOV を 60 に設定
camera.SetVerticalFieldOfView(60)
local currentFov = camera.GetVerticalFieldOfView()
-- VCIコンソールに 60 と表示される
print(currentFov)
===== GetNearClipPlane =====
ExportPhotographyCamera.** GetNearClipPlane fun(): number**
写真撮影用カメラの Near Clip Plane までの距離を取得します。
* 単位は **world units**(バーチャルキャストでは**メートル**)
* デフォルトの値は **0.01**
=== 引数 ===
なし
=== 返り値 ===
''number''
* 写真撮影用カメラの Near Clip Plane までの距離
''nil''
* ''ExportPhotographyCamera'' が破棄済みであった場合、number の代わりに nil を返します。
=== サンプル ===
-- 写真撮影用カメラの Near Clip Plane までの距離を取得
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- Near Clip Plane までの距離を取得
local currentNearClip = camera.GetNearClipPlane()
-- VCI コンソールに Near Clip Plane までの距離が表示される
-- * デフォルトは 0.01
print(currentNearClip)
===== SetNearClipPlane =====
ExportPhotographyCamera.** SetNearClipPlane fun(value: number)**
写真撮影用カメラの Near Clip Plane までの距離を設定します。
* 単位は **world units**(バーチャルキャストでは**メートル**)
=== 引数 ===
''value'': number
* 設定する Near Clip Plane までの距離の値
* 設定可能な値の範囲は **0.01 ~ 100** です。
* 範囲外の値を渡した場合、その値は範囲内に clamp されます。
=== 返り値 ===
なし
=== サンプル ===
-- 写真撮影用カメラの Near Clip Plane までの距離を設定
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
-- Near Clip Plane までの距離を 10 に設定
camera.SetNearClipPlane(10)
local currentNearClipPlane = camera.GetNearClipPlane()
-- VCI コンソールに 10 と表示される
print(currentNearClipPlane)
===== ReleaseCamera =====
ExportPhotographyCamera.** ReleaseCamera fun()**
* 写真撮影用カメラを破棄します。
* 破棄したカメラは、以後操作することができなくなります。
=== 引数 ===
なし
=== 返り値 ===
なし
=== サンプル ===
-- 写真撮影用カメラの破棄
-- 写真撮影用カメラを生成する
local cameraAnchor = vci.assets.GetTransform("CameraAnchor")
local camera = vci.cameraSystem.CreatePhotographyCamera(cameraAnchor)
--
-- この間、写真撮影用カメラを操作可能
--
-- 写真撮影用カメラを破棄する
camera.ReleaseCamera()
-- 以後、該当の写真撮影用カメラを操作することができない