Не могу понять почему плохо работает скрипт
VolkOrievith Дата: Сб, 14 Июл 2012, 11:53 | Сообщение # 1
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
вот скрипт(JS): Code
var Bullet : Collider;//пуля var Launcher : GameObject; var Zaderjka : float = 0.0;// задержка выстрела var PossZaderjka : float = 0.0; var Body : Transform; var Potrons = 10;// патроны var MaxPotrons = 10; var Zapas = 5;// запас магазинов var MaxZapas = 5; var TimePerez : float = 0.0; var Anamy : Collider; var MineBody : Collider; var MineHelf = 100; var AnamyHelf = 100; private var FireTimer : float = 0.0; function Update () { Screen.lockCursor = true; if (Potrons <=0) Zaderjka = 999999; if (Input.GetKeyDown("r")) Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; if (Input.GetKey("w")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("d")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("s")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("a")) Body.animation.CrossFade("Pistola Animation3"); if (Zapas <= 0) if (Potrons <=0) Zaderjka = 999999; Launcher.particleEmitter.emit = false; if ( Input.GetButtonDown( "Fire1" ) && FireTimer >= Zaderjka ) { FireTimer = 0.0; Launcher.audio.Play(); Launcher.particleEmitter.emit = true; Potrons = Potrons - 1; Body.animation.CrossFade("Pistola Animation2"); var hit : RaycastHit; if ( Physics.Raycast( Launcher.transform.position, Launcher.transform.forward, hit ) ) { Instantiate( Bullet, hit.point, Quaternion.LookRotation( hit.normal ) ); } } FireTimer += Time.deltaTime; }
1)при выстреле кол-во патронов должно убавлятся, а оно как было так и осталось 2)при нажатии R, кол-во магазинов должно убавлятся, а оно как было так и осталось :( Что сделать?
Сообщение отредактировал Dekterev - Чт, 19 Июл 2012, 09:52
Сообщение вот скрипт(JS): Code
var Bullet : Collider;//пуля var Launcher : GameObject; var Zaderjka : float = 0.0;// задержка выстрела var PossZaderjka : float = 0.0; var Body : Transform; var Potrons = 10;// патроны var MaxPotrons = 10; var Zapas = 5;// запас магазинов var MaxZapas = 5; var TimePerez : float = 0.0; var Anamy : Collider; var MineBody : Collider; var MineHelf = 100; var AnamyHelf = 100; private var FireTimer : float = 0.0; function Update () { Screen.lockCursor = true; if (Potrons <=0) Zaderjka = 999999; if (Input.GetKeyDown("r")) Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; if (Input.GetKey("w")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("d")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("s")) Body.animation.CrossFade("Pistola Animation3"); if (Input.GetKey("a")) Body.animation.CrossFade("Pistola Animation3"); if (Zapas <= 0) if (Potrons <=0) Zaderjka = 999999; Launcher.particleEmitter.emit = false; if ( Input.GetButtonDown( "Fire1" ) && FireTimer >= Zaderjka ) { FireTimer = 0.0; Launcher.audio.Play(); Launcher.particleEmitter.emit = true; Potrons = Potrons - 1; Body.animation.CrossFade("Pistola Animation2"); var hit : RaycastHit; if ( Physics.Raycast( Launcher.transform.position, Launcher.transform.forward, hit ) ) { Instantiate( Bullet, hit.point, Quaternion.LookRotation( hit.normal ) ); } } FireTimer += Time.deltaTime; }
1)при выстреле кол-во патронов должно убавлятся, а оно как было так и осталось 2)при нажатии R, кол-во магазинов должно убавлятся, а оно как было так и осталось :( Что сделать? Автор - VolkOrievith Дата добавления - 14 Июл 2012 в 11:53
Hunjeth Дата: Сб, 14 Июл 2012, 15:56 | Сообщение # 2
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Code
FireTimer += Time.deltaTime;
надо ставить сразу после if вот так Code
if ( Input.GetButtonDown( "Fire1" ) && FireTimer >= Zaderjka ) { FireTimer += Time.deltaTime;
или так написать Code
if ( Input.GetButtonDown( "Fire1" ) && Time.time >= FireTimer) { FireTimer = Time.time + Zaderjka; if (Input.GetKeyDown("r")) { Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; }
Добавлено (14.07.2012, 15:54) --------------------------------------------- Code
Potrons = Potrons - 1;
замени на Code
Input.GetKeyDown("r")
лучше написать в начале update Code
inpr = Input.GetKeyDown("r");
а дальше проверять true или false
Сообщение отредактировал Dekterev - Чт, 19 Июл 2012, 09:47
Сообщение Code
FireTimer += Time.deltaTime;
надо ставить сразу после if вот так Code
if ( Input.GetButtonDown( "Fire1" ) && FireTimer >= Zaderjka ) { FireTimer += Time.deltaTime;
или так написать Code
if ( Input.GetButtonDown( "Fire1" ) && Time.time >= FireTimer) { FireTimer = Time.time + Zaderjka; if (Input.GetKeyDown("r")) { Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; }
Добавлено (14.07.2012, 15:54) --------------------------------------------- Code
Potrons = Potrons - 1;
замени на Code
Input.GetKeyDown("r")
лучше написать в начале update Code
inpr = Input.GetKeyDown("r");
а дальше проверять true или false Автор - Hunjeth Дата добавления - 14 Июл 2012 в 15:56
Левша Дата: Сб, 14 Июл 2012, 22:33 | Сообщение # 3
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (Hunjeth )
Code
Potrons = Potrons - 1;
замени на
Или
X.cor.R (Prologue)
Сообщение Quote (Hunjeth )
Code
Potrons = Potrons - 1;
замени на
Или Автор - Левша Дата добавления - 14 Июл 2012 в 22:33
commandoby Дата: Вс, 15 Июл 2012, 11:42 | Сообщение # 4
Unity 3D Free
Сообщений: 836
Награды:
3
Репутация:
211
Статус: Offline
VolkOrievith , на счёт патронов ненашёл ничего, но вот перезарядка с таким скриптом будет паказывать всё время 4 обоймы, если я правильно понял. Нужно заменить Code
Zapas = MaxZapas - 1;
на
Блог.
Сообщение отредактировал commandoby - Вс, 15 Июл 2012, 11:44
Сообщение VolkOrievith , на счёт патронов ненашёл ничего, но вот перезарядка с таким скриптом будет паказывать всё время 4 обоймы, если я правильно понял. Нужно заменить Code
Zapas = MaxZapas - 1;
на Автор - commandoby Дата добавления - 15 Июл 2012 в 11:42
VolkOrievith Дата: Чт, 19 Июл 2012, 09:46 | Сообщение # 5
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
благодарю! Я тут еще маленько посидел подумал. взял каждое Условие, или не знаю как назвать, взял в фигурные скобки. вот например: вместо Code
if (Input.GetKeyDown("r")) Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1;
я написал Code
if (Input.GetKeyDown("r")){ Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; }
потом еще подумал и вот что получил: Code
var Bullet : Collider; var Launcher : GameObject; var Zaderjka : float = 0.0; var PossZaderjka : float = 0.0; var RelodTime : float = 0.00; var Body : Transform; var Potrons = 10; var MaxPotrons = 10; var Zapas = 5; var ReloadSound : GameObject; private var FireTimer : float = 0.0; var hit : RaycastHit; function Update () { Screen.lockCursor = true; if ( Input.GetButton("Fire1") && FireTimer >= Zaderjka ) if (Potrons >=1){ FireTimer = 0.0; Launcher.audio.Play(); Launcher.particleEmitter.emit = true; Potrons -= 1; Body.animation.CrossFade("Fire"); Launcher.particleEmitter.emit = false; if ( Physics.Raycast( Launcher.transform.position, Launcher.transform.forward, hit ) ) { Instantiate( Bullet, hit.point, Quaternion.LookRotation( hit.normal ) ); } } if (Input.GetKeyDown("r")) if (Potrons < MaxPotrons){ Potrons = MaxPotrons; Zapas -= 1; if (Zapas >= 0) Body.animation.CrossFade("Reload"); if (Zapas >= 0) ReloadSound.audio.Play(); } if (Input.GetKey("w")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("d")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("s")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("a")){ Body.animation.CrossFade("Walk"); } if (Input.GetKeyUp("a")){ Body.animation.CrossFade("Walk"); } if (Zapas <= -1) if (Potrons >=1){ Potrons = 0; } FireTimer += Time.deltaTime; }
все хорошо работает, только анимацию стрельбы не воспроизводит.Добавлено (19.07.2012, 09:46) --------------------------------------------- У меня еще вопрос: если нажать "r" патроны = макс патроны, воспроизводится анимация, запас -=1. если во время анимации перезарядки нажать "Огонь" анимация прервется и автомат выстрелит. как сделать задержку?
Сообщение отредактировал Dekterev - Чт, 19 Июл 2012, 09:45
Сообщение благодарю! Я тут еще маленько посидел подумал. взял каждое Условие, или не знаю как назвать, взял в фигурные скобки. вот например: вместо Code
if (Input.GetKeyDown("r")) Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1;
я написал Code
if (Input.GetKeyDown("r")){ Body.animation.CrossFade("Pistola Animation"); Zaderjka = PossZaderjka; Potrons = MaxPotrons; Zapas = MaxZapas - 1; }
потом еще подумал и вот что получил: Code
var Bullet : Collider; var Launcher : GameObject; var Zaderjka : float = 0.0; var PossZaderjka : float = 0.0; var RelodTime : float = 0.00; var Body : Transform; var Potrons = 10; var MaxPotrons = 10; var Zapas = 5; var ReloadSound : GameObject; private var FireTimer : float = 0.0; var hit : RaycastHit; function Update () { Screen.lockCursor = true; if ( Input.GetButton("Fire1") && FireTimer >= Zaderjka ) if (Potrons >=1){ FireTimer = 0.0; Launcher.audio.Play(); Launcher.particleEmitter.emit = true; Potrons -= 1; Body.animation.CrossFade("Fire"); Launcher.particleEmitter.emit = false; if ( Physics.Raycast( Launcher.transform.position, Launcher.transform.forward, hit ) ) { Instantiate( Bullet, hit.point, Quaternion.LookRotation( hit.normal ) ); } } if (Input.GetKeyDown("r")) if (Potrons < MaxPotrons){ Potrons = MaxPotrons; Zapas -= 1; if (Zapas >= 0) Body.animation.CrossFade("Reload"); if (Zapas >= 0) ReloadSound.audio.Play(); } if (Input.GetKey("w")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("d")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("s")){ Body.animation.CrossFade("Walk"); } if (Input.GetKey("a")){ Body.animation.CrossFade("Walk"); } if (Input.GetKeyUp("a")){ Body.animation.CrossFade("Walk"); } if (Zapas <= -1) if (Potrons >=1){ Potrons = 0; } FireTimer += Time.deltaTime; }
все хорошо работает, только анимацию стрельбы не воспроизводит.Добавлено (19.07.2012, 09:46) --------------------------------------------- У меня еще вопрос: если нажать "r" патроны = макс патроны, воспроизводится анимация, запас -=1. если во время анимации перезарядки нажать "Огонь" анимация прервется и автомат выстрелит. как сделать задержку?
Автор - VolkOrievith Дата добавления - 19 Июл 2012 в 09:46
Алиш Дата: Чт, 19 Июл 2012, 10:27 | Сообщение # 6
Son of Satan
Сообщений: 223
Награды:
0
Репутация:
53
Статус: Offline
Quote (VolkOrievith )
var Zaderjka : float = 0.0;// задержка выстрела var PossZaderjka : float = 0.0; var Body : Transform; var Potrons = 10;// патроны var MaxPotrons = 10; var Zapas = 5;// запас магазинов var MaxZapas = 5; var TimePerez : float = 0.0; var Anamy : Collider; var MineBody : Collider; var MineHelf = 100; var AnamyHelf = 100;
Мой брат за такие названия переменных бил меня шваброй. Quote (VolkOrievith )
если во время анимации перезарядки нажать "Огонь" анимация прервется и автомат выстрелит. как сделать задержку?
Сделать бул-переменную, при перезарядке делать ее false. При выстреле проверять ее истинность.
Сообщение отредактировал Алиш - Чт, 19 Июл 2012, 10:28
Сообщение Quote (VolkOrievith )
var Zaderjka : float = 0.0;// задержка выстрела var PossZaderjka : float = 0.0; var Body : Transform; var Potrons = 10;// патроны var MaxPotrons = 10; var Zapas = 5;// запас магазинов var MaxZapas = 5; var TimePerez : float = 0.0; var Anamy : Collider; var MineBody : Collider; var MineHelf = 100; var AnamyHelf = 100;
Мой брат за такие названия переменных бил меня шваброй. Quote (VolkOrievith )
если во время анимации перезарядки нажать "Огонь" анимация прервется и автомат выстрелит. как сделать задержку?
Сделать бул-переменную, при перезарядке делать ее false. При выстреле проверять ее истинность.Автор - Алиш Дата добавления - 19 Июл 2012 в 10:27
VolkOrievith Дата: Чт, 19 Июл 2012, 11:50 | Сообщение # 7
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Quote (Алиш )
Сделать бул-переменную, при перезарядке делать ее false. При выстреле проверять ее истинность.
Сори, но я не очень знаю как это делается. Может объяснишь? Quote (Алиш )
Мой брат за такие названия переменных бил меня шваброй.
мой брат слишком далеко от меня, чтобы дотянуться шваброй.
Сообщение Quote (Алиш )
Сделать бул-переменную, при перезарядке делать ее false. При выстреле проверять ее истинность.
Сори, но я не очень знаю как это делается. Может объяснишь? Quote (Алиш )
Мой брат за такие названия переменных бил меня шваброй.
мой брат слишком далеко от меня, чтобы дотянуться шваброй.Автор - VolkOrievith Дата добавления - 19 Июл 2012 в 11:50
Алиш Дата: Чт, 19 Июл 2012, 12:05 | Сообщение # 8
Son of Satan
Сообщений: 223
Награды:
0
Репутация:
53
Статус: Offline
Quote (VolkOrievith )
Сори, но я не очень знаю как это делается. Может объяснишь?
Мда. Code
var bCanShoot = false;
В функции выстрела: Code
if(bCanShoot) { //Что-то }
В функции перезарядки: //Что-то В функции окончания перезарядки:
Сообщение отредактировал Dekterev - Чт, 19 Июл 2012, 15:38
Сообщение Quote (VolkOrievith )
Сори, но я не очень знаю как это делается. Может объяснишь?
Мда. Code
var bCanShoot = false;
В функции выстрела: Code
if(bCanShoot) { //Что-то }
В функции перезарядки: //Что-то В функции окончания перезарядки: Автор - Алиш Дата добавления - 19 Июл 2012 в 12:05
VolkOrievith Дата: Чт, 19 Июл 2012, 14:00 | Сообщение # 9
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
а как писать функцию окончания перезарядки? я самоучка в JavaScript, тем более недавно начал.Добавлено (19.07.2012, 14:00) --------------------------------------------- А не подскажете как вывести патроны на экран?
Сообщение а как писать функцию окончания перезарядки? я самоучка в JavaScript, тем более недавно начал.Добавлено (19.07.2012, 14:00) --------------------------------------------- А не подскажете как вывести патроны на экран?
Автор - VolkOrievith Дата добавления - 19 Июл 2012 в 14:00
Левша Дата: Чт, 19 Июл 2012, 15:55 | Сообщение # 10
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (VolkOrievith )
как вывести патроны на экран?
Повесь GUIText , в переменную text присваивай кол-во патронов.
X.cor.R (Prologue)
Сообщение Quote (VolkOrievith )
как вывести патроны на экран?
Повесь GUIText , в переменную text присваивай кол-во патронов.Автор - Левша Дата добавления - 19 Июл 2012 в 15:55
VolkOrievith Дата: Вс, 22 Июл 2012, 07:52 | Сообщение # 11
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
А как присвоить туда кол-во патронов? Добавлено (22.07.2012, 07:46) --------------------------------------------- Все! патроны на экране! А как написать так: при окончании анимации Potrons = MaxPotrons; ? Добавлено (22.07.2012, 07:52) --------------------------------------------- вот еще неработающий скрипт: Code
var Weapon1 = GameObject; var Weapon2 = GameObject; Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; function Update () { if (Input.GetKeyDown(1)){ Weapon1.animation.CrossFade("GunUp"); Weapon2.animation.CrossFade("GunDown"); Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; } if (Input.GetKeyDown(2)){ Weapon2.animation.CrossFade("GunUp"); Weapon1.animation.CrossFade("GunDown"); Weapon1.WeaponScript.enabled = false; Weapon2.WeaponScript.enabled = true; } }
В инспекторе ни одна переменная не отображается.
Сообщение отредактировал VolkOrievith - Вс, 22 Июл 2012, 07:53
Сообщение А как присвоить туда кол-во патронов? Добавлено (22.07.2012, 07:46) --------------------------------------------- Все! патроны на экране! А как написать так: при окончании анимации Potrons = MaxPotrons; ? Добавлено (22.07.2012, 07:52) --------------------------------------------- вот еще неработающий скрипт: Code
var Weapon1 = GameObject; var Weapon2 = GameObject; Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; function Update () { if (Input.GetKeyDown(1)){ Weapon1.animation.CrossFade("GunUp"); Weapon2.animation.CrossFade("GunDown"); Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; } if (Input.GetKeyDown(2)){ Weapon2.animation.CrossFade("GunUp"); Weapon1.animation.CrossFade("GunDown"); Weapon1.WeaponScript.enabled = false; Weapon2.WeaponScript.enabled = true; } }
В инспекторе ни одна переменная не отображается. Автор - VolkOrievith Дата добавления - 22 Июл 2012 в 07:52
Hunjeth Дата: Вс, 22 Июл 2012, 09:37 | Сообщение # 12
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; убери в начале и надо писать Weapon1.GetComponent(WeaponScript).enabled = ...; или var Weapon1 : WeaponScript; Weapon1.enabled = ...;
Сообщение отредактировал Hunjeth - Вс, 22 Июл 2012, 09:41
Сообщение Weapon1.WeaponScript.enabled = true; Weapon2.WeaponScript.enabled = false; убери в начале и надо писать Weapon1.GetComponent(WeaponScript).enabled = ...; или var Weapon1 : WeaponScript; Weapon1.enabled = ...; Автор - Hunjeth Дата добавления - 22 Июл 2012 в 09:37
VolkOrievith Дата: Вс, 22 Июл 2012, 10:44 | Сообщение # 13
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Заменил. не работает У кого есть скрипт замены оружия?
Сообщение Заменил. не работает У кого есть скрипт замены оружия? Автор - VolkOrievith Дата добавления - 22 Июл 2012 в 10:44
Hunjeth Дата: Вс, 22 Июл 2012, 11:13 | Сообщение # 14
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Input.GetKeyDown(KeyCode.Mouse0) http://docs.unity3d.com/Documentation/ScriptReference/KeyCode.html
Сообщение отредактировал Hunjeth - Вс, 22 Июл 2012, 11:15
Сообщение Input.GetKeyDown(KeyCode.Mouse0) http://docs.unity3d.com/Documentation/ScriptReference/KeyCode.htmlАвтор - Hunjeth Дата добавления - 22 Июл 2012 в 11:13
Левша Дата: Вс, 22 Июл 2012, 15:24 | Сообщение # 15
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (VolkOrievith )
У кого есть скрипт замены оружия?
Code
var invWeaps : GameObject[]; private var currWeap : Transform; private var weapState : int = 9; private var weapActive : boolean = false; function Update () { if (Input.GetKeyUp ("1") && invWeaps[0] && weapState != 0) { weapState = 0; WeapChange(); } if (Input.GetKeyUp ("2") && invWeaps[1] && weapState != 1) { weapState = 1; WeapChange(); } if (Input.GetKeyUp ("3") && invWeaps[2] && weapState != 2) { weapState = 2; WeapChange(); } if (Input.GetKeyUp ("4") && invWeaps[3] && weapState != 3) { weapState = 3; WeapChange(); } } function WeapChange (){ if (currWeap) { weapActive = false; } if (!currWeap) { currWeap = Instantiate(invWeaps[weapState], transform.position, transform.rotation).transform; currWeap.parent = transform; weapActive = true; } }
Скрипт вешать на ГО Weapons дочерний к камере игрока.
X.cor.R (Prologue)
Сообщение Quote (VolkOrievith )
У кого есть скрипт замены оружия?
Code
var invWeaps : GameObject[]; private var currWeap : Transform; private var weapState : int = 9; private var weapActive : boolean = false; function Update () { if (Input.GetKeyUp ("1") && invWeaps[0] && weapState != 0) { weapState = 0; WeapChange(); } if (Input.GetKeyUp ("2") && invWeaps[1] && weapState != 1) { weapState = 1; WeapChange(); } if (Input.GetKeyUp ("3") && invWeaps[2] && weapState != 2) { weapState = 2; WeapChange(); } if (Input.GetKeyUp ("4") && invWeaps[3] && weapState != 3) { weapState = 3; WeapChange(); } } function WeapChange (){ if (currWeap) { weapActive = false; } if (!currWeap) { currWeap = Instantiate(invWeaps[weapState], transform.position, transform.rotation).transform; currWeap.parent = transform; weapActive = true; } }
Скрипт вешать на ГО Weapons дочерний к камере игрока.Автор - Левша Дата добавления - 22 Июл 2012 в 15:24
VolkOrievith Дата: Пн, 23 Июл 2012, 15:26 | Сообщение # 16
Сообщений: 222
Награды:
0
Репутация:
53
Статус: Offline
Левша , Благодарю! Вроде хороший скрипт.
Сообщение Левша , Благодарю! Вроде хороший скрипт.Автор - VolkOrievith Дата добавления - 23 Июл 2012 в 15:26