Unity 3.3,在物体上创建局部重力
本文关键字:创建局 Unity | 更新日期: 2023-09-27 18:30:27
使用 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;
}
}
您可以做的是添加一个碰撞框,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
}
编辑*
如果我明白你关于坚持一个对象的说法,你需要做的是让这个对象成为需要坚持它的对象的父级