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

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

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

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

Android

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1936閲覧

Android端末内のファイルパスを取り出す方法(Unity)

namitsuki

総合スコア1

C#

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

Android

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/09 06:08

編集2020/06/09 11:38

前提・実現したいこと

AndroidでUnityのアセット、SocialConnectorを利用して画像ツイートをしようと考えてます。
SocialConnectorのサンプルには画像をスクショしてツイートしていますが(これはできました)、アセットファイル内にあらかじめ画像を置いてそれをツイートをしたいです。

SocialConnectorは画像パスを引数にするようなので、やることはhttps://teratail.com/questions/94495とほぼ同じだと思いAssets/StreamingAssets以下に画像ファイルを置いてそのパスを読み取れば出来ると思いましたが、Androidで読み取りができません。

試したこと

よくわかっていないのですが、AndroidはWWWを使ってロードしろと上の質問の解答に書いてあり、WWWは古いようなので、https://qiita.com/k7a/items/df6dd8ea66cbc5a1e21dなどを参考にしてUnityWebRequest等で試しました。

public void TweetButton() { StartCoroutine("Tweet"); } IEnumerator Tweet() { string path = System.IO.Path.Combine(Application.streamingAssetsPath, "twitter.png"); UnityWebRequest request = UnityWebRequest.Get(path); yield return request.SendWebRequest(); string text = request.downloadHandler.text; SocialConnector.Share("test", "url", text); }

上の方法ではUnity上ではエラーは出ず、Android上ではツイートはできるのですが画像が出力されません。"test"の場所をtextにしてtext内に何が入っているのか確認しましたが、何も表示されませんでした。

他にもWWWや普通にロード(上のstring pathを直接引数にして)など色々やってみましたがだめでした。

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

Unity2019.3.15f1でためしてます
SocialConnector:https://github.com/anchan828/social-connector

Unityのパスの仕組みや読み書きについて全く分かっていないと思います。それについて出来れば分かりやすく書かれた本やブログなどあればそれも教えて下さい。よろしくお願いします。

追記

回答者様のアドバイス等を入れて、上のコルーチンの部分を以下のように直しました。

    IEnumerator Tweet(){ string image = "image.png"; string streamingPath = Path.Combine(Application.streamingAssetsPath,image); UnityWebRequest request = UnityWebRequest.Get(streamingPath); yield return request; string persistentPath = Path.Combine(Application.persistentDataPath, image); File.WriteAllBytes(persistentPath, request.downloadHandler.data); SocialConnector.Share("test", "url", persistentPath); }

どうもStreamingAssets内のファイルは読み込み出来ないようなので、persistentDataPathに画像データをコピーしてから読み込むようにしようとしましたが、まだ画像が表示されないです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらを見る限り、SocialConnector.Shareに指定するのは画像のパスです。
なので、一度取得した画像をApplication.persistentDataPathなどに保存し、そのパスを指定することになります。

また、request.downloadHandler.textで画像を取得しようとしているようですが、画像ファイルはテキストファイルではないため、request.downloadHandler.textでstring型で取得しようとしていること自体、おかしいです。
動作未確認ですが、request.downloadHandler.dataを使うべきなのではないでしょうか。

投稿2020/06/09 06:28

fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namitsuki

2020/06/09 11:46

ご回答ありがとうございます!おっしゃる通り型を直してdownloadHander.dataを使ってみましたまだできません。ここにはコメントしか打てないようなので質問に追記しました。もしよければもう少しアドバイスいただけないでしょうか?
fiveHundred

2020/06/09 11:58

「yield return request;」は「yield return request.SendWebRequest();」ではないでしょうか。
namitsuki

2020/06/09 13:19

出来ました!アドバイス本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問