web-dev-qa-db-ja.com

Androidデバイスのすべての解像度で動作するようにゲームをコーディングするにはどうすればよいですか?(Unityを使用)

Unityで480x320の解像度(ビルド設定で設定)で作成したゲームを持っています。しかし、私はすべてのAndroidデバイスすべての解像度でゲームを公開したいと思います。どうすれば、Unityにゲームをデバイスの解像度にスケールアップするように指示することができますか?それは可能ですか?

前もって感謝します!

11
Zwiebel

あなたの質問に対する答えは、ゲームをどのように実装したかに大きく依存します。 GUIテクスチャを使用して作成した場合、オブジェクトの配置/サイズ設定と画面サイズの違いに大きく依存するため、少し注意が必要です。

ゲームの大部分がオブジェクト(平面、立方体など)を使用して行われる場合、私が通常使用する2つの方法があります。

1)最初の方法は、実装が非常に簡単ですが、常に見栄えが良いとは限りません。カメラのアスペクト比を変更して、ゲームを設計したアスペクト比に合わせることができます。したがって、あなたのケースでは、4:3でゲームを設計したので、次のようにします。

Camera.aspect = 4f/3f;

ただし、16:9の画面で誰かがプレイしている場合、ゲームはゆがんで伸びたように見えます。

2)2番目の方法はそれほど簡単ではなく、かなりの作業と計算を必要としますが、見た目ははるかにすっきりします。正射投影カメラを使用している場合、使用している画面解像度に関係なく、正射投影カメラは高さを設定された高さに維持し、幅のみを変更することを覚えておいてください。たとえば、正射投影カメラのサイズが10の場合、高さは2に設定されます。これを念頭に置く必要があるのは、各レベル内で可能な最も広いカメラを補正することです(たとえば、背景が広い) )または、カメラの正投影サイズを動的に変更して、幅が作成したものと一致するようにします。

立体視カメラを使用して3Dゲームを実行した場合、画面の解像度は外観に実際には影響しませんが、それはゲームによって異なるため、詳細が必要になります

16
Steven Mills

私がした方法は、デバイスのアスペクト比に応じてカメラのビューポートを変更することです800x1280用のゲームを作ったと考えてください

スクリプトのいずれかでこれを行うことができます

float xFactor = Screen.width / 800f;
float yFactor = Screen.height  / 1280f;


Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);

これは魔法のように機能します

9
Rohit

2Dゲームで正投影カメラをスケーリングするためのスクリプトは次のとおりです

public float screenHeight = 1920f;
public float screenWidth = 1080f;
public float targetAspect = 9f / 16f;
public float orthographicSize;
private Camera mainCamera;

// Use this for initialization
void Start () {

    // Initialize variables
    mainCamera = Camera.main;
    orthographicSize = mainCamera.orthographicSize;

    // Calculating ortographic width
    float orthoWidth = orthographicSize / screenHeight * screenWidth;
    // Setting aspect ration
    orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
    // Setting Size
    Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
}
2
Dias

これを行う簡単な方法は、ターゲットを検討することです。つまり、iPhone 5のゲームを実行している場合、アスペクト比は9:16 vまたは16:9 hです。

   public float targetRatio = 9f/16f; //The aspect ratio you did for the game.
void Start()
{
   Camera cam = GetComponent<Camera>();
   cam.aspect = targetRatio;
} 
1
Nelson Austria

3Dではなく2Dだと思いますが、これは do です。

  1. キャンバスオブジェクトを作成する
  2. Canvas Scalerを画面サイズに合わせてスケーリングするように設定します
  3. たとえば、参照解像度を480x320に設定します。
  4. 画面の一致モードをまたは高さと一致するように設定します
  5. 現在の画面の幅が小さい場合は一致を1に設定し、高さが小さい場合は0に設定します
  6. キャンバス内に背景として画像を作成する
  7. アスペクト比フィッタースクリプトを追加
  8. アスペクトモードを親に合わせるに設定します(UIアンカーはどこにでも配置できます)。
  9. アスペクト比を480/320 = 1.5に設定します

そして、このスニペットをメインのCanvasのAwakeメソッドに追加します。

var canvasScaler = GetComponent<CanvasScaler>();
var ratio = Screen.height / (float) Screen.width;
var rr = canvasScaler.referenceResolution;
canvasScaler.matchWidthOrHeight = (ratio < rr.x / rr.y) ? 1 : 0;

3Dオブジェクトの場合、上記の答えのいずれかを使用できます

0
Kokizzu