Скрипт движения и прыжка.
|
|
BassPiraT92 | Дата: Воскресенье, 18 Февраля 2018, 12:49 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class MovePlayerTwo : MonoBehaviour { public float speed = 1.0f; float gravity = 20f; public float jumpForce = 10f;
Vector3 direction; CharacterController controller;
void Start() { controller = GetComponent<CharacterController>(); }
void Update () { float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); if (controller.isGrounded) { direction = new Vector3(x, 0f, z); direction = transform.TransformDirection(direction) * speed;
if (Input.GetKeyDown(KeyCode.Space) & controller.isGrounded) { direction = new Vector3(x, transform.position.y * jumpForce, z); } } direction.y -= gravity * Time.deltaTime; controller.Move(direction * Time.deltaTime); } }
подскажите почему редко прыгает при нажатии на пробел...
|
|
| |
drcrack | Дата: Воскресенье, 18 Февраля 2018, 13:13 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| controller.isGrounded баганый, зависит от FPS и вообще нормально не работает, лучше просто не юзай его
|
|
| |
BassPiraT92 | Дата: Воскресенье, 18 Февраля 2018, 13:21 | Сообщение # 3 |
участник
Сейчас нет на сайте
| drcrack, как лучше реализовать прыжок отдельно? Потому что только через controller.isGrounded реализовал правильное управление за камерой.
|
|
| |
drcrack | Дата: Воскресенье, 18 Февраля 2018, 13:28 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| Сделай свой isGrounded на основе рейкастов
|
|
| |
BassPiraT92 | Дата: Воскресенье, 18 Февраля 2018, 14:54 | Сообщение # 5 |
участник
Сейчас нет на сайте
| drcrack, Глянь норм или лучше что то добавить\откорректировать?
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class MoveScript : MonoBehaviour {
private GameObject Player; public float speedFl=5f; public float JumpForce = 10f; Rigidbody rb; [SerializeField] private bool isGrounded=false;
void Start () { Player = this.gameObject; rb = Player.GetComponent<Rigidbody>(); }
private void OnCollisionStay(Collision collision) { if (collision.collider.CompareTag("Ground")) { isGrounded = true; } else { isGrounded = false; } } private void OnCollisionExit(Collision collision) { if (collision.collider.CompareTag("Ground")) { isGrounded = false; } }
void FixedUpdate () { if (Input.GetKey(KeyCode.A)) { Player.transform.Translate(Vector3.left* speedFl*Time.deltaTime); } if (Input.GetKey(KeyCode.D)) { Player.transform.Translate(Vector3.right*speedFl*Time.deltaTime); } if (Input.GetKey(KeyCode.Space)&isGrounded==true) { rb.AddForce(0, rb.transform.position.y * JumpForce, 0, ForceMode.VelocityChange); } } }
|
|
| |
drcrack | Дата: Воскресенье, 18 Февраля 2018, 15:05 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Да вроде должно работать, тести
Код if (Input.GetKey(KeyCode.Space)&isGrounded==true) Вот тока странное место — во-первых почему &, когда лучше &&, во-вторых зачем == true?
Код if (Input.GetKey(KeyCode.Space) && isGrounded) ^ вот так лучше
PS Ну и эт, старайся стиль кода выдерживать один. У тебя где-то фигурная скобка на одной строке, где-то на следующий, где-то написан private, где-то его нет, какие-то поля с большой буквы, какие-то с маленькой, где-то есть пробелы вокруг =, где-то нет... некрасивый код.
Сообщение отредактировал drcrack - Воскресенье, 18 Февраля 2018, 15:08 |
|
| |
BassPiraT92 | Дата: Воскресенье, 18 Февраля 2018, 15:14 | Сообщение # 7 |
участник
Сейчас нет на сайте
| drcrack, сорян, учту т.к. учусь ещё спасибо за совет кстати!
|
|
| |