alon_mix
@alon_mix
1

Стрельба в 2D из пушки на клик как сделать?

я не понимаю как сделать, чтобы пуля летела на клик мыши. Сейчас у меня он просто стреляет в определенный угол, но мне нужно чтобы она реагировала на клик и стреляла в него пулей.

public class Cannnon : MonoBehaviour
{
    public GameObject currentProjectille;

    public float shootDelay;

    public int moveSpeed;

    public Transform shootPostion; // пустой объект на дуле пушки

    private float shootDelayCounter;

    private Rigidbody2D myRigidbody;

    void Update ()
    {
        OnMouseOver ();
    }

    void OnMouseOver ()
    {
        shootDelayCounter += Time.deltaTime;

       // RotateToClick (); 

        if (Input.GetMouseButtonDown (0))
        {
            RotateToClick (); 

            if (shootDelayCounter >= shootDelay)
            {
                Instantiate (currentProjectille, shootPostion.position, shootPostion.rotation);
                shootDelayCounter = 0;
            }
        }
    }


    
    private Vector3 mousePosition;

    private float angle;

    void RotateToClick ()
    {
        float RotateSpeed = 100;
        //позиция мыши в мировых координатах
        mousePosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);

        // Угол между объектами
        angle = Vector2.Angle (Vector2.right, mousePosition - transform.position); //угол между вектором от объекта к мыше и осью х

        // Мгновенное вращение
        transform.eulerAngles = new Vector3 (0f, 0f, transform.position.y < mousePosition.y ? angle : -angle);

      
    }

}


Скрипт пули
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour {

    public float moveSpeed;

    private Rigidbody2D myRigidbody;
    private Vector3 mousePosition;
    private float angle;
    void Start ()
    {
       
        myRigidbody = GetComponent<Rigidbody2D> ();
        myRigidbody.AddRelativeForce (Vector2.right * moveSpeed, ForceMode2D.Impulse);
    }

    void OnBecameInvisible ()
    {
        Destroy (gameObject);
    }
}
  • Вопрос задан
  • 5177 просмотров
Решения вопроса 2
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Вы наверное хотели использовать Quaternion.LookRotation, правильнее будет так:
Instantiate(currentProjectille, transform.position, Quaternion.LookRotation(transform.position + direction));
Ответ написан
Комментировать
MrMureno
@MrMureno Куратор тега Unity
VR for all
Ура. вы аккуратно все выложили и это можно потестить.
смотрите у вас по сути в общем то все верно и отлично , кроме момента применения силы

попробуйте применить

myRigidbody.AddForce(transform.right * moveSpeed, ForceMode2D.Impulse);

у вас сейчас кидает по сути вправо от текущего направления объекта потому что применяете AddRelativeForce .

А вам надо глобальный вектор силы применить, посчитав его на основе текущего направления объекта.
transform.right , transform.fwd и transform.up как раз и содержат этот глобальный вектор "куда направлен сейчас объект", по какой либо из осей)
выберите нужную просто. для 2D вроде как раз красная ось transform.right
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы