统一3.3,在物体上创造局部引力

时间:2012-04-06 13:49:51

标签: c# unity3d gravity

使用Unity 3.3。 visual studio express 2010.和c#。

我需要制作一个附加到对象的脚本。 该对象将创建自己的重力场,吸引 - 排斥环境中的所有对象。

不幸的是,由于统一物理学,我不确定如何做到这一点。我需要该物体覆盖所有其他物体吗?我是否支持统一主要物理学?这项工作怎么样? 或者,当它是一个简单的脚本时,我是否过于复杂化了?

不,我不想添加一个装备体,因此物体会因重力而下降,它必须创造更强大的重力。

干杯

UPDATE!

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);

UPDATE :: 好吧,我正在尝试这个,它似乎运作良好,但它附加到被吸引的对象。我也希望有人有更好的主意吗?

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

1 个答案:

答案 0 :(得分:1)

你可以做的是添加一个碰撞盒,它将unity作为一个组件添加到任何游戏对象中,然后检查是否有任何东西进入该碰撞盒并向碰撞的对象添加力。如果需要,我会给你样例代码。

//修改

你可以将自己的引力添加到一个脚本中,并拥有自己的功能来增加力量,使其向一个方向移动,但这样你知道你可以改变多少重力。身体确实

但是如果你想做自己的引力你可以做

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
}

编辑*

如果我得到关于坚持一个对象的说法你需要做的就是使对象成为需要坚持它的对象的父对象