Оружие с анимацией - Форум Игроделов
Пт, 03 Май 2024, 07:55 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОРУЖИЕ » Оружие с анимацией (нужна помощь со скриптом)
Оружие с анимацией
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);
}



cool
+ репа если помог)


---------------------------------------------------------------------------------------
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);
}



cool
+ репа если помог)

Автор - chapaeff
Дата добавления - 01 Мар 2014 в 13:16
ElcorossoДата: Чт, 18 Июн 2015, 14:48 | Сообщение # 6
Нет аватара
 
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Offline
Cкажи пожалуйста этот скрипт на оружие накладывать надо ?
 
СообщениеCкажи пожалуйста этот скрипт на оружие накладывать надо ?

Автор - Elcorosso
Дата добавления - 18 Июн 2015 в 14:48
Форум Игроделов » UNITY3D » ОРУЖИЕ » Оружие с анимацией (нужна помощь со скриптом)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024