我正在制作关于向对方发射物体的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);
}
}
有人有任何想法吗?
BTW,
我所有的艺术都是32x32。像素与单位之比始终为1比1.当我使用686x269的自由宽高比屏幕时,编辑器中的相机尺寸为81.92。在这些测量中,一切都完美显示。
感谢任何帮助。也许是一个脚本,或者关于如何实现它的建议?
其他脚本(如果您发现任何需要解决的问题或可以添加的改进,请告诉我):
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;
}
}
}