#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. О, ХОРОШО. Ура! Это работает! В любом случае, спасибо, и если бы это не прошло, я пометил бы ваш ответ как законный.