Стрельба пулей назад в Unity?

#c# #unity3d #game-development

#c# #unity3d #разработка игр

Вопрос:

Я создаю игру с Unity и изучаю C #. Мне нужна была помощь с механизмом стрельбы пулей для моей игры, поэтому я нашел приведенный ниже скрипт в Unity Answers. Это отлично работает, но запускает пулю назад (что поставило бы любого в игре в плохую ситуацию). Кто-нибудь может помочь? Спасибо!

 using UnityEngine;
using System.Collections;

public class ShootDemo : MonoBehaviour
{
    public Rigidbody projectile;
    public float speed = 20;

    // Update is called once per frame
    void Update()
        {
        if (Input.GetButtonDown("Fire1"))
        {
            Rigidbody instantiatedProjectile = Instantiate(projectile, transform.position, 
transform.rotation) as Rigidbody;
            instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0, speed));
        }
    }
}
  

Ответ №1:

То, что у вас есть, сработало бы, если бы у вас была прямая (синяя ось) игрового объекта ShootDemo , указывающая в направлении, в котором вы хотели бы стрелять.

пример осей

Тот факт, что это стреляет в противоположном направлении, означает, что направление вперед фактически указывает в противоположном направлении.

Принимая это во внимание, отрицая скорость, скорость изменится на противоположную, чтобы создать желаемый эффект:

 instantiatedProjectile.velocity = transform.forward * -speed;
  

Или в формате, который вы уже использовали

 instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0, -speed));
  

Комментарии:

1. Хммм… Я использую метод, в котором сценарий применяется к пистолету, а пуля применяется к сценарию. Это сработает? У меня нет игрового объекта с именем ShootDemo; это имя скрипта. (Кстати, я ценю ваши усилия по объяснению того, что такое синяя стрелка, но я уже знаю, что это ось Z. Спасибо, хотя!)

2. О, ХОРОШО. Ура! Это работает! В любом случае, спасибо, и если бы это не прошло, я пометил бы ваш ответ как законный.