дело в том, что некоторая анимация воспроизводится только 1 раз(конкретно бег и ходьба). после остановки не воспроизводится анимация Idle, да и после перезарядки тоже ничего не воспроизводится.. подправьте пожалуйста, кто знает. Анимаций вполне хватает, главное что бы они работали нормально, а не как у меня... в данный момент. Сделайте чтобы анимация бега была возможно если персонаж идет(то есть зажата хотябы одна из кнопок "Vertical"или/и "Horizontal"). Спасибо!
Сообщение отредактировал korveen - Сб, 23 Ноя 2013, 22:48
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);
//если не идет перезарядка, то можно стрелять и перезаряжать, иначе нельзя стрелять и перезаряжать пока перезарядка не пройдет. 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;
// Проверяем попала ли куда-нибудь пуля 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);