1 回答
TA贡献2011条经验 获得超2个赞
主要问题
主要问题是您的for 循环。它只能用于更新 UI - 不能多次调用您的移动和场景重新加载!您应该提前关闭for循环。
for (int i = 0; i < hearts.Length; i++)
{
// you can also reduce these to single lines
hearts[i].enabled = i < numOfHearts;
if(i < numOfHearts) hearts[i].sprite = i < health ? heartFull : heartEmpty;
} // <-- ALREADY CLOSE IT HERE
if(health <= 0) ...
...
位置夹紧
你对位置的夹紧极不安全!想象一下当前位置是 3.1
仍然是 < maxHeight
,因此您添加 Yincrement
一次,结果是最大可能高度 < /span>6.3
!这不是你想要的。
您应该直接钳位targetPosition
,而不是钳位当前transform.position
。例如,您可以使用 Mathf.Clamp
确保 targetPos.y
始终保持在给定范围内。
此外,由于这两种情况都执行非常相似的操作,因此我会使用简单的 int
变量来设置方向,将其减少为仅一次移动:
...
transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
var move = 0;
var targetPosY = targePos.y;
if (Input.GetKeyDown(KeyCode.UpArrow) && targetPosY < maxHeight)
{
move = 1;
}
else if (Input.GetKeyDown(KeyCode.DownArrow) && targetPosY > minHeigth)
{
move = -1;
}
// Handle the movement according to the direction
// in one single code block for both directions
if(move != 0)
{
Instantiate(effect, transform.position, Quaternion.identity);
// increase/decrease the targetPosY according to the move direction
targetPosY += move * Yincrement;
// Now make sure it is within the range
targetPosY = Mathf.Clamp(targetPosY, minHeight, maxHeight);
// finally assign the new target position
targetPos = new Vector2(transform.position.x, targetPosY);
}
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报