unity3d 球体碰撞器,当大小改变时不推动物体

apeeds0o  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(138)

所以我试着在我的测试竞技场上做一个小的反推效果,我有一个球体对撞机,这是我的脚本:

// PushBack Class Script
    if (Input.GetKeyDown(KeyCode.Q))
    { 
        explosion_ball.transform.position = transform.position;
        StartCoroutine(WaitAndPrint());
    }

    IEnumerator WaitAndPrint()
    {
        float i = 0;
        while (i < 1)
        {
            i += 0.01f;
            explosion_ball.radius = curve.Evaluate(i) * 10;
            yield return new WaitForSeconds(0.01f);
        }
    }
    //__________//

球体对撞机是设置和东西,但它不推东西回来,像我想的那样。
谢谢你!
编辑:explosion_ball是一个球体碰撞器,我用动画曲线上的点和 * 10来改变它

shyt4zoc

shyt4zoc1#

编辑:Unity刚体进入睡眠状态,因此[如果碰撞器改变大小太快,也将插值更改为连续]
A.检查障碍刚体是否正睡用onTriggerEnterWake Up

void OnTriggerEnter(collider){ if(rb.IsSleeping()){rb.WakeUp();}


B.将此forceWakeUp脚本附加到您希望成为障碍的所有对象。

using UnityEngine;

公共类强制唤醒:单体行为{私有刚体rb;

void Start()
{
    rb = gameObject.GetComponent<Rigidbody>();
}

void Update()
{
    if(rb.IsSleeping()){rb.WakeUp();}
}

}

强制保持许多对象处于激活状态 * 将 * 影响性能。因此,请您决定。

1.你需要放大碰撞器的半径和所有的对象,它应该摆动需要有刚体组件附加到他们
2.如果你正在做上面的事情,并且它没有添加任何力,你可以使用“OnCollisionEnterTrigger”和AddForceMethod在所有重叠的对象上添加一个力,径向远离球体障碍物。
我想你不需要协程。

bvpmtnay

bvpmtnay2#

在Unity脚本API中搜索时,发现了一个名为Rigidbody.AddExplosionForce(explosionForce, explosionPosition, explosionRadius, upwardsModifier, mode)的方法。为了获得受爆炸影响的刚体,我需要使用Physics.OverlapSphere(position, radius)来获得它们,这将获得半径变量内的所有对象,然后获得组件。将这两个方法组合起来也将如下所示:

Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider hit in colliders)
        {
            if (hit.transform.tag == "Interactable")
            {
                if (hit.gameObject != hitgameObject)
                {
                    Rigidbody rb = hit.GetComponent<Rigidbody>();
                    if (rb != null)
                        rb.AddExplosionForce(power, transform.position, radius, upForce, ForceMode.Impulse);
                }
            }
        }

如果有任何解释,你想让我做关于我的变量提到我会回复:)
谢谢你们的帮助。

jckbn6z7

jckbn6z73#

我不知道你的曲线和计算产生的值,但是你可以用Window/Analysis/Physics Debugger直观地检查你的代码,或者写一个gizmo:

private void OnDrawGizmos()
{
    Gizmos.color = new(1.0f, 0.0f, 0.0f, 0.5f);
    Gizmos.DrawSphere(explosion_ball.transform.position, explosion_ball.radius);
}

或者直接使用https://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html

相关问题