Не могли бы вы указать подробно, о чем ваша игра и что вы пытаетесь сделать в каждой части сценария.Я мог бы помочь тебе тогда.Кроме того, если это ваш первый контакт с программированием, это путь к продвинутым.Начните с чего-то более простого и сначала поймите основные понятия программирования, прежде чем двигаться дальше.Вот хорошая серия уроков по программированию на c # для начинающих.
https://www.youtube.com/watch?v=pSiIHe2uZ2w
Я не уверен, что вы пытаетесь сделать, но почему ваш контроль за движением находится в пределах цикла for.Может быть, поэтому вы все испортили.Попробуйте удалить весь этот код из цикла for.
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);
}
Также этот код должен быть после того, как вы проверите, переместился ли игрок.
transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
Вот совет, чтобы сделать движение немного легче.Используйте transform.translate вместо Vector2.MoveTowards.Transform.translate берет 3 поплавка и меняет позицию вашего игрока на три поплавка, представленные в виде вектора.
Вот пример
transform.translate(0,2,0);
Это изменит позицию игрока y на 2.Я думаю, что ваш код должен выглядеть следующим образом.
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);
}
if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y < maxHeight)
{
transform.Translate(0,Yincrement,0)
}
else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y > minHeigth)
{
Instantiate(effect, transform.position, Quaternion.identity);
transform.Translate(0,Yincrement,0);
}
}
}
После того, как я получу ваш ответ, я, возможно, смогу помочь, но нет никаких гарантий, потому что у меня есть опыт работы только на годы.