Пытаемся остановить импульс, когда снова появляются - PullRequest
2 голосов
/ 16 февраля 2020

Я искал ответы в Интернете, но не могу найти работающего. Я пытался изменить код, и я уверен, что это очень простая ошибка, потому что это моя первая игра.

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

public class respawn : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private Transform respawnPoint;
    private Rigidbody Rigidbody;


    void FixedUpdate()
    {
        if (player.position == respawnPoint.position);
        {
            GetComponent<Rigidbody>().velocity = 0;
            Rigidbody.angularVelocity = 0;
        }
    }

    private void OnTriggerEnter(Collider other)
    {
        player.transform.position = respawnPoint.transform.position;



    }
}

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Когда вы войдете в Trigger, вы будете телепортированы в позицию респауна, но вы не можете зависеть от FixedUpdate, запущенного на этом точном пикселе позиции респауна.

Самый прямой ответ - это, ну, в общем, сделать код так, как вы бы описали проблему: «Когда вы вводите триггер, установите позицию в положение респауна и установите скорость в 0":

Я бы изменил весь скрипт на:

public class respawn : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private Transform respawnPoint;
    private Rigidbody rigidbody;


    void Start()
    {
        rigidbody = GetComponent<Rigidbody>()
    }

    private void OnTriggerEnter(Collider other)
    {
        player.position = respawnPoint.position;
        rigidbody.velocity = Vector3.zero;
    }
}

и не забудьте заполнить значения player и respawnPoint в инспекторе.


Кроме того, имейте в виду, что текущий код подвержен ошибкам, если вокруг вас движутся другие объекты. Прямо сейчас, если ЛЮБОЙ объект входит в Trigger, положение ИГРОКА будет сброшено. Вы можете исправить это с помощью чека для игрока

private void OnTriggerEnter(Collider other)
{
    if (other.transform == player) 
    {
         player.position = respawnPoint.position;
         rigidbody.velocity = Vector3.zero;
    }

}
0 голосов
/ 16 февраля 2020

Самое первое, что вы хотите сделать, это взглянуть на консоль ошибок Unity. Ваш код выдает несколько ошибок, они будут отображаться красным цветом. Дважды щелкните по ошибке, которая будет добавлена ​​в ваш код.

Кроме того, попробуйте найти хороший редактор, такой как VS Code, так как он поможет вам быстро найти проблемы, добавив красные волнистые подчеркивания. Используя два вышеуказанных подхода, вы сможете самостоятельно найти ~ 99% своих проблем в следующий раз, а затем спросить в форумах оставшийся 1%.

Давайте go через ваш шаг кода шаг за шагом:

private Rigidbody Rigidbody;

В Unity обычно требуется тип в верхнем регистре Rigidbody, но имя переменной в нижнем регистре rigidbody (хотя в соглашениях о кодировании C# предлагаются свойства в верхнем регистре). В любом случае, не используйте то же имя, что и тип, поэтому напишите:

private Rigidbody rigidbody;

или например (сейчас я опускаю значение по умолчанию private, хотя вы также можете предпочесть оставить его, и Я использую более короткое имя переменной и уточняю ее начальное значение):

Rigidbody body = null;

В следующем коде:

GetComponent<Rigidbody>().velocity = 0;

... вы прежде всего получите компонент rigidbody снова. Это не нужно, если вы получили его один раз в начале (и для многократного использования, может отставать), поэтому сделайте это так:

void Start()
{
    rigidbody = GetComponent<Rigidbody>();
}

А во-вторых, вы назначаете 0, но вы хотите назначить new Vector3(0f, 0f, 0f), или просто

rigidbody.velocity = Vector3.zero;
rigidbody.angularVelocity = Vector3.zero;

Наконец, вы пишете

player.transform.position = respawnPoint.transform.position;

... но player и respawnPoint уже преобразованы, так что вы можете использовать более простой

player.position = respawnPoint.position;

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...