问题
我有一个用c#编写的spawn管理器,它生成我的游戏对象,我使用screen.width来设置最大屏幕和-screen.width来设置产生的最小屏幕宽度,但是我的游戏对象会产生方式离开屏幕。
我使用2:3的人像相机而不是自由的方面作为我的相机视图,因为我希望我的游戏处于纵向模式
如何让我的游戏对象在相机宽度(最大和最小)内生成?
我的代码
public class SpawnManager : MonoBehaviour {
public int maxBalloons = 100;
public GameObject balloon;
public float horizontalMin = -Screen.width;
public float horizontalMax = Screen.width;
public float verticalMin = -5.0f;
public float verticalMax = 1.0f;
private Vector2 originPosition;
void Start () {
originPosition = transform.position;
Spawn ();
}
void Spawn()
{
for (int i = 0; i < maxBalloons; i++)
{
Vector2 randomPosition = originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax));
Instantiate(balloon, randomPosition, Quaternion.identity);
originPosition = randomPosition;
}
}
}
修改 我改变了
Vector2 randomPosition = originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax));
要
Vector2 randomPosition =Camera.ScreenToWorldPoint (originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax)));
仍然无法正常工作
答案 0 :(得分:0)
屏幕上X小于0的位置将始终位于屏幕之外。屏幕的左下角是坐标的原点(x:0,y:0)
但在这里我认为你混在一起两种姿势。屏幕上的位置与场景的世界空间中的位置不同。这取决于相机渲染的位置。 屏幕左下角的位置在世界空间中不是x:0 y:0。
要实现您的目标,您需要将相机左侧和右侧的位置转换为世界空间位置。
使用Camera.ScreenToWorldPoint实现:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html