質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Android上でimageの保存が出来ない

yonn
yonn

総合スコア102

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

3回答

0評価

0クリップ

332閲覧

投稿2022/08/09 05:32

編集2022/08/11 12:48

前提

ツイッターで映像をツイートする機能を作っています。
カメラで映っている映像をResourceフォルダに保存したいと思います。
(その後別のスクリプトで呼び出します)

エディタ上ではうまくいのですが、Android上でパスが違うと表示され なぜかうまくいきません。

//
Error Unity DirectoryNotFoundException: Could not find a part of the path "/data/app/unity-------
//

実現したいこと

Androidの実機でも画像が保存出来るようになりたい。

発生している問題・エラーメッセージ

2022/08/09 14:03:39.596 31253 31273 Error Unity DirectoryNotFoundException: Could not find a part of the path "/data/app/unity.●●●.▼▼▼/base.apk/Resources/twpng.png". 2022/08/09 14:03:39.596 31253 31273 Error Unity at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00000] in <00000000000000000000000000000000>:0 2022/08/09 14:03:39.596 31253 31273 Error Unity at System.IO.File.Create (System.String path, System.Int32 bufferSize) [0x00000] in <00000000000000000000000000000000>:0 2022/08/09 14:03:39.596 31253 31273 Error Unity at System.IO.File.WriteAllBytes (System.String path, System.Byte[] bytes) [0x00000] in <00000000000000000000000000000000>:0 2022/08/09 14:03:39.596 31253 31273 Error Unity at Catch_画像_SC.Capture2 () [0x00000] in <00000000000000000000000000000000>:0 2022/08/09 14:03:39.596 31253 31273 Error Unity 2022/08/09 14:03:39.596 31253 31273 Error Unity (Filename: currently not available on il2cpp Line: -1)

該当のソースコード

c#

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using UnityEditor; using UnityEngine.UI; public class Catch_画像_SC : MonoBehaviour { public Camera sub_camera; //サブカメラの「ビューポート矩形」 0:0のまま   「クリアフラッグ」 深度のみにする int カメラの外枠_横 = 1920; int カメラの外枠_たて = 1080; void Start() { Capture1_保存(); } public void Capture1_保存() { Invoke("Capture2", 0.0001f);//0.0001f 秒後に次の問題表示 } public void Capture2() { var size = new Vector2Int(カメラの外枠_横, カメラの外枠_たて); //*サイズを設定 var render = new RenderTexture(size.x, size.y, 24); var texture = new Texture2D(size.x, size.y, TextureFormat.RGB24, false); try { sub_camera.targetTexture = render;  // カメラ画像を RenderTexture に描画 sub_camera.Render(); RenderTexture.active = render;     // RenderTexture の画像を読み取る texture.ReadPixels(new Rect(0, 0, size.x * 1f, size.y * 1f), 0, 0); texture.Apply(); } finally { sub_camera.targetTexture = null; RenderTexture.active = null; } // PNG 画像としてファイル保存 File.WriteAllBytes( $"{Application.dataPath}/Resources/twpng.png", texture.EncodeToPNG()); } }

試したこと

「.png」をつけたり外したり日本語スクリプトを変更してみたりしましたがうまくいかなかったです。

そもそもRecouceフォルダにAndroid上から保存できるかも疑問です。

またRecouceフォルダに保存出来ないならゲームの記録などの画像はどうやってツイート出来るのだろうなど考えておりました。

どのようなアプローチで進めれば良いかわからず困っております。
ご存知の方何卒ヒントなど頂けませんでしょうか?

補足情報(FW/ツールのバージョンなど)

Unity 2019.4.31f1
Windows
Windows10
プラットフォーム: Android
プラットフォーム: Android7.1


最終的な解決

c#

// PNG 画像としてファイル保存 // File.WriteAllBytes( // $"{Application.dataPath}/Resources/twpng.png", texture.EncodeToPNG()); File.WriteAllBytes( $"{Application.persistentDataPath}/twpng.png", texture.EncodeToPNG());

最終的な解決の確認
下記コードでAndroid上でツイートができたのでこれでスマホに保存されていた事が証明されました。

Android上での保存と呼び出しの両方が初めてだったので完了の確認が遅くなり申し訳ありませんでした。

下記は保存ではなく画像を呼び出してツイートを行っています。

皆さんの回答それぞれについていろいろ試させて頂きました。
本当にありがとうございます。

c#

//Unity Asset 「VoxelBusters.EssentialKitを使用」 public void Twitter_Go() { Debug.Log("===  Twi ツイート開始"); #if UNITY_ANDROID string path = $"{Application.persistentDataPath}/twpng.png"; byte[] bytes = File.ReadAllBytes(path); Texture2D texture = new Texture2D(2, 2); texture.LoadImage(bytes); #elif UNITY_IOS #else Texture2D texture = Resources.Load<Texture2D>("twpng"); // エディター用 「 .png 」をつけるとエラー #endif ShareSheet shareSheet = ShareSheet.CreateInstance(); shareSheet.AddImage(texture); //画像追加 shareSheet.AddText("テスト"); //文章 shareSheet.AddURL(URLString.URLWithPath("https://www.google.co.jp/")); //URL shareSheet.SetCompletionCallback((result, error) => { Debug.Log("Share Sheet was closed. Result code: " + result.ResultCode); }); shareSheet.Show(); }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

slemntqe

2022/08/09 05:39

Windowsと書かれていますが開発環境がWindowsである事をわかりやすく書くべきです。また、WindowsのバージョンやAndroidのバージョン情報も明示して下さい。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。