Unity2D Разброс пуль | Проблема со скриптом

Программирование на Юнити.

Unity2D Разброс пуль | Проблема со скриптом

Сообщение FirstGameMaker 20 мар 2020, 16:57

Имеется скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyShot : MonoBehaviour
{

    public Rigidbody2D bullet;
    public Transform gunPoint;
    public float fireRate = 1;
    float elapsedTime = 0.0f;
    public float speed = 10;
    public float ScatterBullets = 0;
    public Collider2D col;
    public AudioSource SoundShot;
    public AudioClip Hit_00;




    void OnTriggerStay2D(Collider2D col)
    {
        if (col.gameObject.tag == "Player")
        {
            elapsedTime += Time.deltaTime;

            if (elapsedTime > fireRate)
            {
                elapsedTime = 0.0f;
                Vector3 direction = gunPoint.position;
                Rigidbody2D clone = Instantiate(bullet, gunPoint.position, gunPoint.rotation * Quaternion.Euler(Random.Range(-ScatterBullets, 0), Random.Range(-ScatterBullets, ScatterBullets), 0)) as Rigidbody2D;
                clone.velocity = transform.TransformDirection (gunPoint.right * speed);
                clone.transform.right = gunPoint.right;
                SoundShot.PlayOneShot(Hit_00);
            }
        }
    }
}
 

Проблема в том, что пули летят по по прямой вне зависимости от значения переменной ScatterBullets, в чём причина? Объясните пожалуйста, буду благодарен)
FirstGameMaker
UNец
 
Сообщения: 39
Зарегистрирован: 29 апр 2019, 11:57

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение 1max1 20 мар 2020, 17:02

Синтаксис:
Используется csharp
clone.transform.right = gunPoint.right;

Вот этой строчкой ты задаешь поворот пули такой же как у gunPoint по right.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение FirstGameMaker 20 мар 2020, 18:22

1max1 писал(а):
Синтаксис:
Используется csharp
clone.transform.right = gunPoint.right;

Вот этой строчкой ты задаешь поворот пули такой же как у gunPoint по right.

Точно, забыл убрать строчку. Спасибо!
FirstGameMaker
UNец
 
Сообщения: 39
Зарегистрирован: 29 апр 2019, 11:57

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение FirstGameMaker 20 мар 2020, 18:36

Так-с новая проблема, в этом скрипте меняется поворот самой пули, а мне нужно, чтобы менялся поворот gunPoint, вызывая таким образом разброс при стрельбе.Теперь я не понимаю как это сделать, в очередной раз прошу вашей помощи)
FirstGameMaker
UNец
 
Сообщения: 39
Зарегистрирован: 29 апр 2019, 11:57

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение 1max1 20 мар 2020, 19:02

Зависит от того как ты хочешь чтобы был разброс.
Ну вот пример простой, где рандомится поворот от начальной позиции:

Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    public Transform gun;

    Quaternion start;

    void Start()
    {
        start = gun.rotation;
    }

    void Attack()
    {
        // бла бла бла

        float x = Random.Range(-10.0f, -10.0f);
        float y = Random.Range(-10.0f, -10.0f);
        float z = Random.Range(-10.0f, -10.0f);

        gun.rotation = start * Quaternion.Euler(x, y, z);
    }
}
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение FirstGameMaker 21 мар 2020, 07:37

1max1 писал(а):Зависит от того как ты хочешь чтобы был разброс.
Ну вот пример простой, где рандомится поворот от начальной позиции:

Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    public Transform gun;

    Quaternion start;

    void Start()
    {
        start = gun.rotation;
    }

    void Attack()
    {
        // бла бла бла

        float x = Random.Range(-10.0f, -10.0f);
        float y = Random.Range(-10.0f, -10.0f);
        float z = Random.Range(-10.0f, -10.0f);

        gun.rotation = start * Quaternion.Euler(x, y, z);
    }
}

Этот вариант вполне подходит, спасибо ОГРОМНОЕ! Вот финальный скрипт если кому-то надо:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class EnemyShot : MonoBehaviour
{

    public Rigidbody2D bullet;
    public Transform gunPoint;
    public float fireRate = 1;
    float elapsedTime = 0.0f;
    public float speed = 10;
    public float ScatterBullets = 0;
    public Collider2D col;
    public AudioSource SoundShot;
    public AudioClip Hit_00;
    Quaternion start;

    void Start()
    {
        start = gunPoint.rotation;
    }





    void OnTriggerStay2D(Collider2D col)
    {
        if (col.gameObject.tag == "Player")
        {
            elapsedTime += Time.deltaTime;

            if (elapsedTime > fireRate)
            {
                elapsedTime = 0.0f;

                float x = Random.Range(-ScatterBullets, ScatterBullets);
                float y = Random.Range(-ScatterBullets, ScatterBullets);
                float z = Random.Range(-ScatterBullets, ScatterBullets);

                gunPoint.rotation = start * Quaternion.Euler(x, y, z);

                Vector3 direction = gunPoint.position;
                Rigidbody2D clone = Instantiate(bullet, gunPoint.position, gunPoint.rotation) as Rigidbody2D;
                clone.velocity = transform.TransformDirection (gunPoint.right * speed);

                SoundShot.PlayOneShot(Hit_00);
            }
        }
    }
}
 

Но в целях саморазвития хотел бы поинтересоваться какие ещё есть варианты)
FirstGameMaker
UNец
 
Сообщения: 39
Зарегистрирован: 29 апр 2019, 11:57

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение 1max1 21 мар 2020, 08:00

Вариант не от стартового поворота рандомить, а от текущего.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Unity2D Разброс пуль | Проблема со скриптом

Сообщение FirstGameMaker 21 мар 2020, 15:05

1max1 писал(а):Вариант не от стартового поворота рандомить, а от текущего.
Ещё раз спасибо вам за потраченное время, обязательно изучу этот вариант.
FirstGameMaker
UNец
 
Сообщения: 39
Зарегистрирован: 29 апр 2019, 11:57


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 15