【问题标题】:How can I repeat this boost (push)?我怎样才能重复这个提升(推)?
【发布时间】:2019-05-20 17:51:39
【问题描述】:

我不明白如何在我的 Unity 版本中使这种霰弹枪跳跃:https://www.youtube.com/watch?v=FUkdz8jYt3w

这是如何工作的?

我正在使用看起来像胶囊的“第一人称控制器” 有图: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 时,我预计这会起作用,但我的胶囊甚至没有移动。

【问题讨论】:

  • 你在做什么用grenade 脚本生成GameObjects?

标签: c# unity3d


【解决方案1】:

签出

的可选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 个单位处居中(即,中心和效果半径未修改)。


注意:在智能手机上输入,因此没有保修,但我希望这个想法变得清晰

【讨论】:

  • 对不起,我忘记了另一个对撞机,如何添加另一个?
  • 嗯,我有另一个想法,但是当我按 LMB 时,我正在下飞机
猜你喜欢
  • 2012-11-27
  • 2014-08-11
  • 2021-02-12
  • 2018-09-21
  • 2023-04-05
  • 2021-07-16
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多