Функции ничего не делают - PullRequest
0 голосов
/ 24 января 2019

У меня есть игровой объект с именем BounceBack, который должен отбрасывать мяч назад, когда они сталкиваются вместе.

public class BounceBack : MonoBehaviour
{
    public GameObject Player;
    public float force;

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag(Player.tag))
        {
            Player.GetComponent<PlayerController>().ForceBack(force);
        }
    }
}

Сценарий мяча игрока (мяча):

public class PlayerController : MonoBehaviour
{
    public int acceleration;
    public int speedLimit;
    public int sideSpeed;

    public Text countText;
    public Text winText;

    public GameObject pickUp;
    public GameObject finishLine;

    //internal void ForceBack() //Not sure what it does and why it's there.
    //{
    //    throw new NotImplementedException();
    //}

    private int count;
    private Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
        SetCount();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal") * sideSpeed * rb.velocity.magnitude / acceleration;
        //float moveVertical = Input.GetAxis("Vertical") * acceleration;

        if (rb.velocity.magnitude <= speedLimit)
        {
            rb.AddForce(0.0f, 0.0f, acceleration); // add vertical force
        }
        rb.AddForce(moveHorizontal, 0.0f, 0.0f); // add horizontal force
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag(pickUp.tag))
        {
            other.GetComponent<Rotate>().Disapear();
            count++;
            SetCount();
        }
        if (other.gameObject.CompareTag(finishLine.tag))
        {
            acceleration = 0;
            sideSpeed = 0;
            finishLine.GetComponent<GameEnd>().FadeOut();
            if (count >= 2)
            {
                winText.GetComponent<WinTextFadeIn>().FadeIn("Vous avez remporté la partie!");
            }
            else
            {
                winText.GetComponent<WinTextFadeIn>().FadeIn("Vous avez perdu. Réesayer?");
            }
        }
    }

    private void SetCount()
    {
        countText.text = "Count : " + count.ToString();
    }

    public void ForceBack(float force)
    {
        Rigidbody rb = GetComponent<Rigidbody>();
        rb.AddForce(0.0f, 0.0f, -force, ForceMode.VelocityChange);
        Debug.Log("Pass");
    }
}

Функция AddForce ничего не делает. Я попытался с setActive (false) , и он тоже не работает. Единственное, что работает, это Debug.Log () . Я не уверен, что ограничение скорости и ускорение мешают работе.

РЕДАКТИРОВАТЬ: Я не уверен, что проблема в Unity, но я не могу получить доступ к любой переменной класса из функции forceBack внутри класса.

EDIT2: я также пытался вызвать функцию AddForce непосредственно в скрипте Bounce Back, но он тоже не работает.

Player.GetComponent<Rigidbody>().AddForce(0.0f, 0.0f, -force, ForceMode.VelocityChange);

Скриншот игрока (мяча)

Скриншот возврата в норму

1 Ответ

0 голосов
/ 24 января 2019

Итак, пара вещей:

1.) Физическая система уже должна вызывать отскок мяча, если вы правильно настроили коллайдеры и твердые тела.Вы должны делать что-то подобное, только если мяч набирает обороты, когда он отскакивает, что маловероятно.Вы должны опубликовать скриншоты их инспекторов, если этот ответ не поможет.

2.) При вызове rb.AddForce () вы применяете силу в мировом пространстве, которая может быть неправильным направлениемпрыгать.Если вы знаете, что шар ориентирован так, как он движется, то вы можете вызвать AddRelativeForce с теми же параметрами.Если ориентация шара не контролируется, то перед применением силы необходимо рассчитать правильное направление в мировом пространстве.

3.) Наконец, просто для подтверждения, объекты с прикрепленным BounceBack имеют-нулевое значение в параметре 'force' в инспекторе, верно?

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