はじめに
「Unity Native Camera Plugin」を Unity プロジェクトに導入することで
iOS / Android でゲーム中にカメラを起動し、
撮影した写真や動画をゲーム内で使用できるようになります
使い方
この記事では Android における使用方法を紹介していきます
Unity の Player Settings から「Write Permission」を「External (SDCard)」に変更します
<provider android:name="com.yasirkula.unity.NativeCameraContentProvider" android:authorities="【Package Name】" android:exported="false" android:grantUriPermissions="true" />
「AndroidManifest.xml」の <application>...</application>
タグ内に
上記の記述を追加します(【Package Name】の部分はパッケージ名に変更)
using UnityEngine; using UnityEngine.UI; public class Example : MonoBehaviour { // シーンに配置してある RawImage public RawImage m_image; public int m_maxSize = 512; private void Update() { // 画面がタップされていない場合スキップ if ( !Input.GetMouseButtonDown( 0 ) ) return; // まだカメラにアクセスできない場合スキップ if ( NativeCamera.IsCameraBusy() ) return; // 最大 512 pixel のサイズで写真を撮影 NativeCamera.TakePicture( OnTake, m_maxSize ); } // 撮影後に呼び出される private void OnTake( string path ) { // 撮影されていない場合スキップ if ( string.IsNullOrEmpty( path ) ) return; // 撮影した写真のテクスチャ情報を取得 var texture = NativeCamera.LoadImageAtPath( path, m_maxSize ); // 取得したテクスチャをシーンの RawImage に設定 m_image.texture = texture; } }
あとは上記のようなスクリプトを作成して使用することで
ゲーム中にカメラを起動して、撮影された写真をテクスチャとして
ゲーム内に表示することができます
using UnityEngine; public class Example : MonoBehaviour { private void Update() { // 画面がタップされていない場合スキップ if ( !Input.GetMouseButtonDown( 0 ) ) return; // まだカメラにアクセスできない場合スキップ if ( NativeCamera.IsCameraBusy() ) return; // 動画を撮影 NativeCamera.RecordVideo( OnRecord ); } // 撮影後に呼び出される private void OnRecord( string path ) { // 撮影されていない場合スキップ if ( string.IsNullOrEmpty( path ) ) return; // 撮影された動画を再生 Handheld.PlayFullScreenMovie( "file://" + path ); } }
動画の撮影と再生は上記のようなスクリプトで実装できます