Как я могу повторить это повышение (толчок)? - PullRequest
2 голосов
/ 20 мая 2019

Я не понимаю, как я могу сделать этот прыжок из дробовика в моей версии 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, я ожидал, что это сработает, но моя капсула даже не сдвинулась.

1 Ответ

2 голосов
/ 21 мая 2019

Оформить заказ дополнительного upwardsModifier параметра

AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0f, ForceMode mode = ForceMode.Force));

(API для Unity 4 больше не доступен, но я думаю, что там должно быть то же самое)

Корректировка видимого положения взрыва, чтобы казалось, что он поднимает предметы.

и

Используя этот параметр, вы можете создать впечатление, что взрыв подбрасывает объекты в воздух, что может дать более драматический эффект, чем простая внешняя сила. Сила может быть применена только к активному твердому телу.

По умолчанию это 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.0f как upwardsModifier. Это делает взрыв

представляется центрированным на 3,0 единицы ниже его фактического положения для расчета направления силы (т. Е. Центр и радиус воздействия не изменяются).


Примечание: напечатано на смартфоне, так что никаких гарантий, но я надеюсь, что идея проясняется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...