我正在制作关于向对方发射物体的2D游戏 . 它几乎完成了 . 但是,当我在不同的设备上运行时,由于屏幕尺寸不同,某些游戏对象的偏移量会混乱 . 在Unity编辑器中,我使用的是自由纵横视图,并且我已经创建了我的游戏对象,因此在相机尺寸为80的情况下,它们都完美对齐 . 我认为这里的问题是屏幕分辨率会影响显示屏,因为我使用固定数量的Unity单元来定位我的游戏对象,所以当我在独立游戏上运行游戏时,它们显得非常奇怪 . 我写了一个像素完美的相机脚本,但它似乎没有帮助 . 相机是像素完美的,然而,为了补偿,相机尺寸变成非常小或非常大的东西 . 我只想在所有设备和屏幕分辨率上看到相同的外观 . 这里的一个主要问题是我希望我的GUI元素显示在玩家所在的位置旁边 . 我的剧本在这里 .
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class HoldTimeMultiplierPlayerFollowController : MonoBehaviour {
public float textYOffset = 50f;
public Text holdTimeMultiplierDisplay;
void Update() {
Vector3 position = Camera.main.WorldToScreenPoint(transform.position);
holdTimeMultiplierDisplay.gameObject.transform.position = new Vector3(position.x, position.y + textYOffset, position.z);
}
}
有人有任何想法吗?
顺便说一句,
我所有的艺术都是32x32 . 像素与单位之比始终为1比1.编辑器中的相机尺寸为81.92,当我使用686x269的自由宽高比时 . 在这些测量中,一切都完美显示 .
任何帮助表示赞赏 . 也许是一个脚本,或者关于如何实现它的建议?
其他脚本(如果您发现任何需要解决的问题或可以添加的改进,请告诉我):
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class PlayerMovementController : MonoBehaviour {
private int holdTimeMultiplier = 0;
public int maxHoldTimeMultiplier = 215;
public Text holdTimeMultiplierDisplayText;
private Rigidbody2D rbody;
void Awake() {
rbody = GetComponent<Rigidbody2D>();
if(rbody == null) {
Debug.LogError ("No Rigidbody2D detected on player.");
}
}
void Update() {
Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x,
Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
Vector2 mouseDirectionFromPlayer = mousePosition - new Vector2(transform.position.x, transform.position.y);
if(Input.GetMouseButton(0)) {
if(holdTimeMultiplier < maxHoldTimeMultiplier) {
holdTimeMultiplier ++;
} else {
holdTimeMultiplier = 0;
}
} else {
if(holdTimeMultiplier != 0) {
rbody.AddForce(mouseDirectionFromPlayer * holdTimeMultiplier * 200);
holdTimeMultiplier = 0;
}
}
holdTimeMultiplierDisplayText.text = holdTimeMultiplier.ToString();
}
}
...
using UnityEngine;
using System.Collections;
public class SpawnNewObject : MonoBehaviour {
public GameObject[] UseableObjects;
public Transform SpawnPoint;
void Update() {
if(Input.GetKeyDown(KeyCode.N)) {
var randomObject = Random.Range(0,UseableObjects.Length);
GameObject UseableObject;
UseableObject = Instantiate(UseableObjects[randomObject], SpawnPoint.position, SpawnPoint.rotation) as GameObject;
}
}
}