1. ホーム
  2. javascript

[解決済み] AddForceが動作しない Unity

2022-01-31 14:36:41

質問

を使ったことはありません。 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;
    }
}

解決方法は?

力またはトルクが働かない原因は2つあります :-)

1)その 剛体の質量が大きすぎます。 . だから、あなたはどちらかをする必要があります。 質量を変えるか、力を大きくするかです。例えば、質量が1ユニットの物体を動かすのに必要な力は、100~200の間でなければならず、要件によってはそれ以上かもしれません。

2) リジッドボディがキネマティック宣言されている場合、スクリプトまたはアニメーションを使用してのみその変形を変更することができます。 もしRigidbodyが重力の影響を受けず、浮遊し続けたい場合は、isGravityとisKinematicのチェックを外してください(これにより、オブジェクトは空中に保たれ、必要に応じて力またはトルクで影響を与えることができます)。