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

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

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

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

Unity

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

Q&A

1回答

1655閲覧

Unity2Dチュートリアル中にある解像度対応について

kyorosuke

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2015/08/06 02:48

Unity2Dのチュートリアルを見ているのですが、理解できない箇所があります。
第02回 複数の解像度に対応する(引き伸ばす)
http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/mobile/02.html

C#

1using UnityEngine; 2 3public class Background : MonoBehaviour 4{ 5 // スクロールするスピード 6 public float speed = 0.1f; 7 8 void Start () 9 { 10 // 画面右上のワールド座標をビューポートから取得 11 Vector2 max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1)); 12 13 // スケールを求める。 14 Vector2 scale = max * 2; 15 16 // スケールを変更。 17 transform.localScale = scale; 18 } 19 20 void Update () 21 { 22 // 時間によってYの値が0から1に変化していく。1になったら0に戻り、繰り返す。 23 float y = Mathf.Repeat (Time.time * speed, 1); 24 25 // Yの値がずれていくオフセットを作成 26 Vector2 offset = new Vector2 (0, y); 27 28 // マテリアルにオフセットを設定する 29 renderer.sharedMaterial.SetTextureOffset ("_MainTex", offset); 30 } 31}

上記のコードで

C#

1 2// 画面右上のワールド座標をビューポートから取得 3Vector2 max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1)); 4 5// スケールを求める。 6Vector2 scale = max * 2;

という記述がありますが、「画面右上のワールド座標」に2をかけた値が、なぜ求めたいスケールになるのでしょうか?

理解力不足で恐縮なのですが、どなたかに説明を頂きたく思います。よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

・カメラ右上(画面右上)のワールド座標を取得する
・カメラの中心がワールド座標の原点にあるので、
(0,0,-10なので正確には原点ではないが、この例の場合2DなのでZの値は無視できる)
カメラのタテヨコサイズの半分は上記で取得した値と一致する。
・なのでその値を2倍にすればカメラのタテヨコサイズが手に入る。

という説明で良いでしょうか?

理解を助けるために下記のようなコードを書いて値を見てみるとよいかもしれません。
このコードであれば、カメラがワールド座標の原点に配置していなくても正確に動作するので
使用するのであればこちらのほうが良いような気がします。

C#

1Camera camera = Camera.main; 2Vector2 right_top = camera.ViewportToWorldPoint(new Vector2(1, 1)); 3Vector2 left_bottom = camera.ViewportToWorldPoint(new Vector2(0, 0)); 4Vector2 scale = right_top - left_bottom;

投稿2015/08/07 02:18

ZomZom

総合スコア60

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問