2014-02-11 7 views
1

Я в настоящее время получил мой характер полета в воздухе со следующим сценариемЛетающие характер в единстве 3d

#pragma strict 

var cMotor: CharacterMotor; // reference to the CharacterMotor script 

function Start(){ // get the CharacterMotor script at Start: 
cMotor = GetComponent(CharacterMotor); 
} 

function Update(){ // move player upwards while F is pressed 
if (Input.GetKey("f")){ 
cMotor.SetVelocity(Vector3.up*10.5);} 
else if (Input.GetKey("up")){ 
cMotor.SetVelocity(Vector3.forward*10.5); 
} 
else if (Input.GetKey("left")){ 
cMotor.SetVelocity(Vector3.left*10.5); 
} 
else if (Input.GetKey("down")){ 
cMotor.SetVelocity(Vector3.back*10.5); 
} 
else if (Input.GetKey("right")){ 
cMotor.SetVelocity(Vector3.right*10.5); 
} 
else if (Input.GetKey("g")){ 
cMotor.SetVelocity(Vector3.down*10.5); 
} 
} 

// This do-nothing function is included just to avoid error messages 
// because SetVelocity tries to call it 

function OnExternalVelocity(){ 
} 

однако я хочу, чтобы иметь возможность заморозить характер в воздухе, чтобы они не падают, но если я установите maxFallSpeed ​​равным 0, после чего я не смогу снова нарисовать символ. Есть идеи?

+0

Я считаю, что это java-скрипт, стоит добавить этот тег к вашему вопросу. –

ответ

0

Я не знаком с CharacterMotor, так как это не стандартный скрипт единственности, а то, что вы написали сами или взяли из учебника. , но имея в виду, могу ли я предположить, что вы отключите жесткое тело, когда никакая клавиша не нажата.

function Update() { 
    if(!Input.anyKey) { 
     Rigidbody.mass = 0.0f; 
     Rigidbody.drag = 50; 
    } else { 
     Rigidbody.mass = 1.0f; // or the stored variabled of the initial mass 
     Rigidbody.drag = 0.7f; 
    } 
} 

Его грубый метод, но он будет работать. вопрос заключается только в том, что ваш персональный двигатель использует любой символ controlrol.m.mu или simplemove, который также перетаскивает символ.

Если это так, добавьте логическое значение в двигатель персонажа, и при выполнении проверки силы тяжести просто отключите bool с помощью Input.anyKey, который вернет true, если какая-либо клавиша нажата, и false, если ни одна клавиша не удерживается.

изменить: код изменяется, как определено в комментариях ниже.

+0

У Rigidbody нет поля «enabled». Это «Компонент», но это не «MonoBehavior». Вам нужно вызвать 'rigidBody.Sleep()' и 'rigidBody.WakeUp()' вместо этого. –

+0

Извините мою ошибку, это действительно так, вы также можете изменить ее массу, установив ее на 0, чтобы игрок оставался на воздухе, но все же мог обрабатывать любые другие изменения окружающей среды. –

+0

Это остановит гравитацию от ее ускорения, но не остановит ее ... –

1

Попробуйте использовать по умолчанию «w, s, a, d» для перемещения и «f, g» для вверх и вниз.

#pragma strict 

var cMotor: CharacterMotor; // reference to the CharacterMotor script 

function Start(){ // get the CharacterMotor script at Start: 
    cMotor = GetComponent(CharacterMotor); 
} 

function Update(){ // move player upwards while F is pressed 

if (Input.GetKey("f")){ 
    cMotor.SetVelocity(Vector3.up*6); 
}else if(Input.GetKeyUp("f")){ 
    cMotor.SetVelocity(Vector3.up*0); 
} 


if(Input.GetKey("g")){ 
    cMotor.SetVelocity(Vector3.down*6); 
}else if(Input.GetKeyUp("g")) { 
    cMotor.SetVelocity(Vector3.down*0); 
} 
} 

// This do-nothing function is included just to avoid error messages 
// because SetVelocity tries to call it 

function OnExternalVelocity(){ 
} 
Смежные вопросы