Помощь в устранении неполадок с движением спрайта в Unity? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь заставить объект перемещаться каждую секунду в Unity, но, похоже, он не работает. Я пытаюсь сделать игру змеиной, и я начинаю с того, что центрирую Спрайт головы и начинаю его, перемещая его вправо каждую секунду, а затем добавляю элементы управления игрока. Любая помощь с тем, чтобы заставить его работать?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Snake_Move : MonoBehaviour
{
    private Vector2 pos;
    private Vector2 moveDirection;
    private float moveTimer;
    private float timerSeconds;

    private void Startup()
    {
        pos = new Vector2(5, 5);
        timerSeconds = 1f;
        moveTimer = timerSeconds;
        moveDirection = new Vector2(1, 0);
    }

    private void Update()
    {
        moveTimer += Time.deltaTime;

        if (moveTimer > timerSeconds)
        {
            pos += moveDirection;
            moveTimer -= timerSeconds;
        }

        transform.position = new Vector2(pos.x, pos.y);
    }
}

1 Ответ

1 голос
/ 30 марта 2020

Ну Startup никогда не вызывается, поэтому все ваши значения будут сохранять свои значения по умолчанию - в частности pos = Vector2.zero и moveDirection = Vector2.zero, поэтому ваш объект никогда не будет двигаться вообще.


Вы, вероятно, скорее хотел назвать его Start для реализации сообщения Unity MonoBehaviour.Start, которое автоматически вызывается

во фрейме, когда сценарий включен непосредственно перед любым обновлением методы вызываются в первый раз.

public class Snake_Move : MonoBehaviour
{
    // These you adjust in the Inspector in Unity
    // Later changes to the values here will have no effect!
    [Tooltip("Time interval between steps in seconds")]
    [SerializeField] private float stepInterval = 1f;

    [Tooltip("Initial position")]
    private Vector2 startPos = new Vector2(5, 5);

    private Vector2 moveDirection;
    private float moveTimer;

    // What you wanted is probably the Unity message method Start
    // which is called when you app starts
    private void Start()
    {
        moveTimer = stepInterval;
        moveDirection = Vector2.right;

        transform.position = startPos;
    }

    private void Update()
    {
        moveTimer += Time.deltaTime;

        if (moveTimer > stepInterval)
        {
            moveTimer -= stepInterval;

            // No need to store the pos, simply only assign a new value
            // to the position when needed
            transform.position += moveDirection;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...