Спасибо pax!
Дописываю скрипт перемещения главного героя так, чтобы он мог перемещаться в воздухе (с меньшей скоростью).
С моим скриптом происходят такие проблемы: замедляется скорость падения на землю, при перемещении вне земли, гравитация перестаёт действовать на объект, прыжок становится слишком сильным.
Скажите пожалуйста, как это исправить?
using UnityEngine;
using System.Collections;
public class char2 : MonoBehaviour {
//значения скоростей
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity;
//Значение вектора
private Vector3 moveDirection = Vector3.zero;
void Start () {
renderer.enabled = false;
collider.enabled = true;
}
void Update () {
CharacterController controller = GetComponent<CharacterController>(); //GetComponent - присваивает компонент
if (controller.isGrounded) { //Поведение на земле
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection); //TransformDirection - Преобразуем Локальные координаты в Глобальные
moveDirection *= speed;
if (Input.GetKey(KeyCode.Space))
moveDirection.y = jumpSpeed;
//Ускорение по нажатию кнопки LShift и замедление по отпусканию
if (Input.GetKey (KeyCode.LeftShift)&&(Input.GetKey(KeyCode.W)||
Input.GetKey(KeyCode.A)||
Input.GetKey(KeyCode.S)||
Input.GetKey(KeyCode.D)))
speed = 12.0F;
if (Input.GetKeyUp(KeyCode.LeftShift)){
speed = 6.0F;
if (controller.isGrounded)
speed = 6.0F; else speed = 6.0F;
}
}
if (controller.isGrounded)
speed = speed; else speed = 6.0F;
//------------------------------------------------------
moveDirection.y -= gravity * Time.deltaTime;
if (!controller.isGrounded) { //Поведение вне земли. ПРОБЛЕМЫ В ДАННОМ МЕСТЕ!!!
moveDirection = new Vector3(Input.GetAxis("Horizontal"), moveDirection.y, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection); //TransformDirection - Преобразуем Локальные координаты в Глобальные
moveDirection *= speed/2;
}
controller.Move (moveDirection * Time.deltaTime); //controller.Move - более сложное движение. Объект скользит по мешу
controller.detectCollisions = true;
}
}