2

Unity3.3の使用。Visual Studio Express 2010.およびC#。

オブジェクトに添付されるスクリプトを作成する必要があります。このオブジェクトは、環境内のすべてのオブジェクトを引き付ける独自の重力場を作成します。

残念ながら、物理学が統一されているため、これを行う方法がわかりません。他のすべてのオブジェクトを上書きするためにオブジェクトが必要ですか?ユニティの主な物理学を無効にしますか?これはどのように機能しますか?それとも、単純なスクリプトの場合、物事を複雑にしすぎていますか?

いいえ、オブジェクトが重力とともに落下するようにリギグボディを追加したくないので、はるかに強力な重力を作成する必要があります。

乾杯

アップデート!

public float radius = 5.0f;
public float power = -20f;
void Start () 
{
    //GameObject gravityObject = GameObject.FindGameObjectWithTag("GravitySwell");
    //gravSlime = gravityObject.transform;      
}

void Update () 
{
    Vector3 explosionPos = transform.position;
    Collider[] colliders = Physics.OverlapSphere(explosionPos, radius, 3);
    foreach (Collider hit in colliders)
    {
        if (!hit)
        {
            continue;
        }
        if (hit.rigidbody)
        {
            hit.rigidbody.AddExplosionForce(power, explosionPos, radius, 3);
        }
    }
}
}

これは、オブジェクトを引き付ける負の力を追加するときに機能します。問題は、このスクリプトが割り当てられている魅力的なオブジェクトが空中にあることです。捕らえられた物体はそれに向かって飛んでいきますが、その後は落下して再び引き付けられるように見えます。理由についてのヒントはありますか?

私はこのようなことを考えていましたが、何も起こりません:

Vector3 direction = this.transform.position - hit.transform.position;
direction.Normalize();
            //hit.rigidbody.AddExplosionForce(power, explosionPos, radius, 3);
            //hit.transform.position.;
hit.rigidbody.isKinematic = false;
hit.rigidbody.AddForce(direction);

更新::わかりました。これを試してみました。うまく機能しているようですが、引き付けられているオブジェクトにアタッチされています。また、誰かがもっと良いアイデアを持っているかどうかを期待していましたか?

public void OnCollisionEnter(Collision col)
{
if(col.gameObject.tag == "GravitySwell")
{
    Debug.Log("i hit it!!!");
    rigidbody.velocity = Vector3.zero;
}
}
4

1 に答える 1

1

できることは、ユニティが任意のgameObjectsに追加するコンポーネントとして持つ衝突ボックスを追加し、次にその衝突ボックスに何かが入っているかどうかを確認し、衝突しているオブジェクトに力を追加することです。必要に応じてサンプルコードを入手します。

//編集

スクリプトに独自の重力を追加し、力を追加してスクリプトをある方向に移動させる独自の関数を使用できますが、重力をどの程度取り除くかを変更できることがわかります。体はします

しかし、あなたがあなた自身の重力をしたいなら、あなたはすることができます

bool grounded = false;

void gravity(){

    gameObject.trasform.position.x -= gravity

}

void onCollisionEnter(collision c){
     //check and see what you are colliding with and if its the ground then set grounded to true and that will get you falling gravity. there is more you can do for more adv. gravity but ill leave that up to you
}

編集*

オブジェクトに固執することについてあなたが言っていることがわかったら、あなたがしなければならないことは、そのオブジェクトを、それに固執する必要のあるオブジェクトの親にすることです。

于 2012-04-06T16:34:19.497 に答える