Таймаут между выстрелами
7MaZaHaKa7 Дата: Сб, 31 Май 2014, 09:36 | Сообщение # 1
Сообщений: 9
Награды:
0
Репутация:
0
Статус: Offline
Здравстуйте, дорогие форумчане! Я недавно начал изучать C# и столкнулся с такой проблемой "Как можно реализовать таймауты между выстрелами (Raycast)" Вот в это скрипте Код
using UnityEngine; using System.Collections; public class shoot : MonoBehaviour { private float TimeOut; public AudioClip _shoot; public int Ammo = 1; public int MaXAmmo; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(Input.GetMouseButtonDown(0) &Ammo>0){ Shooting(); } } void Shooting(){ Vector3 DirectionRay = transform.TransformDirection(Vector3.forward); RaycastHit Hit; if(Physics.Raycast(transform.position, DirectionRay,out Hit, 400F)){ if(Hit.transform.GetComponent("CrashGusla")){ CrashGusla CG = (CrashGusla)Hit.transform.GetComponent("CrashGusla"); CG.health -= 100; } if(Hit.transform.GetComponent("CrashTurret")){ } if(Hit.rigidbody){ Hit.rigidbody.AddForceAtPosition(DirectionRay*4000f,Hit.point); } } } void OnGUI(){ GUI.Label(new Rect(100,100,100,100),"Снаряды" +Ammo); } }
Сообщение отредактировал 7MaZaHaKa7 - Сб, 31 Май 2014, 09:37
Сообщение Здравстуйте, дорогие форумчане! Я недавно начал изучать C# и столкнулся с такой проблемой "Как можно реализовать таймауты между выстрелами (Raycast)" Вот в это скрипте Код
using UnityEngine; using System.Collections; public class shoot : MonoBehaviour { private float TimeOut; public AudioClip _shoot; public int Ammo = 1; public int MaXAmmo; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if(Input.GetMouseButtonDown(0) &Ammo>0){ Shooting(); } } void Shooting(){ Vector3 DirectionRay = transform.TransformDirection(Vector3.forward); RaycastHit Hit; if(Physics.Raycast(transform.position, DirectionRay,out Hit, 400F)){ if(Hit.transform.GetComponent("CrashGusla")){ CrashGusla CG = (CrashGusla)Hit.transform.GetComponent("CrashGusla"); CG.health -= 100; } if(Hit.transform.GetComponent("CrashTurret")){ } if(Hit.rigidbody){ Hit.rigidbody.AddForceAtPosition(DirectionRay*4000f,Hit.point); } } } void OnGUI(){ GUI.Label(new Rect(100,100,100,100),"Снаряды" +Ammo); } }
Автор - 7MaZaHaKa7 Дата добавления - 31 Май 2014 в 09:36
Altair Дата: Сб, 31 Май 2014, 14:17 | Сообщение # 2
Unity 3D PRO Developer
Сообщений: 758
Награды:
6
Репутация:
195
Статус: Offline
Юзай либо Coroutine либо через изменение локального(Time.time+fireTime) времени и сопосталении его с Time( if(Time.time>Time.time+fireTime)) Это всё в функции вызывается..
Сообщение Юзай либо Coroutine либо через изменение локального(Time.time+fireTime) времени и сопосталении его с Time( if(Time.time>Time.time+fireTime)) Это всё в функции вызывается.. Автор - Altair Дата добавления - 31 Май 2014 в 14:17
7MaZaHaKa7 Дата: Сб, 31 Май 2014, 20:25 | Сообщение # 3
Сообщений: 9
Награды:
0
Репутация:
0
Статус: Offline
Цитата Altair (
)
Юзай либо Coroutine либо через изменение локального(Time.time+fireTime) времени и сопосталении его с Time( if(Time.time>Time.time+fireTime)) Это всё в функции вызывается..
А как это реализовать,если можно, пример.
Сообщение Цитата Altair (
)
Юзай либо Coroutine либо через изменение локального(Time.time+fireTime) времени и сопосталении его с Time( if(Time.time>Time.time+fireTime)) Это всё в функции вызывается..
А как это реализовать,если можно, пример.Автор - 7MaZaHaKa7 Дата добавления - 31 Май 2014 в 20:25
ilyakos Дата: Вс, 01 Июн 2014, 03:14 | Сообщение # 4
Сообщений: 171
Награды:
0
Репутация:
8
Статус: Offline
Ну... вводишь float переменную к примеру а В апдейте пишешь: if(a>0){ a -= Time.deltaTime; } А в строке, где у тебя идет проверка на нажатие мыши для выстрела добавь еще одно условие && a <=0 и в своей функции shooting() допиши, что а = ... ( какому-либо числу = твоему таймауту между выстрелами ) .
Сообщение Ну... вводишь float переменную к примеру а В апдейте пишешь: if(a>0){ a -= Time.deltaTime; } А в строке, где у тебя идет проверка на нажатие мыши для выстрела добавь еще одно условие && a <=0 и в своей функции shooting() допиши, что а = ... ( какому-либо числу = твоему таймауту между выстрелами ) . Автор - ilyakos Дата добавления - 01 Июн 2014 в 03:14
7MaZaHaKa7 Дата: Вс, 01 Июн 2014, 11:46 | Сообщение # 5
Сообщений: 9
Награды:
0
Репутация:
0
Статус: Offline
Спасибо,ilyakos, обязательно попробую!
Сообщение Спасибо,ilyakos, обязательно попробую! Автор - 7MaZaHaKa7 Дата добавления - 01 Июн 2014 в 11:46
baha Дата: Вс, 01 Июн 2014, 13:52 | Сообщение # 6
Сообщений: 37
Награды:
0
Репутация:
1
Статус: Offline
Код
public FireTime; public _FireTime = 0.3F; void Update(){ if(FireTime > 0){ FireTime -= Time.deltaTime; if(FireTime <= 0)FireTime = 0; } if(Input.GetMouseButton(0) & FireTime <= 0){ FireTime = _FireTime; Shooting(); } }
Сообщение Код
public FireTime; public _FireTime = 0.3F; void Update(){ if(FireTime > 0){ FireTime -= Time.deltaTime; if(FireTime <= 0)FireTime = 0; } if(Input.GetMouseButton(0) & FireTime <= 0){ FireTime = _FireTime; Shooting(); } }
Автор - baha Дата добавления - 01 Июн 2014 в 13:52