Страница 1 из 1

Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 13:59
Zumhad
Можно долго говорить что Warface плохая игра но все же в ней хорошее перемещение. Коротко. Мне нужен полный код примерного перемещения. Допустим когда персонаж бежит вперед и поворачивается налево и нажимает на левую кнопку - он отпрыгивает налево. Очень нужно. Уже 3 дня не могу сделать. Кто шарит заранее спасибо :)

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:02
Tolking
И чего сделал за 3 для?

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:08
Zumhad
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
[AddComponentMenu("Control Script/FPS Input")]

public class KeyControler : MonoBehaviour
{
    public float speed = 10;
    public float gravity = -10f;

    Vector3 movement;
    Vector3 _gravity;

    private CharacterController ch_contrl;

    void Start()
    {
        ch_contrl = GetComponent<CharacterController>();
    }

    void Update()
    {
        Move();
        Sprint();
        Jump();
    }

    Vector3 lastMove;

    private void Move()
    {
            movement.x = Input.GetAxis("Horizontal") * speed;
            movement.z = Input.GetAxis("Vertical") * speed;
            movement = Vector3.ClampMagnitude(movement, speed);

            movement.y = gravity;
            movement *= Time.deltaTime;
            movement = transform.TransformDirection(movement);

            ch_contrl.Move(movement);  
    }

    private void Jump()
    {
        if (!ch_contrl.isGrounded) gravity -= 1f;
        else gravity = -10f;

        if (Input.GetKeyDown(KeyCode.Space) && ch_contrl.isGrounded)
        {
            gravity = 20f;
        }
    }

    private void Sprint()
    {
        if(ch_contrl.isGrounded & (Input.GetKey(KeyCode.LeftShift) & Input.GetKey(KeyCode.W)))
        {
            if(speed != 13)
            {
                speed += 1;
            }
        }
        else
        {
            if(speed != 10)
            {
                speed -= 1;
            }
        }
    }
}
 

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:10
Zumhad
Я много эксперементировал и много раз все менял и удалял поэтому тут так мало

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:11
Zumhad
Помоги ходя бы немного
Дальше сам как нибудь
Вся проблема в гравитации

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:46
Jarico
Zumhad писал(а):Вся проблема в гравитации


Ну что делает сила притяжения с твоим телом? Она постоянно притягивает тебя к себе так и в Unity, применяй константу скорости свободного падения const float gravity = 9.81f

Синтаксис:
Используется csharp
public Vector3 moveDir = Vector3.zero;

void FixedUpdate()
{
if(controller.isGrounded == false){
moveDir.y -= 9.81f;
}

{
controller.Move(moveDir);
}
}
 

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 14:59
Tolking
Ну с гравитацией у тебя проблема из-за того что с физикой проблема... При прыжке гравитация не меняет направление и, главное, она не скорость она ускорение...
Для начала нужно rtfm внимательно! https://docs.unity3d.com/ScriptReference/CharacterController.Move.html
deltaTime не просто там так напиханы в них глубокий физический смысл!

P.S. CharacterController не физический объект. Все нужно делать в апдейте учитывая прошедшее время.
P.P.S. Не знаю что хорошего в перемещении Варфейс, но подозреваю что все хорошее в ней может быть в анимации...

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 15:48
Zumhad
Это я все я понимаю. Мне нужно допустим если я просто прыгаю и потом пытаюсь двигаться то я не мог этого сделать. А когда разбегусь и потом прыгну то смогу. Также я уже говорил что не получается сделать такую фишку - что когда я при разбеге поворачиваюсь налево допустим и нажимаю "A" и прыгаю то я отскочу намного сильнее чем просто без этих манипуляций. Через условия я уже пытался делать. Все смешивается. Получается фигня.

Re: Физика движений как в Warface

СообщениеДобавлено: 21 фев 2019, 16:59
Jarico
Tolking писал(а):Ну с гравитацией у тебя проблема из-за того что с физикой проблема... При прыжке гравитация не меняет направление и, главное, она не скорость она ускорение...
Для начала нужно rtfm внимательно! https://docs.unity3d.com/ScriptReference/CharacterController.Move.html
deltaTime не просто там так напиханы в них глубокий физический смысл!

P.S. CharacterController не физический объект. Все нужно делать в апдейте учитывая прошедшее время.
P.P.S. Не знаю что хорошего в перемещении Варфейс, но подозреваю что все хорошее в ней может быть в анимации...


Или в кривой