Скорость выстрела

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Скорость выстрела

Сообщение slavut-17 17 апр 2013, 22:21

Мне нужно чтобы если нажата кнопка ЛКМ, тогда пули вылетали не подряд, а через несколько секунд, ато при одном удержании они по 10 шт вылетают
Вот сам скрипт

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

public class Weapon1 : MonoBehaviour {

public Transform bullet; //Префаб патрона
public int BulletForce = 5000; //Скорость патрона
public int CurAmmoCount = 10; //Текущее кол-во патронов
public AudioClip Fire; //Аудиоклип воспроизводящийся во время стрельбы
public AudioClip Reload; //Аудиоклип воспроизводящийся во время перезарядки
// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update ()
{
if(Input.GetMouseButtonDown(0)) //Если нажата ЛКМ и кол-во патронов больше 0
{
Transform BulletInstance = (Transform) Instantiate(bullet, GameObject.Find("BulletSpawnPoint").transform.position, Quaternion.identity); //Генерится префаб патрона в координатах объекта "BulletSpawnPoint"
BulletInstance.rigidbody.AddForce(transform.forward * BulletForce); //Сгенерированый патрон отправляется вперед со скоростью "BulletForce"
CurAmmoCount = CurAmmoCount - 1; //-1 патрон
audio.PlayOneShot(Fire); //проигрываем звук выстрела
}
        }}
slavut-17
UNITрон
 
Сообщения: 176
Зарегистрирован: 23 сен 2011, 16:37

Re: Скорость выстрела

Сообщение Tolking 17 апр 2013, 22:32

Заведи переменную где засекай время от последнего выстрела. Если времени достаточно прошло, следующий выстрел производи.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Скорость выстрела

Сообщение johnquincy 17 апр 2013, 23:56

Механизмы реализации подобных вещей интересно смотреть в исходниках других игр, будь то half-life или doom.
johnquincy
UNец
 
Сообщения: 13
Зарегистрирован: 13 апр 2013, 21:59

Re: Скорость выстрела

Сообщение Diab10 18 апр 2013, 08:44

johnquincy писал(а):Механизмы реализации подобных вещей интересно смотреть в исходниках других игр, будь то half-life или doom.


Да что там смотреть то? Проверяем сколько времени прошло с последнего выстрела, и стреляем дальше
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Скорость выстрела

Сообщение nile 18 апр 2013, 08:53

Тема избитая

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

public class Fire : MonoBehaviour {
        float t =0F; //таймер
       
        // Update is called once per frame
        void Update () {

                if(Input.GetButton("Fire1"))
                        {
                       
                                if(t==0)fire();  //если таймер на 0, делаем выстрел
                       
                                t+=Time.deltaTime; //запускаем таймер
                                if (t>0.1F)  //если больше 0.1 секунды
                                        {
                                                t=0;     //обнуляем, и как следствие, делаем выстрел
                                        }
                        }
                else t=0;  //при прекращении огня обнуляем таймер, но выстрела не следует, тк не нажата кнопка стрельбы
        }
        void fire()
                        {
                                //обработчик единичного выстрела
                                //логика + анимацмя + звук
                        }
}

 




На счет этого:
BulletInstance.rigidbody.AddForce(transform.forward * BulletForce);

Во первых, если уж на то пошло, BulletInstance.rigidbody.AddForce(transform.forward * BulletForce , ForceMode.Impulse );

Во вторых, физика коллизий по размеру и скорости сравнимых с пулей, не успевает обрабатываться должным образом, при попадании в цели.
Так что в играх часто это просчитывается чистой геометрией + спецэффекты. Понятное дело через RayCast. Если есть баллистика - то для луча у raycast делается поправка по вертикали.
Последний раз редактировалось nile 18 апр 2013, 15:12, всего редактировалось 2 раз(а).
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17

Re: Скорость выстрела

Сообщение UNLOCKALL 18 апр 2013, 14:21

nile писал(а):Тема избитая

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

public class Fire : MonoBehaviour {
        float t =0F; //таймер
       
        // Update is called once per frame
        void Update () {

                if(Input.GetButton("Fire1"))
                        {
                       
                                if(t==0)fire();  //если таймер на 0, делаем выстрел
                       
                                t+=Time.deltaTime; //запускаем таймер
                                if (t>0.1F)  //если больше 0.1 секунды
                                        {
                                                t=0;     //обнуляем, и как следствие, делаем выстрел
                                        }
                        }
                else t=0;  //при прекращении огня обнуляем тайме
        }
        void fire()
                        {
                                //обработчик единичного выстрела
                                //логика + анимацмя + звук
                        }
}

 




На счет этого:
BulletInstance.rigidbody.AddForce(transform.forward * BulletForce);

Во первых, если уж на то пошло, BulletInstance.rigidbody.AddForce(transform.forward * BulletForce , ForceMode.Impulse );

Во вторых, физика коллизий по размеру и скорости сравнимых с пулей, не успевает обрабатываться.
Так что в играх это просчитывается чистой геометрией + спецэффекты. Понятное дело через RayCast. Если есть баллистика - то для луча у raycast делается поправка по вертикали.

Можно и пулю респить, просто потом пускать луч от предыдущей позиции пули к текущей, а на пуле уже просчитывать перемещение, балистику и т.д. Да и такой скрипт будет более универсальным.
UNLOCKALL
UNец
 
Сообщения: 35
Зарегистрирован: 04 апр 2012, 16:27

Re: Скорость выстрела

Сообщение nile 18 апр 2013, 15:06

Можно и пулю респить, просто потом пускать луч от предыдущей позиции пули к текущей, а на пуле уже просчитывать перемещение, балистику и т.д. Да и такой скрипт будет более универсальным.


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

Думаю, по реалистичной баллистике лучше создать отдельную тему, в этой все-таки вопрос стоял о частоте выстрелов.
Аватара пользователя
nile
Старожил
 
Сообщения: 848
Зарегистрирован: 25 фев 2011, 17:17

Re: Скорость выстрела

Сообщение johnquincy 19 апр 2013, 11:55

Diab10 писал(а):Да что там смотреть то?

На все то, из-за чего возникают подобные темы.
johnquincy
UNец
 
Сообщения: 13
Зарегистрирован: 13 апр 2013, 21:59


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 26