#unity3d #game-development
#unity3d #разработка игры
Вопрос:
Итак, я хочу, чтобы мой персонаж менял позицию и прыгал в зависимости от обратного отсчета, но как я могу сделать это в функции start(), я знаю о функции Update (), но там он улетит далеко. Проверьте код, это то, что я пробовал, есть идеи? Спасибо.
private Rigidbody2D rb2de;
public float enemyJump;
float transformTime = 15.0f;
void Start()
{
rb2de = GetComponent<Rigidbody2D>();
rb2de.AddForce(new Vector2(rb2de.velocity.x, enemyJump));
transformTime -= Time.deltaTime;
if (Mathf.Round(transformTime) == 12) ;
transform.position = new Vector3(4, transform.position.y, transform.position.z);
rb2de.AddForce(new Vector2(rb2de.velocity.x, enemyJump / 12));
}
Комментарии:
1. Ожидаете ли вы какого-либо ввода от игрока во время игры, или вы собираетесь перемещать персонажа, основываясь только на времени? Ваш обратный отсчет будет перезапущен или сброшен или изменится продолжительность? Я вижу некоторые проблемы только с использованием
Start
метода, а неUpdate
как в большинстве решений.
Ответ №1:
все, что вам нужно, это использовать сопрограмму. например
void Start()
{
rb2de = GetComponent<Rigidbody2D>();
rb2de.AddForce(new Vector2(rb2de.velocity.x, enemyJump));
StartCoroutine($yourname());
}
IEnumerator $yourname()
{
yield return new WaitForSeconds($waitingTime)
transform.position = new Vector3(4, transform.position.y, transform.position.z);
rb2de.AddForce(new Vector2(rb2de.velocity.x, enemyJump / 12));
}
Комментарии:
1. Вы можете создать
Start
саму сопрограмму.2. не знал. tnx
Ответ №2:
Запуск функции может быть сопрограммой, попробуйте это
Запуск IEnumerator() { … возвращает новые секунды ожидания (12f); … }