#c# #unity3d #2d-games
#c# #unity3d #2d-игры
Вопрос:
Это начало происходить после того, как я написал сценарий для dashing. Теперь, всякий раз, когда я врезаюсь в стены, мой персонаж прилипает к этой стене. Если я бросаюсь к крыше, то я могу, например, ходить по крыше. Кроме того, когда я выполняю тире рядом со стеной / на полу, оно никогда не прекращается после одного нажатия. Любая помощь будет оценена, спасибо. Приведенный ниже код является сценарием dashing, при необходимости я могу опубликовать набор переменных и мой скрипт контроллера символов тоже.
void Start()
{
_rigidbody = GetComponent<Rigidbody2D>();
dashTime = baseDashTime;
}
void Update()
{
isGrounded = Physics2D.OverlapCircle(feet.position, checkRadius, checkGround);
if(isGrounded == true)
{
dashTime = baseDashTime;
}
if (direction == 0)
{
if (Input.GetKey(KeyCode.W) amp;amp; (Input.GetKeyDown(KeyCode.LeftShift)))
{
direction = 1;
}
else if (Input.GetKey(KeyCode.A) amp;amp; (Input.GetKeyDown(KeyCode.LeftShift)))
{
direction = 2;
}
else if (Input.GetKey(KeyCode.S) amp;amp; (Input.GetKeyDown(KeyCode.LeftShift)))
{
direction = 3;
}
else if (Input.GetKey(KeyCode.D) amp;amp; (Input.GetKeyDown(KeyCode.LeftShift)))
{
direction = 4;
}
}
else
{
if (dashTime <= 0)
{
direction = 0;
_rigidbody.velocity = Vector2.zero;
}
else
{
dashTime -= Time.deltaTime;
if (direction == 1)
{
_rigidbody.velocity = Vector2.up * dashSpeed;
}
else if (direction == 2)
{
_rigidbody.velocity = Vector2.left * dashSpeed;
}
else if (direction == 3)
{
_rigidbody.velocity = Vector2.down * dashSpeed;
}
else if (direction == 4)
{
_rigidbody.velocity = Vector2.right * dashSpeed;
}
}
}
}
Ответ №1:
В вашем коде у вас есть это утверждение в функции update. Когда вы бросаетесь на землю, я предполагаю, что isGrounded останется верным, поэтому игрок будет продолжать бросаться вечно. Вероятно, из-за этого игрок застревает.
if(isGrounded == true)
{
dashTime = baseDashTime;
}
Комментарии:
1. Да, похоже, что это так, так как я могу увеличить время восстановления моего dash? Я написал это, чтобы убедиться, что люди сначала не смогут использовать dash unlimited.
2. Вы могли бы поместить
dashTime = baseDashTime;
вif(dashTime < 0)
. Это приведет к сбросу времени после того, как игрок закончит бросок. Если вы хотите, чтобы игрок делал рывок только по земле, вы можете поместить isGrounded вif(direction ==0)
3. Спасибо за ваш комментарий. У меня некоторое время не было подключения к Интернету, поэтому не смог ответить, извините. Теперь символ бесконечно тире :’). Я попытался реализовать счетчик, и теперь я вообще не могу тире и прыгать. Это код. Забавно, что в этом скрипте даже не реализованы прыжки. (Я не могу опубликовать это здесь, поэтому я опубликую это как другой ответ.)
4. Я просмотрел ваш скрипт и нашел несколько ошибок. Во-первых, ваш
while(dashCounter > 0) { dashCounter -= Time.deltaTime; direction = 0; _rigidbody.velocity = Vector2.zero; }
почти всегда будет выполняться так, как будто по завершении счетчик сбрасывается после одной итерации цикла if else. Сбросьте счетчик штрихов в инструкции `else if(dashCounter ==0). Примечание: ваш персонаж не может двигаться / прыгать / тире, поскольку ваш цикл while всегда устанавливает скорость игрока равной 0