Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 28.05.2013, 02:46   #1
sniper16
AnyKey`щик
 
Регистрация: 28.05.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Помощь в объединении скрипта

Может кто помочь 2 скрипта в один сделать. То есть у меня есть скрипт оружия. И есть отдельный скрипт чтобы оставались дыры от пуль. И со скриптом который отвечает за дыры от пуль косяк. То есть он реагирует на каждое нажатие нажатие левой кнопки. Даже когда пуль нету. Он всё равно оставляет дыры от пуль. Как можно привязать оба скрипта чтобы когда стреляешь оставались тока пули от пистолета. И когда пуль нету ничего не оставалось.
Скрипт Оружия :
using UnityEngine;

using System.Collections;

 

public class 
Weapon : MonoBehaviour {

                
//камера

                
public Transform _camTransform;

 

                
//анимации

                
public AnimationClip animationIdle;

                public 
AnimationClip animationRun;

                public 
AnimationClip animationFire;

                public 
AnimationClip animationReload;

 

                
//звуки

                
public AudioClip soundReload;

                public 
AudioClip soundFire;

 

 

                public 
float ReloadTime = 3.5f;

                public 
float FireTime = 0.5f;

                public 
float FireRate = 0.5f;

                public 
float Range = 1000;

                public 
int Damage = 50;

                public 
int BulletsInClip = 8;

                public 
int Clips = 3;

 

 

                public 
ParticleEmitter muzzleFlash;

 

 

                private 
int BulletsLeft = 0;

                private 
float NextFireTime = 0.0f;

                private 
bool Reloading = false;

                private 
bool isFire = false;

                private 
float muzzleFlashLifeTime = 0.0f;

 

 

                
void Start () {

                               
BulletsLeft = BulletsInClip;

                }

 

 

                
void Update () {

 

                               if (
muzzleFlashLifeTime > 0) {

                                               
muzzleFlashLifeTime--;

                                               
muzzleFlash.emit = true;

 

                               } else {

                                               
muzzleFlash.emit = false;

                                                                              }

                               if (
BulletsLeft == 0 && !Reloading && NextFireTime < Time.time) {

                                               
Reload ();

                               }

 

                               if (
Input.GetButtonDown("Fire1")) {

                                               
Fire();

                               } else if (
Input.GetKeyDown(KeyCode.R) ) {

                                               
Reload ();

 

                               } else if( !
Reloading && !isFire ) {

                                               
Idle ();

                               }

 

                }

 

                private 
void Reload() {

                               if (
Clips == 0) return;

                               
Reloading = true;

                               
Invoke ("ReloadingOf", ReloadTime);

                               
animation.Stop( animationRun.name );

                               
animation.CrossFade( animationReload.name );

                               
audio.PlayOneShot( soundReload );

 

                }

 

                private 
void Idle() {

                               if(
Input.GetKey( KeyCode.W)) {

                                               
animation.CrossFade( animationRun.name );

                               } else {

                                               
animation.CrossFade( animationIdle.name );

                               }

 

                }

 

                private 
void Run() {

                               
animation.CrossFade( animationRun.name );

                }

 

                private 
void ReloadingOf() {

                               
BulletsLeft = BulletsInClip;

                               
Clips--;

                               
Reloading = false;

                }

 

                private 
void FireOf() {

                               
isFire = false;
                }

 

                private 
void Fire() {

                               
isFire = true;

                               
Invoke ("FireOf", FireTime);

                               if (
BulletsLeft == 0)

                                               return;

 

 

                               if (
Time.time - FireRate > NextFireTime)

                                               
NextFireTime = Time.time - Time.deltaTime;

 

                               if (
NextFireTime < Time.time && BulletsLeft != 0 && !Reloading) {

 

 

                                               
animation.Rewind ( animationFire.name );

                                               
animation.CrossFade( animationFire.name );

                                               
audio.PlayOneShot( soundFire );

 

                                               
Effects();

 

                                               
NextFireTime += FireRate;

                                               
BulletsLeft--;

 

                                               
Vector3 _direction = _camTransform.TransformDirection(Vector3.forward);

            
/*RaycastHit _hit;

            if (Physics.Raycast(_camTransform.position, _direction, out _hit, Range))

            {

                if (_hit.transform.tag == "Enemy")

                {

                    BotHealth eh = _hit.transform.GetComponent<BotHealth>();

                    eh.adjustHealth(-Damage, transform);

                }

            }*/

 

                               
}

 

                }

 

                private 
void Effects () {

                               
muzzleFlashLifeTime = 2.0f;

 

                }

 

                
void OnGUI() {

                               
int lHeight = 25;

 

                               
int lWidth = 200;

 

                               
Rect _pos = new Rect(Screen.width - lWidth, Screen.height - 50, lWidth, lHeight);

                               
Rect _pos2 = new Rect(Screen.width - lWidth, Screen.height - 30, lWidth, lHeight);

                               
string lb = "Bullets: " + BulletsLeft;

                               
GUI.Label(_pos, lb);

                               
string lb2 = "Clips: " + Clips;

                               
GUI.Label(_pos2, lb2);

 

 

                }

 

} 
(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 02:48   #2
sniper16
AnyKey`щик
 
Регистрация: 28.05.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помощь в объединении скрипта

Скрипт отвечающий за дыры от пуль :
using UnityEngine;
using System.Collections;

public class 
DecalTest : MonoBehaviour {

    public 
LayerMask hitLayer = 1;
    private 
float tm;
    
    
void Update() {
        
        if (
Input.GetButton("Fire1")){
            if (
Time.time >= tm) {
                
tm = Time.time + 0.05f;
                
RaycastHit rayhits;
                if (
Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out rayhits , 10, hitLayer))
//                        Debug.Log("fire!");
                
StaticFunction.GenerateDecal(rayhits);
            }
        }
    }
} 
(Offline)
 
Ответить с цитированием
Старый 28.05.2013, 09:14   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Помощь в объединении скрипта

Ну пренеси код второго скрипта в условие первого там где
if (NextFireTime < Time.time && BulletsLeft != 0 && !Reloading) {
// сюда 
Соответственно переменные
public class Weapon : MonoBehaviour {

// где-то здесь
    
public LayerMask hitLayer = 1;
    private 
float tm; 
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 02:38   #4
sniper16
AnyKey`щик
 
Регистрация: 28.05.2013
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помощь в объединении скрипта

Сообщение от pax Посмотреть сообщение
Ну пренеси код второго скрипта в условие первого там где
if (NextFireTime < Time.time && BulletsLeft != 0 && !Reloading) {
// сюда 
Соответственно переменные
public class Weapon : MonoBehaviour {

// где-то здесь
    
public LayerMask hitLayer = 1;
    private 
float tm; 
Не работает почему то.
(Offline)
 
Ответить с цитированием
Старый 29.05.2013, 09:52   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Помощь в объединении скрипта

Покажи результат переноса - готовый скрипт
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 04:39.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com