2017-05-23 25 views
0

「ワールドスペース」に設定され、ワー​​ルドキューブの上に絶対に配置されたUIキャンバスを持っていると仮定します。Canvasを世界単位で特定のサイズに設定するにはどうすればよいですか?

キューブは実行時にサイズ変更されます。

スケーリングキャンバスを使用しないで、キャンバスのサイズを、私のキューブの既知の世界単位の幅に合わせるにはどうすればよいですか?

私はあなたが使用して「キャンバスユニットの中にキャンバスを設定することができることを知っている:

var rect = canvas.GetComponent<RectTransform>(); 
rect.sizeDelta = new Vector2(200, 200); 

しかし、200x200のキャンバス単位ではなく、ワールド単位です。私のキューブは4ユニット幅です。 sizeDeltaはどのように設定する必要がありますか?

これはCanvasScaleコンポーネントと関係がありますが、わかりません。 referenceUnitsPerPixelは100で、スケールファクタとしては完全に間違っています。dynamicPixelsPerUnitは1と似ていますが、これも間違っています。

答えて

2

あなたは、単にそれを行うことができます。

  • キャンバスコンポーネントが(すでにことをやった)
  • を削除する世界にモードプロパティをレンダリング設定CanvasScalerコンポーネント
  • キャンバスは現在、3Dオブジェクトです:RectTransform身長

を使用して、そのサイズを設定すると、ちょうどあなたのキャンバスは非常に小さなサイズの要素(デフォルト画像を扱っています念頭に置いておきますは100x100で、キャンバスよりもはるかに大きくなります。このことができます

希望、

+0

なぜこれが動作するのか理解できません。実際に行っていると、現在のときには動作しません)、それは完全に動作します、ありがとう! – Doug

+1

基本的に** CanvasScaler **は複数の画面サイズ/解像度に自動的にUIを適応させるためのものです。あなたの状況(そしてほとんどの場合、_RenderMode_が_World_に設定されている)では、ワールド単位で調整できるので、スケールする必要はありません。例外は、3D HUDの幅などです。 4:3、16:9、または21:9スクリーンの全画面。私は十分にはっきりしていたと思う:そうでなければ、私はそれを私の答えでさらに説明しようと思うだろう:) – Kardux

0

メートル単位の特定の幅を使用する場合は、meter_size/canvas_widthを使用して必要なスケールを計算できます。たとえば、幅が2メートル、キャンバスの幅が800の場合、2/800 = 0.0025となります。次に、X、Y、およびZの両方に対してキャンバス上のRect TransformのScaleプロパティを0.0025に設定して、均一にスケーリングされるようにします。

https://docs.unity3d.com/Manual/HOWTO-UIWorldSpace.html

+1

あなたの答えは---> **キャンバスをスケーリングせず**」---> ...私の質問に「あなたは、その後のRectのスケールプロパティは、トランスフォームセット」。 .. ' – Doug

+0

私はそのユニティが世界のキャンバスのサイズを設定するのが好きなのでそれを保存します – Anders

+0

答えをここに残しておきたいのですが、問題に使われているのは正しいことです。これはベストプラクティスのディスカッションサイトではありません。それはQ/Aのサイトであり、あなたはちょうどフラットで、質問を読まなかった。また、質問をしないでください*。 – Doug

関連する問題