Нерест снарядов с неправильной траекторией - PullRequest
0 голосов
/ 28 октября 2019

Я написал сценарий для оружия и снаряда, но всякий раз, когда я стреляю, он стреляет только в правильном направлении, когда я указываю вверх, если я указываю в стороны, он стреляет вниз, а если я указываю вниз, он стреляет вверх.

Я пытался получить простой сценарий, который заставляет ружье поворачиваться лицом к мыши (работает), а затем порождает пули, идущие при стрельбе из ружья, однако они странно появляются, когда не смотрят вверхЯ попытался изменить объект, в котором есть сценарий, но больше ничего, поскольку я не совсем уверен, в чем заключается ошибка.

Сценарий оружия:

using UnityEngine;
using System.Collections;

public class Gun : MonoBehaviour
{

    public float offset;

    public GameObject projectile;
    public Transform shotPoint;

    private float timeBtwShots;
    public float startTimeBtwShots;

    private void Update()
    {
        Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
        float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
        transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);

        if (timeBtwShots <= 0)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Instantiate(projectile, shotPoint.position, transform.rotation);
                timeBtwShots = startTimeBtwShots;

            }
        }
        else
        {
            timeBtwShots -= Time.deltaTime;
        }

    }

}

Сценарий снаряда:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Projectile : MonoBehaviour
{
    public float pSpeed;

    public float lifeTime;

    public GameObject destroyEffect;

    private void Start()
    {
        Invoke("DestroyProjectile", lifeTime);
    }

    private void Update()
    {
        transform.Translate(transform.up * pSpeed * Time.deltaTime);
    }

    void DestroyProjectile()
    {

        Destroy(gameObject);
    }
}

Я знаю, что в сценарии снаряда я изменяю transform.up в обновлении void на transform.right или оставляю эффект полностью изменяющимся, и oly стреляет правильно в направлении, которое я напечатал, но я не знаю, как это сделать. заставить его стрелять правильно во всех направлениях.

1 Ответ

0 голосов
/ 28 октября 2019

Я бы держал ссылку на направление стрельбы в снаряде, а затем перемещал каждый кадр на основе этого направления. Таким образом, после того, как мы Instantiate снаряд, мы вычисляем Вектор направления на основе вращения оружия / игроков. Следующий код должен делать именно то, что вы ищете, но он не проверен, так как я сейчас использую свой телефон! Надеюсь, это поможет!

Внутри снаряда.

public Vector3 directionFired;

Внутри оружия.

GameObject proj = Instantiate(projectile, shotPoint.position, transform.rotation);
proj.directionFired = Quaternion.Euler(transform.rotation) * Vector3.forward;
timeBtwShots = startTimeBtwShots;

Обновление внутри снаряда

transform.Translate(directionFired * pSpeed * Time.deltaTime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...