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

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

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

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Unity

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

Q&A

解決済

1回答

1731閲覧

Unityをビルドして画面サイズを固定するも、他の人のPCで起動するとUIがずれてしまう。

GReBan

総合スコア5

C#

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Unity

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

0グッド

0クリップ

投稿2021/09/16 09:46

###実現したいこと
どのPCで起動をしても、UIがずれないようにしたい。
下記の参考ページを参考にして修正をしたものの、自分のPC2台ではズレはなく、一部の人のPCでは特定のUIのみがずれてしまい、ゲームの進行が不可能になってしまいます。

###参考にしたページ
https://www.yayoibloglife.work/entry/2020/02/14/003959
https://hakase0274.hatenablog.com/entry/2019/04/06/223940
https://unity-beginners-blog.unity3d.jp/2017/08/25/canvasscaler/

###詳細・現状
イメージ説明
上の画像の黄色いUIのみが、画像にある初期位置からずれたり、左右キーを押しても予期しない距離を移動したりしてしまいます。

イメージ説明
修正したのは2枚目の写真のCanvasの設定なのですが、以前、私の先輩から「UIがずれているから1920×1080のサイズに固定した方がいいね」と言われたので設定を修正して1920×1080のサイズに固定したのですが、変わらず1部の人はずれたままでした。

この方法だと固定はできていないということなのでしょうか?それとも相手側のPCの問題もあるのでしょうか?違う方法があれば教えていただけますでしょうか?

###関連しているプログラム
黄色いUIについているプログラムです。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ChooseArea : MonoBehaviour 6{ 7 //ADX設定 8 public CriAtomSource KeyboardSlotLRSrc; 9 10 private float minX = 1200; 11 private float maxX = 1650; 12 13 // Start is called before the first frame update 14 void Start() 15 { 16 17 } 18 19 // Update is called once per frame 20 void Update() 21 { 22 if(Input.GetKeyDown(KeyCode.LeftArrow)) 23 { 24 transform.Translate(-150, 0, 0); 25 26 //音鳴らす 27 KeyboardSlotLRSrc.Play(); 28 } 29 30 if (Input.GetKeyDown(KeyCode.RightArrow)) 31 { 32 transform.Translate(150, 0, 0); 33 34 //音鳴らす 35 KeyboardSlotLRSrc.Play(); 36 } 37 38 if (transform.position.x < minX) 39 { 40 Vector3 temp = transform.position; 41 temp.x = minX; 42 transform.position = temp; 43 } 44 if (transform.position.x > maxX) 45 { 46 Vector3 temp = transform.position; 47 temp.x = maxX; 48 transform.position = temp; 49 } 50 } 51}

Unityバージョン

2019.4.14f1

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

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

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

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

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

bboydaisuke

2021/09/16 10:49

その人のPCの設定を聞いたらいいんじゃないでしょうか。画面解像度はいくつなのか、スケールは何%なのか。 そしてその「ずれている」画面のスクリーンショットももらった方がいいでしょう。
GReBan

2021/09/16 10:53

コメントありがとうございます。 スクショ等はとってはいないのですが、UI自体が左側にずれているというのは画面共有などで確認はできています。 ここからは個人的なものなのですが、相手が先生?教授?ということもあり、聞きにくいという問題点もあります…
guest

回答1

0

ベストアンサー

確かにCanvas Scalerを使うことでキャンバス上のUIは1920×1080でレイアウトできるでしょうが、今回のケースでは移動部分でワールド座標が絡んできますから、キャンバス空間とワールド空間のスケールの食い違いが影響してくるんじゃないかと思います。
以前「Unity Gameの解像度を変えると、DOTweenの移動距離が変わってしまう原因が分かりません」とのご質問を見かけたことがあるのですが、あちらの方と似たような状況になっているのかもしれません。

スクリプトを下記のようにしてみるとどうでしょうか?

lang

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ChooseArea : MonoBehaviour 7{ 8 //ADX設定 9 public CriAtomSource KeyboardSlotLRSrc; 10 11 private float minX = 1200; 12 private float maxX = 1650; 13 14 private float canvasScale; 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 CanvasScaler canvasScaler = GetComponentInParent<CanvasScaler>(); 20 21 // キャンバスのスケールを取得しておく 22 canvasScale = canvasScaler != null ? canvasScaler.transform.localScale.x : 1.0f; 23 } 24 25 // Update is called once per frame 26 void Update() 27 { 28 // Translateの移動量やminX、maxXにcanvasScaleをかけることで 29 // キャンバス空間とワールド空間のスケールの違いを吸収する 30 31 if(Input.GetKeyDown(KeyCode.LeftArrow)) 32 { 33 transform.Translate(-150 * canvasScale, 0, 0); 34 35 //音鳴らす 36 KeyboardSlotLRSrc.Play(); 37 } 38 39 if (Input.GetKeyDown(KeyCode.RightArrow)) 40 { 41 transform.Translate(150 * canvasScale, 0, 0); 42 43 //音鳴らす 44 KeyboardSlotLRSrc.Play(); 45 } 46 47 if (transform.position.x < minX * canvasScale) 48 { 49 Vector3 temp = transform.position; 50 temp.x = minX * canvasScale; 51 transform.position = temp; 52 } 53 if (transform.position.x > maxX * canvasScale) 54 { 55 Vector3 temp = transform.position; 56 temp.x = maxX * canvasScale; 57 transform.position = temp; 58 } 59 } 60}

投稿2021/09/16 21:24

Bongo

総合スコア10811

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

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

GReBan

2021/09/17 11:23

回答ありがとうございます。 URLとコードのほうを参考にして、ビルドして試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問