@8_JOHN_8

Как решить проблему с постепенным ускорением объекта и его прыжком?

/*
Объектом является - сфера!!!

Суть проблемы в том, что при ускорение объекта через Акселератион, сфера через некоторое время начинает подыматься в вверх. При попытке подпрыгнуть не используя обратный импульс сфера находится в воздухе дольше чем нужно, а при задании обратного импульса весь этот прыжок выглядит ужасно не естественно. Пожалуйста помогите что лучше использовать,?
*/

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

public class BallController : MonoBehaviour {

    public float speed;
    public float fast;
    float LR;
    Vector3 coordinats;
    public float magnitude;
    public Rigidbody RB;
    public float jump;
    public bool ground;
    public float speed_ball;

    private void FixedUpdate()
    {
        Ray ray = new Ray(RB.transform.position, Vector3.down);
        RaycastHit rh;
        if (Physics.Raycast(ray, out rh, 0.8f))
        {
            ground = true;
        }
        else
        {
            ground = false;
        }
        if ((Input.touchCount > 0) && (ground == true))
        {
            //RB.AddForce(Vector3.zero);
            RB.AddForce(Vector3.up * jump, ForceMode.Impulse); // прыжок вверх
            //RB.useGravity = true;
        }
        if ((ground == false) && RB.transform.position.y > 1f)
        {
            //RB.AddForce(Vector3.zero);
            RB.AddForce(-Vector3.up * jump, ForceMode.Impulse); // даю объекту обратный импульс
        }

        /////////

        GetComponent<Rigidbody>().AddForce(Vector3.forward * fast, ForceMode.Acceleration);
        coordinats = Input.acceleration; // сохраняет данные акселерометра в переменную
        if (coordinats.sqrMagnitude > magnitude)
        {
            coordinats.Normalize();
        }
            
        //coordinats.Normalize();

        if (coordinats.x > 0.1f)
        {LR = 0.15f; transform.Translate(new Vector3(LR * speed * Time.deltaTime, 0, 0));} // поворачивает вправо
        if (coordinats.x < -0.1f)
        { LR = -0.15f; transform.Translate(new Vector3(LR * speed * Time.deltaTime, 0, 0)); } // поворачивает влево
    }

    private void Start()
    {
        RB = GetComponent<Rigidbody>();
        RB.AddForce(Vector3.forward * 10f, ForceMode.Impulse); // дает толчок шарику при старте
    }
}
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы