Таймаут между выстрелами - Форум Игроделов
Пт, 17 Май 2024, 05:01 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Таймаут между выстрелами
Таймаут между выстрелами
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, обязательно попробую! smile
 
СообщениеСпасибо,ilyakos, обязательно попробую! smile

Автор - 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
Форум Игроделов » UNITY3D » СКРИПТИНГ » Таймаут между выстрелами
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024