我该如何重复这种增强(推动)?

时间:2019-05-20 17:51:39

标签: c# unity3d

我不知道如何在我的Unity版本https://www.youtube.com/watch?v=FUkdz8jYt3w

中使这把shot弹枪跳起来

这是如何工作的?

我正在使用看起来像胶囊的“第一人称控制器” 有图像:https://imgur.com/a/uvfAePX

这是旧版本的Unity 4.5.5。我已经尝试过RigidBody,但没有任何反应。我已经尝试过Transform,但还是没有结果。

第一人称控制者:

using UnityEngine;
using System.Collections;

public class run : MonoBehaviour 
{
    public float speed = 6.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;
    private Vector3 moveDirection = Vector3.zero;
    public Transform character;
    public int CharacterForce = 5000;
    public int time = 1;

    void Update() 
    {
        CharacterController controller = 
        GetComponent<CharacterController>();

        if (controller.isGrounded) 
        {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis ("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;

            if (Input.GetButton("Jump"))
                moveDirection.y = jumpSpeed;
        }

        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move (moveDirection * Time.deltaTime);

        if (Input.GetMouseButtonDown(0)) 
        {
            Transform BulletInstance = (Transform)Instantiate(character, GameObject.Find("CameraRSP").transform.position, Quaternion.identity);

            BulletInstance.GetComponent<Rigidbody>().AddForce(transform.forward * CharacterForce);
        }
    }
}

“手榴弹”代码:

using UnityEngine;
using System.Collections;

public class grenade : MonoBehaviour 
{
    public Transform GrenadeF;
    public int force = 500;
    public float radius;

    void Start() 
    {
        Collider[] col = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider c in col) 
        {
            c.GetComponent<Rigidbody>().AddExplosionForce(force, transform.position, radius);
        }
    }

    private void OnDrawGizmosSelected() 
    {
        Gizmos.color = Color.blue;
        Gizmos.DrawWireSphere(transform.position, radius);
    }
}

当我使用Transform时,我希望它可以在任何方向上工作,但它只能在一个方向上工作。 当我使用RigidBody时,我希望这样做会起作用,但是我的胶囊甚至都没有动。

1 个答案:

答案 0 :(得分:2)

检出

的可选upwardsModifier参数
AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0f, ForceMode mode = ForceMode.Force));

(Unity 4的API不再可用,但我想那里应该已经一样了

  

调整爆炸的视在位置,使其看起来像举起物体。

  

使用此参数,可以使爆炸看起来像是将物体扔向空中,这可以产生更戏剧性的效果,而不是简单的向外作用力。力只能施加到活动的刚体上。

默认情况下为0,因此如果您不通过它,则不会有任何向上的作用力。


如您在API

的示例中所见
Vector3 explosionPos = transform.position;
Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
foreach (Collider hit in colliders)
{
    Rigidbody rb = hit.GetComponent<Rigidbody>();
    //                                                        |
    //                                                        v
    if (rb) rb.AddExplosionForce(power, explosionPos, radius, 3.0f);
}

他们通过了3.0fupwardsModifier。这使得爆炸

  

为了计算力的方向(即,效果的中心和半径未修改),似乎居中于其实际位置以下3.0个单位。


注意:请在智能手机上输入内容,因此无需任何担保,但我希望这个主意会清楚