Показать сообщение отдельно
Старый 17.08.2012, 23:02   #63
Huruffus
Оператор ЭВМ
 
Регистрация: 22.07.2012
Сообщений: 37
Написано одно полезное сообщение
Ответ: следование объекта за мышью

Спасибо 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"), 0Input.GetAxis("Vertical"));
            
moveDirection transform.TransformDirection(moveDirection); //TransformDirection - Преобразуем Локальные координаты в Глобальные
            
moveDirection *= speed;
            if (
Input.GetKey(KeyCode.Space))
                
moveDirection.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.-= gravity Time.deltaTime;
        if (!
controller.isGrounded) {  //Поведение вне земли. ПРОБЛЕМЫ В ДАННОМ МЕСТЕ!!!
            
moveDirection = new Vector3(Input.GetAxis("Horizontal"), moveDirection.yInput.GetAxis("Vertical"));
            
moveDirection transform.TransformDirection(moveDirection); //TransformDirection - Преобразуем Локальные координаты в Глобальные
            
moveDirection *= speed/2;
        }
        
controller.Move (moveDirection Time.deltaTime); //controller.Move - более сложное движение. Объект скользит по мешу
        
        
controller.detectCollisions true;
    }

(Offline)
 
Ответить с цитированием