【发布时间】:2020-01-22 08:55:10
【问题描述】:
所以我一直在关注在 Unity 中制作 2D 游戏的教程(我是一个完全的新手,这是我第一次接触编程),我想为游戏添加一个功能(粗体)。 我添加的“心脏系统”正常工作(空心的数量等于玩家受到的伤害),但它导致我的玩家以一种奇怪的方式改变了他的位置。您可以看到,设置了边界(maxHeight =3,2,minHeight=-3,2),以及他的运动值(Yincrement = 3.2),然而,在按下向上或向下箭头键后,他似乎改变了Y 位置约 4.67。 这是播放器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
private Vector2 targetPos;
public float Yincrement;
public float speed;
public float maxHeight;
public float minHeigth;
public int health = 3;
public int numOfHearts;
public Image[] hearts;
public Sprite heartFull;
public Sprite heartEmpty;
public GameObject effect;
public Image healthDisplay;
private void Update()
{
for (int i = 0; i < hearts.Length; i++)
{
if (i < health)
{
hearts[i].sprite = heartFull;
}
else
{
hearts[i].sprite = heartEmpty;
if (i < numOfHearts)
{
hearts[i].enabled = true;
}
else
{
hearts[i].enabled = false;
}
}
if (health <= 0)
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y < maxHeight)
{
Instantiate(effect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y + Yincrement);
}
else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y > minHeigth)
{
Instantiate(effect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y - Yincrement);
}
}
}
}
【问题讨论】:
-
决定naming convention(我强烈推荐一个与Rider/Resharper相同或相似的),使您的代码至少有点人类可读(去掉块末端的那些空行),然后我们可以交谈。
-
您的
for循环应该只包含 UI 部分...您正在for循环内进行移动,因此它将被执行hearts.Length次。此外,您对该位置的夹紧也不安全......想象当前位置为3.1,即< maxHeight,因此您添加一次增量,它会导致最大可能高度为6.3
标签: c# user-interface unity3d position