Оружие с анимацией
korveen Дата: Сб, 23 Ноя 2013, 22:45 | Сообщение # 1
Победитель конкурса GCC
Сообщений: 183
Награды:
2
Репутация:
45
Статус: Offline
подправьте пожалуйста скрипт по анимации! Доступно только для пользователей дело в том, что некоторая анимация воспроизводится только 1 раз(конкретно бег и ходьба). после остановки не воспроизводится анимация Idle, да и после перезарядки тоже ничего не воспроизводится.. подправьте пожалуйста, кто знает. Анимаций вполне хватает, главное что бы они работали нормально, а не как у меня... в данный момент. Сделайте чтобы анимация бега была возможно если персонаж идет(то есть зажата хотябы одна из кнопок "Vertical"или/и "Horizontal"). Спасибо!
Сообщение отредактировал korveen - Сб, 23 Ноя 2013, 22:48
Сообщение подправьте пожалуйста скрипт по анимации! Доступно только для пользователей дело в том, что некоторая анимация воспроизводится только 1 раз(конкретно бег и ходьба). после остановки не воспроизводится анимация Idle, да и после перезарядки тоже ничего не воспроизводится.. подправьте пожалуйста, кто знает. Анимаций вполне хватает, главное что бы они работали нормально, а не как у меня... в данный момент. Сделайте чтобы анимация бега была возможно если персонаж идет(то есть зажата хотябы одна из кнопок "Vertical"или/и "Horizontal"). Спасибо! Автор - korveen Дата добавления - 23 Ноя 2013 в 22:45
seaman Дата: Вс, 24 Ноя 2013, 12:08 | Сообщение # 2
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
Тут не править надо, а полностью переписывать. Сорри...
Сообщение Тут не править надо, а полностью переписывать. Сорри... Автор - seaman Дата добавления - 24 Ноя 2013 в 12:08
chapaeff Дата: Пт, 28 Фев 2014, 22:20 | Сообщение # 3
Сообщений: 48
Награды:
0
Репутация:
12
Статус: Offline
Могу тебе кинуть скрипт на полноценную стрельбу с анимациями.
--------------------------------------------------------------------------------------- Throw Exception (ノಠ益ಠ)ノ彡┻━┻ Catch Exception ┬──┬ ノ( ゜-゜ノ)
Сообщение Могу тебе кинуть скрипт на полноценную стрельбу с анимациями. Автор - chapaeff Дата добавления - 28 Фев 2014 в 22:20
Денис Дата: Пт, 28 Фев 2014, 23:15 | Сообщение # 4
Сообщений: 5098
Награды:
23
Репутация:
910
Статус: Offline
chapaeff , кидай.Все равно кому-нибудь,да пригодится
Сообщение chapaeff , кидай.Все равно кому-нибудь,да пригодитсяАвтор - Денис Дата добавления - 28 Фев 2014 в 23:15
chapaeff Дата: Сб, 01 Мар 2014, 13:16 | Сообщение # 5
Сообщений: 48
Награды:
0
Репутация:
12
Статус: Offline
Код
var Model : Animation ; var range = 100.0 ; var fireRate = 0.05 ; var force = 100.0 ; var damage = 5.0 ; var bulletsPerClip = 17 ; var clips = 2 ; var reloadTime = 0.7 ; var accuracy = 1 ; var currentMode = fireMode . semi ; var ShootKey : KeyCode ; var ReloadKey : KeyCode ; var soundFire : AudioClip ; var soundReload : AudioClip ; var soundEmpty : AudioClip ; var bulletHolePrefab : GameObject ; var bulletHolePrefabWall : GameObject ; var bulletHolePrefabBlood : GameObject ; var bulletHoleMetal : GameObject ; var layerMask : LayerMask ; var muzzleFlash : Renderer ; enum fireMode { none , semi , auto } private var bulletsLeft : int = 0 ; private var allBullets ; private var nextFireTime = 0.0 ; private var mainCamera ; private var sound : AudioSource ; private var reload : boolean ; //var Crosshair : CrossHair; var DrawTime = 1 ; var guiStyle : GUISkin ; var hud : Texture ; var gunName : String ; function Start () { yield WaitForSeconds ( DrawTime ); bulletsLeft = bulletsPerClip ; allBullets = clips * bulletsPerClip ; mainCamera = GameObject . FindWithTag ( "Main Camera" ); sound = gameObject . transform . parent . audio ; muzzleFlash . enabled = false ; } function Update () { //если не идет перезарядка, то можно стрелять и перезаряжать, иначе нельзя стрелять и перезаряжать пока перезарядка не пройдет. if ( reload == false ) { if ( Input . GetKeyDown ( ReloadKey )){ Reload (); } if ( Input . GetKeyDown ( ShootKey )){ if ( bulletsLeft > 0 ) { if ( currentMode == fireMode . semi ) { Fire (); } } else { sound . PlayOneShot ( soundEmpty ); } } if ( Input . GetKey ( ShootKey )){ if ( currentMode == fireMode . auto ) { Fire (); } } } } function Fire () { // If there is more than one bullet between the last and this frame // Reset the nextFireTime if ( Time . time - fireRate > nextFireTime ) nextFireTime = Time . time - Time . deltaTime ; // Keep firing until we used up the fire time while ( nextFireTime < Time . time && bulletsLeft != 0 ) { FireOneShot (); nextFireTime += fireRate ; } } function FireOneShot () { //var direction = transform.TransformDirection(Vector3.forward); var direction = transform . TransformDirection ( Vector3 ( Random . Range (- 0.01 , 0.01 ) * accuracy , Random . Range (- 0.01 , 0.01 ) * accuracy , 1 )); var hit : RaycastHit ; Debug . DrawLine ( mainCamera . transform . position , direction * range , Color . red ); //для отладки // Проверяем попала ли куда-нибудь пуля if ( Physics . Raycast ( mainCamera . transform . position , direction , hit , range , layerMask . value )) { var rotation = Quaternion . FromToRotation ( Vector3 . up , hit . normal ); // если пуля попадает в физический объект то двигаем его if ( hit . rigidbody ) hit . rigidbody . AddForceAtPosition ( force * direction , hit . point ); // если пуля попала в объект "Untagged" то сделать на нем дырку и приклеить ее к объекту if ( hit . transform . tag == "Untagged" ) { var bulletHole : GameObject = Instantiate ( bulletHolePrefab , hit . point , rotation ); bulletHole . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Concrete" ) { var bulletHoleWall : GameObject = Instantiate ( bulletHolePrefabWall , hit . point , rotation ); bulletHoleWall . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Enemy" ) { var bulletHoleBlood : GameObject = Instantiate ( bulletHolePrefabBlood , hit . point , rotation ); bulletHoleBlood . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Metal" ) { var bulletHoleMetal : GameObject = Instantiate ( bulletHoleMetal , hit . point , rotation ); bulletHoleMetal . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } } sound . PlayOneShot ( soundFire ); Model . animation . Rewind ( "fire" ); Model . animation . CrossFade ( "fire" ); bulletsLeft --; StartCoroutine ( ShowMuzzleFlash ()); } // перезарядка function Reload () { if ( allBullets > 0 && bulletsLeft != bulletsPerClip ) { if ( allBullets > bulletsPerClip ) { //Crosshair.EnableCrosshair = false; reload = true ; sound . PlayOneShot ( soundReload ); Model . animation . CrossFade ( "reload" ); yield WaitForSeconds ( reloadTime ); allBullets -= bulletsPerClip - bulletsLeft ; bulletsLeft = bulletsPerClip ; reload = false ; //Crosshair.EnableCrosshair = true; } else { reload = true ; sound . PlayOneShot ( soundReload ); yield WaitForSeconds ( reloadTime ); var bullet = Mathf . Clamp ( bulletsPerClip , allBullets , bulletsLeft + allBullets ); allBullets -= ( bullet - bulletsLeft ); bulletsLeft = bullet ; reload = false ; } } } // показать вспышку от выстрела function ShowMuzzleFlash () { muzzleFlash . transform . localRotation *= Quaternion . Euler ( 0 , 0 , Random . Range (- 360 , 360 )); //muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward); muzzleFlash. enabled = true ; yield WaitForSeconds ( 0.05f ); muzzleFlash . enabled = false ; } function OnGUI () { GUI . skin = guiStyle ; GUI . Label ( new Rect ( Screen . width - 120 , Screen . height - 80 , 200 , 50 ), " " + gunName + " : " + bulletsLeft + " / " + allBullets ); }
+ репа если помог)
--------------------------------------------------------------------------------------- Throw Exception (ノಠ益ಠ)ノ彡┻━┻ Catch Exception ┬──┬ ノ( ゜-゜ノ)
Сообщение отредактировал chapaeff - Сб, 01 Мар 2014, 13:18
Сообщение Код
var Model : Animation ; var range = 100.0 ; var fireRate = 0.05 ; var force = 100.0 ; var damage = 5.0 ; var bulletsPerClip = 17 ; var clips = 2 ; var reloadTime = 0.7 ; var accuracy = 1 ; var currentMode = fireMode . semi ; var ShootKey : KeyCode ; var ReloadKey : KeyCode ; var soundFire : AudioClip ; var soundReload : AudioClip ; var soundEmpty : AudioClip ; var bulletHolePrefab : GameObject ; var bulletHolePrefabWall : GameObject ; var bulletHolePrefabBlood : GameObject ; var bulletHoleMetal : GameObject ; var layerMask : LayerMask ; var muzzleFlash : Renderer ; enum fireMode { none , semi , auto } private var bulletsLeft : int = 0 ; private var allBullets ; private var nextFireTime = 0.0 ; private var mainCamera ; private var sound : AudioSource ; private var reload : boolean ; //var Crosshair : CrossHair; var DrawTime = 1 ; var guiStyle : GUISkin ; var hud : Texture ; var gunName : String ; function Start () { yield WaitForSeconds ( DrawTime ); bulletsLeft = bulletsPerClip ; allBullets = clips * bulletsPerClip ; mainCamera = GameObject . FindWithTag ( "Main Camera" ); sound = gameObject . transform . parent . audio ; muzzleFlash . enabled = false ; } function Update () { //если не идет перезарядка, то можно стрелять и перезаряжать, иначе нельзя стрелять и перезаряжать пока перезарядка не пройдет. if ( reload == false ) { if ( Input . GetKeyDown ( ReloadKey )){ Reload (); } if ( Input . GetKeyDown ( ShootKey )){ if ( bulletsLeft > 0 ) { if ( currentMode == fireMode . semi ) { Fire (); } } else { sound . PlayOneShot ( soundEmpty ); } } if ( Input . GetKey ( ShootKey )){ if ( currentMode == fireMode . auto ) { Fire (); } } } } function Fire () { // If there is more than one bullet between the last and this frame // Reset the nextFireTime if ( Time . time - fireRate > nextFireTime ) nextFireTime = Time . time - Time . deltaTime ; // Keep firing until we used up the fire time while ( nextFireTime < Time . time && bulletsLeft != 0 ) { FireOneShot (); nextFireTime += fireRate ; } } function FireOneShot () { //var direction = transform.TransformDirection(Vector3.forward); var direction = transform . TransformDirection ( Vector3 ( Random . Range (- 0.01 , 0.01 ) * accuracy , Random . Range (- 0.01 , 0.01 ) * accuracy , 1 )); var hit : RaycastHit ; Debug . DrawLine ( mainCamera . transform . position , direction * range , Color . red ); //для отладки // Проверяем попала ли куда-нибудь пуля if ( Physics . Raycast ( mainCamera . transform . position , direction , hit , range , layerMask . value )) { var rotation = Quaternion . FromToRotation ( Vector3 . up , hit . normal ); // если пуля попадает в физический объект то двигаем его if ( hit . rigidbody ) hit . rigidbody . AddForceAtPosition ( force * direction , hit . point ); // если пуля попала в объект "Untagged" то сделать на нем дырку и приклеить ее к объекту if ( hit . transform . tag == "Untagged" ) { var bulletHole : GameObject = Instantiate ( bulletHolePrefab , hit . point , rotation ); bulletHole . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Concrete" ) { var bulletHoleWall : GameObject = Instantiate ( bulletHolePrefabWall , hit . point , rotation ); bulletHoleWall . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Enemy" ) { var bulletHoleBlood : GameObject = Instantiate ( bulletHolePrefabBlood , hit . point , rotation ); bulletHoleBlood . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } if ( hit . transform . tag == "Metal" ) { var bulletHoleMetal : GameObject = Instantiate ( bulletHoleMetal , hit . point , rotation ); bulletHoleMetal . transform . parent = hit . transform ; hit . collider . SendMessageUpwards ( "ApplyDamage" , damage , SendMessageOptions . DontRequireReceiver ); } } sound . PlayOneShot ( soundFire ); Model . animation . Rewind ( "fire" ); Model . animation . CrossFade ( "fire" ); bulletsLeft --; StartCoroutine ( ShowMuzzleFlash ()); } // перезарядка function Reload () { if ( allBullets > 0 && bulletsLeft != bulletsPerClip ) { if ( allBullets > bulletsPerClip ) { //Crosshair.EnableCrosshair = false; reload = true ; sound . PlayOneShot ( soundReload ); Model . animation . CrossFade ( "reload" ); yield WaitForSeconds ( reloadTime ); allBullets -= bulletsPerClip - bulletsLeft ; bulletsLeft = bulletsPerClip ; reload = false ; //Crosshair.EnableCrosshair = true; } else { reload = true ; sound . PlayOneShot ( soundReload ); yield WaitForSeconds ( reloadTime ); var bullet = Mathf . Clamp ( bulletsPerClip , allBullets , bulletsLeft + allBullets ); allBullets -= ( bullet - bulletsLeft ); bulletsLeft = bullet ; reload = false ; } } } // показать вспышку от выстрела function ShowMuzzleFlash () { muzzleFlash . transform . localRotation *= Quaternion . Euler ( 0 , 0 , Random . Range (- 360 , 360 )); //muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward); muzzleFlash. enabled = true ; yield WaitForSeconds ( 0.05f ); muzzleFlash . enabled = false ; } function OnGUI () { GUI . skin = guiStyle ; GUI . Label ( new Rect ( Screen . width - 120 , Screen . height - 80 , 200 , 50 ), " " + gunName + " : " + bulletsLeft + " / " + allBullets ); }
+ репа если помог)Автор - chapaeff Дата добавления - 01 Мар 2014 в 13:16
Elcorosso Дата: Чт, 18 Июн 2015, 14:48 | Сообщение # 6
Сообщений: 7
Награды:
0
Репутация:
0
Статус: Offline
Cкажи пожалуйста этот скрипт на оружие накладывать надо ?
Сообщение Cкажи пожалуйста этот скрипт на оружие накладывать надо ? Автор - Elcorosso Дата добавления - 18 Июн 2015 в 14:48