質問するログイン新規登録
C#

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

Unity3D

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

Q&A

解決済

2回答

559閲覧

unity のゲームタブのアスペクト比の変更をコードで行いたい。

GuielNo4

総合スコア88

C#

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

Unity3D

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

0グッド

0クリップ

投稿2024/02/12 12:24

編集2024/02/13 05:27

0

0

実現したいこと

Canvas オブジェクトを Screen Space - Overlay に設定しているので、
rect transform にある width と height は グレイアウト しているため Inspector では変更できません。
Screen Space - Overlay の設定 のまま、C# コードから rect transform にある width と height を変更する方法を探しております。

オブジェクトの親子は以下の通りにしております。
Main Camera(親) → Canvas(子)

発生している問題・分からないこと

Inspector ではグレイアウトしていますが、
ゲームタブのプルダウンメニュー内の画面サイズを変更することで、
Canvas オブジェクト の rect transform にある width と height を変更することができます。
このプルダウンメニューによる画面サイズの変更ができるのに、コードからはできません。

該当のソースコード

C#

1this.transform.parent.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2( Screen.currentResolution.width, Screen.currentResolution.height);

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

visual studio の ウォッチ では sizeDelta が指定の値に変わりますが、
Canvas オブジェクト の Inspector のグレイアウトしている width と height は指定の値にかわっていませんでした。
ゲームタブのプルダウンメニュー内の画面サイズの値のままでした。

補足

本件、解像度が異なるデバイスに対応するため、カメラ(perspective)、canvas それぞれをアプリ開始直後に
調整する方法を探しております。
canvas の rect の width と height は エディタで実行中にGameタブのプルダウンで解像度を変更できることを確認していますので、canvas は 「何かの設定」を参照して、値を決めているはずですので、canvas をインスタンス化する前に、その「何かの設定」を変更する方法を探しております。

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

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

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

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

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

guest

回答2

0

ベストアンサー

「Screen Space - Overlay」の状態は、スクリーン上に直接描画するという処理なので、「スクリーン(ゲーム解像度)のサイズ」=「キャンバスのサイズ」になります。

本件、解像度が異なるデバイスに対応するため、カメラ(perspective)、canvas それぞれをアプリ開始直後に
調整する方法を探しております。

これを見る限り、エディタ上でのデバッグのためだと思いますが、であれば、プログラムで変更するより、Gameビュー(ゲームタブ)の画面サイズを変える方がいいと思いますが、もしそれでもプログラムで変更したいのであれば、UnityEditor.PlayModeWindow.SetCustomRenderingResolution でできるそうです。
(自分は使ったことはありません)

cs

1#if UNITY_EDITOR 2 PlayModeWindow.SetCustomRenderingResolution(1920, 1080, "Full HD"); 3#endif

UnityEditor ネームスペース以下のクラスなので、エディタ以外は動かないようにするよう注意しましょう。

投稿2024/02/13 16:10

katsuko

総合スコア3601

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

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

GuielNo4

2024/02/16 06:34

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

0

UnityでCanvasのRectTransformのサイズをスクリプトから変更する場合、CanvasScalerを使用している場合は、Screen Space - Overlayの場合、画面のサイズが自動的に変更されるため、サイズを直接指定してもCanvasの表示サイズが変わらないことがあります。CanvasScalerは画面サイズに合わせてCanvasのサイズを調整するため、直接サイズを変更するよりも画面サイズを変更する方が効果的です。

using UnityEngine; using UnityEngine.UI; public class ChangeCanvasSize : MonoBehaviour { public CanvasScaler canvasScaler; void Start() { // 例えば、スクリーンの幅を半分にする場合 canvasScaler.referenceResolution = new Vector2(Screen.width / 2, Screen.height); } }

このスクリプトは、CanvasScalerのreferenceResolutionを変更してCanvasの表示サイズを制御します。ただし、これによって実際のウィンドウサイズは変わりませんが、Canvas内の要素はスケールされることに注意してください。
もしも直接Canvasのサイズを変更したい場合は、CanvasScalerを無効にするか、スクリプトでCanvasのRectTransformのサイズを変更する必要があります。ただし、これは一般的には推奨されないみたいなので気をつけてトライしてください

投稿2024/02/13 00:46

shoshinsha123

総合スコア215

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問