【问题标题】:unity 3.3, create local gravity on objectunity 3.3,在物体上创建局部重力
【发布时间】:2012-04-06 13:49:50
【问题描述】:

使用 Unity 3.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;
}
}

【问题讨论】:

  • k 如果我将重力从刚体上移开,这会起作用,但它看起来真的很垃圾。它太慢了,当物体撞击重力物体的表面时,它的速度就像它应该携带的那样,但它最终会反弹。有什么方法可以让它更快地移动并粘在物体上而不使其位置=重力物体的位置?

标签: c# unity3d gravity


【解决方案1】:

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

//编辑

您可以将自己的重力添加到脚本中,并拥有自己的函数来增加力以使其朝一个方向移动,但只是为了让您知道可以改变多少重力。身体呢

但如果你想自己做重力,你可以做

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
}

编辑*

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

【讨论】:

  • 我更新了如何使一个对象“粘”到另一个没有 out = 位置的对象。这样做是使对象的 0,0 成为父对象,如果父对象移动,它的子对象也会移动。今晚晚些时候我会在家里看看剩下的。
  • 抱歉我还没有机会尝试,所以听起来你现在的问题是它被吸引然后下降然后再次被吸引,它应该被吸引后下降吗?如果是这样,那么您可以在其中放置一个变量,说明它是否已被吸引
  • 我更新了我的帖子,物体现在被吸引了,并且 idd 确实飞向了我的重力物体。但是一旦它撞到表面,它也会像想象的那样反弹。我实际上需要它一旦到达表面就粘住但不是固定位置
  • 如果您需要对象粘在它上面,然后在主对象移动时移动,然后在主对象移动时以这种方式撞击时使对象成为主对象的子对象,它也会移动另一个对象但它仍然可以让你自己移动它需要的子对象
  • 你能给我看一些代码吗?这有点令人困惑,呵呵
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
相关资源
最近更新 更多