Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MobileCameraShare
スマホ(iOS / Android)のカメラで撮影し、プレビュー(ポラロイド風の白縁つき)→ 端末への保存 / ネイティブ共有までを行う Unity サンプルプロジェクトです。
書籍 「Unityで神になる本」 のサンプルとして公開しています。本を購入してくださった方は、MIT ライセンスの範囲で自由に使ってください。
動作環境
- Unity 6000.3.17f1(Unity 6.3)
- iOS / Android 実機(カメラ・写真ライブラリを使うため、実機での確認が必要です)
主な機能
WebCamTextureによるカメラプレビュー(前面 / 背面、向き・ミラー補正つき)- シャッターで画面をキャプチャ
- 撮影画像をプレビュー表示(昔のプリント風に白縁を合成。
Frame.pngの 9 スライスで縁幅を一定に保ったまま撮影アスペクト比に追従) - 保存:端末の写真フォルダ(iOS=カメラロール / Android=Pictures)へ保存
- 共有:OS のネイティブ共有シート(iOS=UIActivityViewController / Android=ACTION_SEND)
- iOS は共有シートを事前生成して初回表示の待ちを軽減
構成
| 場所 | 役割 |
|---|---|
Assets/Scripts/MobileCameraStarter.cs |
カメラ起動・権限・キャプチャ・プレビュー呼び出し |
Assets/Scripts/CanvasPreview.cs |
プレビューダイアログ(枠の合成・保存/共有ボタン) |
Assets/Scripts/NativeShareBridge.cs |
ネイティブ共有 / ギャラリー保存の C# 窓口 |
Assets/Plugins/iOS/NativeShareBridge.mm |
iOS ネイティブ実装 |
Assets/Plugins/Android/.../NativeShareBridge.java ほか |
Android ネイティブ実装(FileProvider 含む) |
Assets/Editor/NativeSharePostProcessBuild.cs |
iOS ビルド後に写真追加の用途説明を Info.plist へ自動付与 |
Assets/Editor/NativeSharePackageNameGuard.cs |
Android ビルド前にパッケージ名の設定漏れを検出 |
⚠️ Android でビルドする前に(重要)
ネイティブ共有のために、仮の Java パッケージ名 jp.yourname.unity.nativeshare を使っています。そのままだと Android ビルド時にガードが働いてビルドが止まります(NativeSharePackageNameGuard)。次の2つを自分用に設定してください。
-
アプリの Package Name Project Settings > Player > Android > Other Settings > Identification > Package Name 例:
jp.example.cameraapp -
NativeShare の Java パッケージ名(
jp.yourname.unity.nativeshareを自分のものへ)Assets/Plugins/Android/jp/yourname/unity/nativeshare/フォルダ名NativeShareBridge.java/NativeShareFileProvider.javaのpackage行AndroidManifest.xmlのprovider android:nameNativeShareBridge.csのAndroidJavaClass("jp.yourname.unity.nativeshare.NativeShareBridge")の文字列
アプリの Package Name と NativeShare の Java パッケージ名は、同じである必要はありません。
AndroidManifest.xml は Application Entry = GameActivity 前提です。Player Settings で Activity 方式に変えた場合は、マニフェストの起動アクティビティを com.unity3d.player.UnityPlayerActivity / テーマ @style/UnityThemeSelector に変更してください。
iOS について
- 写真保存に必要な
NSPhotoLibraryAddUsageDescriptionは、ビルド後処理(NativeSharePostProcessBuild.cs)で Info.plist に自動追加されます。文言を変えたい場合はそのスクリプトを編集してください。 - カメラ用途の説明(
NSCameraUsageDescription)は Player Settings の「Camera Usage Description」で設定してください。 - iOS は
jp.yourname.unity.nativeshareを実際には使いませんが、テンプレートの仮名のまま残っていると**ビルド時に警告(非ブロック)**でリネームを促します(NativeSharePackageNameGuard)。Android はビルドを停止します。
ライセンス
MIT License。正式版は英語の LICENSE です。 日本語の参考訳を LICENSE.ja に併記しています(法的効力は英語版が優先)。