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

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

新規登録して質問してみよう
ただいま回答率
85.83%
Unity

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

Q&A

解決済

メインカメラではないサブカメラに映るものを保存したい。

yonn
yonn

総合スコア119

Unity

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

2回答

0グッド

0クリップ

485閲覧

投稿2022/07/25 12:28

前提

Unityでアプリを作成しております。
ツイッターの機能をつけようと思っています。

何かを達成すれば用意していた画像に日づけが入りの画面が立ち上がるようにしたいです。

メインカメラとは別のサブカメラで撮影してResourcesフォルダに保存してからツイート出来るようにしたいのです。

下記スクリプトですとメインカメラでの画像を保存してしまいます。

Camera.currentを利用するのかなどいろいろ試したのですがゲームの外のカメラの扱いが調べてもわかりませんでした。

初歩的な質問とは思うのですがどのように対処すれば良いのかわからず困っております。

下記のコードですとメインカメラの青い映像が保存されます。

どなたかアドバイスなど頂けませんでしょうか?

実現したいこと

サブカメラで映るものを保存したい。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO; 5using UnityEditor; 6using UnityEngine.UI; 7 8public class Button_1_画面取得_SC : MonoBehaviour 9{ 10 11 12 void Start() 13 { 14 Capture2(); 15 } 16 17 public void Capture2() 18 { 19 20 //*サイズを設定 21 var size = new Vector2Int((int)Handles.GetMainGameViewSize().x, (int)Handles.GetMainGameViewSize().y); 22 var render = new RenderTexture(size.x, size.y, 24); 23 24 var texture = new Texture2D(size.x, size.y, TextureFormat.RGB24, false); 25 26 var cemara = Camera.main; 27 //var cemara = Camera.currentl;  ? 28 29 30 try 31 { 32 // カメラ画像を RenderTexture に描画 33 cemara.targetTexture = render; 34 cemara.Render(); 35 36 // RenderTexture の画像を読み取る 37 RenderTexture.active = render; 38 texture.ReadPixels(new Rect(0, 0, size.x, size.y), 0, 0); 39 texture.Apply(); 40 } 41 finally 42 { 43 cemara.targetTexture = null; 44 RenderTexture.active = null; 45 } 46 47 // PNG 画像としてファイル保存             // ファイルに保存 48 File.WriteAllBytes( 49 $"{Application.dataPath}/Resources/画像1.png", texture.EncodeToPNG()); 50 51 } 52}

メインカメラ
イメージ説明


サブカメラ
イメージ説明

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

Unity2019.4.31f1

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

ベストアンサー

Cameraも1つのコンポーネントなので、他と同じように、public変数を定義してそれをインスペクターから設定したり、GetComponentなどで取得するなりすればよいです。

投稿2022/07/25 12:39

fiveHundred

総合スコア9227

yonn👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

下記変更でうまくいきました。
長い間やっていましたが質問して良かったです。
とても嬉しいです。

もし試す方いらっしゃいましたらサブカメラの深度の調節を-1にしたらうまくいきました。

C#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using System.IO; 6using UnityEditor; 7using UnityEngine.UI; 8 9public class Button_1_画面取得_SC : MonoBehaviour 10{ 11 public Camera sub_camera; 12 13 void Start() 14 { 15 Capture2(); 16 } 17 18 public void Capture2() 19 { 20 21 //*サイズを設定 22 var size = new Vector2Int((int)Handles.GetMainGameViewSize().x, (int)Handles.GetMainGameViewSize().y); 23 var render = new RenderTexture(size.x, size.y, 24); 24 25 var texture = new Texture2D(size.x, size.y, TextureFormat.RGB24, false); 26 27 //var cemara = Camera.main; 28 //var cemara = Camera.currentl; 29 30 31 try 32 { 33 // カメラ画像を RenderTexture に描画 34 //cemara.targetTexture = render; 35 //cemara.Render(); 36 37 sub_camera.targetTexture = render; 38 sub_camera.Render(); 39 40 41 42 // RenderTexture の画像を読み取る 43 RenderTexture.active = render; 44 texture.ReadPixels(new Rect(0, 0, size.x, size.y), 0, 0); 45 texture.Apply(); 46 } 47 finally 48 { 49 //cemara.targetTexture = null; 50 sub_camera.targetTexture = null; 51 52 RenderTexture.active = null; 53 } 54 55 // PNG 画像としてファイル保存             // ファイルに保存 56 File.WriteAllBytes( 57 $"{Application.dataPath}/Resources/画像1.png", texture.EncodeToPNG()); 58 59 } 60}

投稿2022/07/25 13:46

yonn

総合スコア119

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.83%

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

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

質問する

関連した質問

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

Unity

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