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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

2118閲覧

Unity 端末のアスペクト比に関わらず固定のサイズでスクリーンショットを撮影したい

Jejeje

総合スコア38

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/09/12 08:51

編集2021/09/12 09:03

該当のソースコード

C#

1public Image image; 2IEnumerator CaptureScreenshot() 3 { 4 int w = Screen.width; 5 int h = Screen.height; 6 Texture2D texture = new Texture2D(w, h, TextureFormat.RGB24, true); 7 yield return new WaitForEndOfFrame(); 8 texture.ReadPixels(new Rect(0, 0, w, h), 0, 0); 9 texture.Apply(); 10 image.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f)); 11 }

やりたいこと

Unityで端末のアスペクト比に関わらず一定のサイズでスクリーンショットが撮りたいです。
撮影したら 固定のサイズ(例えば横幅1280,高さ720とか)のImageに貼り付けます。
そこでどのアスペクト比の端末から撮影しても綺麗にその1280:720のImageに貼り付けたいです。

**Texture2D.ReadPixels()を使用し、画面全体のスクリーンショットを撮ってSprite.Create()**でSpriteに変換すること自体は既にできているのですが、このやり方だと端末のアスペクト比によって画像のサイズが変わってしまいます。
そのため撮影した後Imageに貼り付けるとき,Imageと同じアスペクト比の端末で撮影したものであれば問題ないのですが,異なるアスペクト比の端末で撮影したものを貼り付けると画像が潰れてしまいます。
(例えばiPadなど正方形よりのアスペクト比の端末でスクショしたものを16:9のImageに貼り付けるとすごい潰れてしまうと思います)

最初は**Texture2D.ReadPixels()**でサイズを指定できるのだと思っていましたが、基準点が左下になっているため、うまくいきませんでした。

なので画面中央でスクリーンショットを撮影する方法があれば教えて欲しいです。よろしくお願いします;;
※画像を撮影して、その後画像をトリミングするといった方法でも行けそうなのでこっちでも大丈夫です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

画面とは違うサイズでスクリーンショットを取る、のではなく、スクリーンショットをとった画像ファイルを、希望のサイズにリサイズする、というのでないと無理だと思いますが。

投稿2021/09/12 08:56

y_waiwai

総合スコア88042

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

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

Jejeje

2021/09/12 09:01

確かにその方法もありましたね。完全に抜けてました。 それで実際にそれは可能なのでしょうか?それと画像をそのまま小さくするというより指定したアスペクト比にトリミングするという方が理想なのですが。。
y_waiwai

2021/09/12 09:09

スクリーンショットというのは、画面をそのまま画像ファイルにする、という機能です まずはそれを理解しましょう #そりゃ、あなたのコードでその希望のサイズで画面を描画し直すとかの処理を組む、とかなら不可能ではないと思いますが。
Jejeje

2021/09/13 05:36

画面を撮影してそれをSpriteに変換するというのを分かりやすくするためにスクリーンショットという言葉を使いました。語弊を生んでしまって申し訳ありません。 不可能ではないということでしたら是非方法を教えていただきたいのですが可能でしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問