gpt4 book ai didi

android - Unity 2D游戏中的屏幕裁剪问题

转载 作者:行者123 更新时间:2023-11-29 01:43:17 26 4
gpt4 key购买 nike

我用 unity 开发了一款 2-D 游戏。首先,我在网络播放器上运行游戏,我的屏幕从两端切开。现在我正在从中创建 android apk。然后在安卓设备上它也从两端切割。我们正在使用自由纵横比。我不太了解屏幕尺寸。那么如何克服这个问题呢?

CameraFollow.cs 脚本-

using UnityEngine;
using System.Collections;

public class CameraFollow : MonoBehaviour
{
public float xMargin = 1f; // Distance in the x axis the player can move before the camera follows.
public float yMargin = 1f; // Distance in the y axis the player can move before the camera follows.
public float xSmooth = 8f; // How smoothly the camera catches up with it's target movement in the x axis.
public float ySmooth = 8f; // How smoothly the camera catches up with it's target movement in the y axis.
public Vector2 maxXAndY; // The maximum x and y coordinates the camera can have.
public Vector2 minXAndY; // The minimum x and y coordinates the camera can have.


private Transform player; // Reference to the player's transform.


void Awake ()
{
// Setting up the reference.
player = GameObject.FindGameObjectWithTag("Player").transform;
//camera.orthographicSize = 640 / screenwidth * screenheight / 2;
}


bool CheckXMargin()
{
// Returns true if the distance between the camera and the player in the x axis is greater than the x margin.
return Mathf.Abs(transform.position.x - player.position.x) > xMargin;
}


bool CheckYMargin()
{
// Returns true if the distance between the camera and the player in the y axis is greater than the y margin.
return Mathf.Abs(transform.position.y - player.position.y) > yMargin;
}


void FixedUpdate ()
{
TrackPlayer();
}


void TrackPlayer ()
{
// By default the target x and y coordinates of the camera are it's current x and y coordinates.
float targetX = transform.position.x;
float targetY = transform.position.y;

// If the player has moved beyond the x margin...
if(CheckXMargin())
// ... the target x coordinate should be a Lerp between the camera's current x position and the player's current x position.
targetX = Mathf.Lerp(transform.position.x, player.position.x, xSmooth * Time.deltaTime);

// If the player has moved beyond the y margin...
if(CheckYMargin())
// ... the target y coordinate should be a Lerp between the camera's current y position and the player's current y position.
targetY = Mathf.Lerp(transform.position.y, player.position.y, ySmooth * Time.deltaTime);

// The target x and y coordinates should not be larger than the maximum or smaller than the minimum.
targetX = Mathf.Clamp(targetX, minXAndY.x, maxXAndY.x);
targetY = Mathf.Clamp(targetY, minXAndY.y, maxXAndY.y);

// Set the camera's position to the target position with the same z component.
transform.position = new Vector3(targetX, targetY, transform.position.z);
}
}

最佳答案

由于您正在制作 2D 游戏,我假设您使用的是正交相机。与透视相机不同,正交相机在屏幕上显示的内容越多,分辨率越大。

您需要规范化 orthogonal size想要的解决方案:

 camera.orthographicSize = 640/screenwidth * screenheight/2

在上面的代码中,正交大小被归一化为 640 像素宽度。 ( Link )

关于android - Unity 2D游戏中的屏幕裁剪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com