Unity стреляет мячом из камеры от первого лица

Я знаю, что это задавали несколько раз, но я считаю, что мой вопрос можно решить без особых проблем (надеюсь!), И он в некоторой степени уникален. Я пишу сценарий мини-гольфа, который стреляет в мяч, предназначенный для стрельбы вдали от точки обзора камеры. Однако я не могу заставить его это сделать. Я уверен, что это как-то связано с camera.transform, но не уверен. Я полный новичок в программировании на Unity. Мне просто нужен простой и понятный способ заставить этот чёртов мяч для гольфа двигаться по прямой в любом направлении, куда смотрит камера. Пожалуйста помоги!

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

public class HitBall2 : MonoBehaviour
{

    Rigidbody rigidBody;
    bool StartedShot;
    Vector3 shotStart;
    Vector3 shotEnd;
    Vector3 direction;
    public float distance;
    public float forceAdjust = 0.05f;

    void Start()
    {

        rigidBody = this.GetComponent<Rigidbody>();
        StartedShot = false;
    }


    void Update()
    {
        if (Input.GetMouseButtonUp(1))
        {
            rigidBody.velocity = Vector3.zero;
            this.transform.position = Vector3.zero;
            StartedShot = false;
        }

        // Starting shot
        if (!StartedShot && Input.GetMouseButtonDown(0))
        {
            StartedShot = true;
            shotStart = Input.mousePosition;
        }

        // Ending shot
        if (StartedShot && Input.GetMouseButtonUp(0))
        {
            shotEnd = Input.mousePosition;
            direction =  Camera.main.transform.forward - shotEnd;
            float distance = direction.magnitude;
            StartedShot = false;

            Vector3 shootDirection = new Vector3(direction.x, 0.0f, direction.y);

            rigidBody.AddForce(shootDirection * rigidBody.mass * forceAdjust, ForceMode.Impulse);
        }
    }
}

Camera.main.transform.forward?

AresCaelum 26.10.2018 04:30
direction = Camera.main.transform.forward; вместо direction = Camera.main.transform.forward - shotEnd;
Ryolu 26.10.2018 05:27

В чем проблема? Мяч вообще стреляет? Стреляет назад?

CaTs 26.10.2018 05:28

@CaTs, стреляет перпендикулярно камере влево (по оси x), вдали от камеры не стреляет.

pfbarnet 26.10.2018 14:13

Я пробовал Camera.main.transform.forward, но он не работает так, как я надеялся. Я думаю, что моя проблема может быть связана с «Vector3 ShootDirection = new Vector3 (direction.x ...). Я вырезал этот код у кого-то другого (спасибо!), Но у меня недостаточно опыта, чтобы отредактировать его так, как мне нужно.

pfbarnet 26.10.2018 14:15
0
5
202
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как упоминалось в комментариях выше, чтобы стрелять вперед, просто используйте камеру transform.forward

Хорошо, я изменил сценарий следующим образом, и теперь мяч улетает от камеры. Есть небольшая проблема со скоростью мяча и небольшим прыжком по оси Y, но я уверен, что это легко понять.

изменено "Vector3 ShootDirection = new Vector3 (direction.x, 0.0f, direction.y);"

в Vector3 ShotDirection = Camera.main.transform.forward;

Спасибо всем!

Другие вопросы по теме