2016-12-23 2 views
1

Я пытаюсь добавить прыжки к элементам управления нашего скрипта управления, но он просто не работает, и я получаю разочарование, потому что я много пытался, чтобы он работал. Я не использую жесткие тела и скорее хочу использовать физику, основанную на сценариях, и - но позже - raycasts (для обнаружения земли). Это 3D, но с фиксированной перспективой, потому что персонажи - спрайты (мы думаем о том, чтобы попробовать стиль, похожий на Do not Starve, Paper Mario и т. Д.). И вещь, которую я хочу добавить сейчас, - это прыгать вверх, когда персонаж стоит на месте, а затем на прыжках, которые также позволяют персонажу перемещаться немного на расстоянии, когда персонаж движется. Ну, вы получите картину. Для этого мне сначала нужно начать прыгать, а также тяжести, чтобы вернуть персонажа, учитывая, что персонаж может приземлиться на земле с разной высотой, чем исходная земля. Что происходит сейчас, так это то, что персонаж прыгает чуть-чуть, например, даже не прыгает, а затем падает бесконечно - или бесконечно растет, когда прыжок снова нажимается. Итак, как я могу это исправить?Прыжки без жесткости в единстве

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

public class Controls3D : MonoBehaviour 
{ 

    public float player3DSpeed = 5f; 
    private bool IsGrounded = true; 
    private const float groundY = (float) 0.4; 
    private Vector3 Velocity = Vector3.zero; 
    public Vector3 gravity = new Vector3(0, -10, 0); 

    void Start() 
    { 
    } 

    void Update() 
    { 
     if (IsGrounded) 
     { 
      if (Input.GetButtonDown("Jump")) 
      { 
       IsGrounded = false; 
       Velocity = new Vector3(Input.GetAxis("Horizontal"), 20, Input.GetAxis("Vertical")); 
      } 
      Velocity.x = Input.GetAxis("Horizontal"); 
      Velocity.z = Input.GetAxis("Vertical"); 
      if (Velocity.sqrMagnitude > 1) 
       Velocity.Normalize(); 
      transform.position += Velocity * player3DSpeed * Time.deltaTime; 
     } 
     else 
     { 
      Velocity += gravity * Time.deltaTime; 
      Vector3 position = transform.position + Velocity * Time.deltaTime; 
      if (position.y < groundY) 
      { 
       position.y = groundY; 
       IsGrounded = true; 
      } 
      transform.position = position; 
     } 
    } 
} 
+0

Решение проблемы с бесконечным падением. Просто нужно было установить Velocity.y = 0; после transform.position = position; под IsGrounded = true; – Gota

+1

Если вы пройдете, я уверен, вы увидите, что начальная скорость меньше, чем вы думали из-за 'Velocity.Normalize();', поэтому ваш Velocity.y - это некоторое число от -1 до 1. Я думаю, что ваша скорость вверх должна быть независимым от двух других направлений, или, вероятно, вы должны нормализовать скорость каждый раз, когда вы ее изменяете, а не только при заземлении. I.e., почему нормализуется в обоснованном случае, но не здесь: 'Velocity + = gravity * Time.deltaTime;'? – Quantic

+0

Я думаю, что у меня есть что-то, спасибо. – Gota

ответ

0

Если бы я тебя, я думаю, что я wouldve изменил все это в контроллер персонажа, так как это упрощает процесс, а #### тонн: P

Если вы выясните вы хотите использовать CC. Это решение я обычно использую:

CharacterController controller = GetComponent<CharacterController>(); 
    // is the controller on the ground? 
    if (controller.isGrounded) 
    { 
     //Feed moveDirection with input. 
     moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
     moveDirection = transform.TransformDirection(moveDirection); 



     //Multiply it by speed. 
     moveDirection *= speed; 
     //Jumping 
     if (Input.GetButton("Jump")) 
      moveDirection.y = jumpSpeed; 

    } 
    //Applying gravity to the controller 
    moveDirection.y -= gravity * Time.deltaTime; 
    //Making the character move 
    controller.Move(moveDirection * Time.deltaTime); 

moveDirection переменный Vector3 типа и скорость и jumpSpeed ​​является значение общественного поплавка используется для изменения скорости.

ВНИМАНИЕ: Контроллеры символов позволяют программировать свою физику.

Смежные вопросы