我从未使用过isKinematic
属性,该对象具有8个车轮碰撞器,并且对象的质量为20000。
我尝试了所有组合;我用x y z加力
Obj.GetComponent.<Rigidbody>().AddRelativeTorque( V*(spd)*1000, 0,0);
,
但他们都不起作用!飞机停了下来。
可能是什么问题呢?
这是我的代码:
var Obj : Rigidbody;
var zrotForce : int = 1;
var MaxRot : int = 90;
var MinRot : int = -90;
var rotupForce : int = 1;
var speed : float;
var speedincrease : float;
var speeddecrease : float;
var Maxspeed : int;
var Minspeed : int;
var takeoffspeed : int;
var lift : int;
var minlift : int;
var hit = false;
function Start () {
InvokeRepeating("Speed", .1, .1);
}
function Speed(){
if (Input.GetKey(KeyCode.Space)){
Mathf.Repeat(1,Time.time);
speed=speed+speedincrease;
}
if (Input.GetKey(KeyCode.LeftAlt)){
Mathf.Repeat(1,Time.time);
speed=speed-speeddecrease;
}
}
function Update () {
var spd = Obj.velocity.magnitude;
//Obj.GetComponent.<Rigidbody>().AddRelativeForce(0,0,-speed);
H=(Input.GetAxis ("Horizontal"))*zrotForce;
if (H){
Obj.GetComponent.<Rigidbody>().AddRelativeTorque(H*(spd/100), 0, 0);
}
V=(Input.GetAxis ("Vertical"))*rotupForce;
if (V){
Obj.GetComponent.<Rigidbody>().AddRelativeTorque( V*(spd)*1000, 0,0);
}
if(Maxspeed<=speed){
speed=Maxspeed;
}else{
speed=speed;
}
if(Minspeed>=speed){
speed=Minspeed;
}else{
speed=speed;
}
if (speed<takeoffspeed){
Obj.GetComponent.<Rigidbody>().AddForce(0,minlift,0);
}
if(speed>takeoffspeed){
Obj.GetComponent.<Rigidbody>().AddForce(0,lift,0);
}
if (Obj.GetComponent.<Rigidbody>().rotation.z>MaxRot){
Obj.GetComponent.<Rigidbody>().rotation.z=MaxRot;
}
if (Obj.GetComponent.<Rigidbody>().rotation.z<MinRot){
Obj.GetComponent.<Rigidbody>().rotation.z=MinRot;
}
}
最佳答案
有两种原因导致力或转矩不起作用:-
1)刚体的质量太高。所以你要么
改变其质量或增加力量。例如,根据需要,移动质量为1单位的对象所需的力必须介于100-200之间或更大。
2)宣布刚体为运动学时,则只能使用脚本或动画更改其变形。如果您不希望刚体受重力影响并保持浮动,则只需取消选中isGravity和isKinematic(这将使物体保持在空气中,还可以根据需要使用力或转矩来影响它)。
关于javascript - AddForce无法在Unity中工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34885092/