Unity中的游戏对象(卡在屏幕边缘)
Posted
技术标签:
【中文标题】Unity中的游戏对象(卡在屏幕边缘)【英文标题】:GameObject (Stuck At Screen Edge) In Unity 【发布时间】:2021-10-12 08:27:22 【问题描述】:经典的 Stacker 游戏,冰淇淋应该穿过屏幕。 它可以工作并移动对象,但有时它会像这样卡在屏幕的两侧
这里是代码
private float min_X = -2.48f, max_X = 2.48f;
private float move_Speed = 60f;
void Start()
GamePlayController.instance.currentBox = this;
canMove =true;
if (Random.Range(0, 2) > 0)
move_Speed *= -1f;
void MoveBox()
if (canMove)
Vector3 temp = transform.position;
if (temp.x > max_X)
move_Speed *= -1f;
else if (temp.x < min_X)
move_Speed *= -1f;
temp.x += move_Speed * Time.deltaTime;
transform.position = temp;
【问题讨论】:
【参考方案1】:当它到达边缘时,您只需要翻转一次方向。目前,一旦它高于或低于最大值,您可以每帧来回翻转它,它永远不会回到范围内
这样的东西应该可以工作
private float min_X = -2.48f, max_X = 2.48f;
private float move_Speed = 60f;
private int direction = 1;
void Start()
GamePlayController.instance.currentBox = this;
canMove =true;
if (Random.Range(0, 2) > 0)
direction *= -1f;
void MoveBox()
if (canMove)
Vector3 temp = transform.position;
if (temp.x > max_X)
direction = -1f;
else if (temp.x < min_X)
direction = 1f;
temp.x += move_Speed * Time.deltaTime * direction;
transform.position = temp;
【讨论】:
只是累了,冰淇淋就呆在一个地方稍微动一下。我拥有的代码移动了我想要的方式,只是有时会卡在边缘 这就是我凌晨 1 点用手机接听的结果 :)。只需要将方向变量移动到类变量而不是本地变量,并使用您的随机值对其进行初始化。【参考方案2】:好吧,我休息了一下,以你的方向想法作为思考点,并尝试了这个:
让它发出信号,它是否达到了最小或最大点,并使用该逻辑来决定移动的方式,它看起来就像一个魅力。
bool hitMax = true;
bool hitMin = true;
void MoveBox()
if (canMove)
Vector3 temp = transform.position;
if (temp.x > max_X && hitMin == true)
hitMax = true;
hitMin = false;
move_Speed *= -1f;
else if (temp.x < min_X && hitMax == true)
hitMin = true;
hitMax = false;
move_Speed *= -1f;
temp.x += move_Speed * Time.deltaTime;
print("++++++++++++++++++++++++++++++++++++");
print("MAX" + hitMax);
print("Min" + hitMin);
transform.position = temp;
【讨论】:
以上是关于Unity中的游戏对象(卡在屏幕边缘)的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发实战2D游戏摄像机镜头跟随,屏幕边缘限制镜头移动(使用Cinemachine组件)