Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pomocy ze skryptem (audio)


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam problem, Mianowicie mój skrypt na otwarzanie dzwieku działa, ale źle .Jest takie coś jak by "echo loop"

Z góry dzieki , + za pomoc .

 

#Unity3d...

using UnityEngine;

using System.Collections;



public class audio : MonoBehaviour{

    public AudioClip dzwiek;

    

    void Update()

    {

        if (Input.GetMouseButton(0))

        {

            AudioSource.PlayClipAtPoint(dzwiek, new Vector3(5, 1, 2));

        }

    }

}

Practice Makes PerfectJulie James


 

Opublikowano

Nie do końca rozumiem, robi ci się loop?

btw. Wiesz że Update() wykonuje się co klatkę/FPS, czyli tym szybciej, im mocniejszy masz komputer (jak masz "potfora" GTX Titan Z i Core i7, to ten dźwięk w małej grze ci się będzie np. 400 razy na sekundę odtwarzał)

Opublikowano

Nie do końca rozumiem, robi ci się loop?

btw. Wiesz że Update() wykonuje się co klatkę/FPS, czyli tym szybciej, im mocniejszy masz komputer (jak masz "potfora" GTX Titan Z i Core i7, to ten dźwięk w małej grze ci się będzie np. 400 razy na sekundę odtwarzał)

Aha czyli jak zamienie np. Na Start() to będzie dobrze ?

Practice Makes PerfectJulie James


 

Opublikowano

nie....

Bo start wykonuje się tylko raz

To co mam użyć ?

Practice Makes PerfectJulie James


 

Opublikowano

To co mam użyć ?

Właśnie nie wiem :P

Opisz bardziej co się dzieje z dźwiękiem, to ci powiem (co się dzieje z dźwiękiem gdy jest w Update)

Opublikowano

Właśnie nie wiem :P

Opisz bardziej co się dzieje z dźwiękiem, to ci powiem (co się dzieje z dźwiękiem gdy jest w Update)

To tak jak przytrzymuje klawisz LPM to ten dzwięk dubluje sie i taki dzwięk jest dziwny kurde sprubuje to nagrać dziś... Ciężko to opisać.. Dzwięk niezadanża(niewiem jak to się pisze :-D) się kończyć niewiem , ale jak mam "GetMouseButtonDown(0) to dzwkęk jest ok ,ale jest pojędyńczy.

Practice Makes PerfectJulie James


 

Opublikowano

Musisz zrobić sobie jakiś obiekt AudioSource i go kontrolować odpowiednimi metodami.

Próbowałem ale coś nie tak było wgl dzwięku nie było.. Jesus to strasznie opóźnia mi prace.Próbowałem nawet z gotowymi skryptami i nic nagram krótki filmik jak to działa ok.godziny 20:00.. I tak dziękuje że pomagacie + dam jak wejde na kompa :)

Practice Makes PerfectJulie James


 

Opublikowano

Może dodaj if'kę czy dźwięk się skończył, a dopiero po skończeniu się dźwięku odtwórz dźwięk ?(ale ja nie wiem jak :P)

Opublikowano

Może dodaj if'kę czy dźwięk się skończył, a dopiero po skończeniu się dźwięku odtwórz dźwięk ?(ale ja nie wiem jak :P)

Hmm. No spróbuje, ale niewiem czy coś z tego będzie:/

#Edit:

 if(i == 0){
      i=1;
      AudioSource.PlayClipAtPoint(breathing1, transform.position);
      yield WaitForSeconds(2);
      audio.Stop();
      Debug.Log("stop sound");
 }

Practice Makes PerfectJulie James


 

Opublikowano

Może dodaj if'kę czy dźwięk się skończył, a dopiero po skończeniu się dźwięku odtwórz dźwięk ?(ale ja nie wiem jak :P)

Nie da się, aby tak zrobić trzeba by mieć jakiś obiekt AudioSource'a. Metoda AudioSource.PlayClipAtPoint nie ma takich możliwości, cała klasa za to ma.

 

Przykładowy kod i obiekty w inspektorze:

 

using UnityEngine;
using System.Collections;

public class PlayOnClick : MonoBehaviour {

    protected AudioSource glosnik;

	// Use this for initialization
	void Start () {
        glosnik = GameObject.FindObjectOfType<AudioSource>();
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButton(0))
        {
            if (!glosnik.isPlaying)
            {
                glosnik.Play();
            }
        }
	}
}

178481431023601699239.png225201431023601699239.png433391431023601699239.png

Ofc. jak będzie więcej głośników to trzeba wymyślić lepszy sposób pozyskiwania dostępu do nich(tagi, przypisywanie w inspektorze, inne...).

Opublikowano

Nie da się, aby tak zrobić trzeba by mieć jakiś obiekt AudioSource'a. Metoda AudioSource.PlayClipAtPoint nie ma takich możliwości, cała klasa za to ma.

 

Przykładowy kod i obiekty w inspektorze:

 

using UnityEngine;
using System.Collections;

public class PlayOnClick : MonoBehaviour {

    protected AudioSource glosnik;

	// Use this for initialization
	void Start () {
        glosnik = GameObject.FindObjectOfType<AudioSource>();
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButton(0))
        {
            if (!glosnik.isPlaying)
            {
                glosnik.Play();
            }
        }
	}
}

178481431023601699239.png225201431023601699239.png433391431023601699239.png

Ofc. jak będzie więcej głośników to trzeba wymyślić lepszy sposób pozyskiwania dostępu do nich(tagi, przypisywanie w inspektorze, inne...).

Zaraz to sprawdze.

Practice Makes PerfectJulie James


 

Opublikowano

Zaraz to sprawdze.

#Edit: No jest dzwięk, tylko że jest co 3-ci strzał. czyli [strzal + animacja] [strzal] [strzal] [strzal] [strzal + animacja] (taka miniAnimacja)

Practice Makes PerfectJulie James


 

Opublikowano

#Edit: No jest dzwięk, tylko że jest co 3-ci strzał. czyli [strzal + animacja] [strzal] [strzal] [strzal] [strzal + animacja] (taka miniAnimacja)

Skoro masz już jakieś skrypty do strzałów, to czemu po prostu nie zaczniesz odtwarzać dźwięku przy strzale?

Opublikowano

Skoro masz już jakieś skrypty do strzałów, to czemu po prostu nie zaczniesz odtwarzać dźwięku przy strzale?

udostempnie te skrypty :

 

 

 

/**

*  Script written by OMA [www.armedunity.com]

**/



//@ ExecuteInEditMode()



    var soundDraw : AudioClip;

    var soundFire : AudioClip;

    var soundReload : AudioClip;

    var soundGO : GameObject;

    var soundEmpty : AudioClip;



    var weaponAnim : GameObject;

    var Concrete : GameObject;

    var Wood : GameObject;

    var Metal : GameObject;

    var Dirt : GameObject;

    var Blood : GameObject;

    var untagged : GameObject;



    var layerMask : LayerMask;

    var muzzleFlash : Renderer;

    var muzzleLight : Light;

    var pelletsPerShot : int = 10;



    var damage : int = 50;

    var bulletsPerMag : int = 50;

    var magazines : int = 5;

    var fireRate : float = 0.1;

    var reloadTime : float = 3.0;

    var drawTime : float = 1.5;

    

    var range : float = 250.0;

    var force : float = 200.0;

    

    var inacuracy : float = 0.2;

    

    //Aiming

    var hipPosition : Vector3;

    var aimPosition : Vector3;

    private var aiming : boolean;

    private var curVect : Vector3;

    var aimSpeed : float = 0.25;

    

    //Field Of View

    var zoomSpeed : float = 0.5;

    var FOV : int = 40;

    

    private var bulletsLeft : int = 0;

    private var m_LastFrameShot : int = -10;

    private var nextFireTime : float = 0.0;

    private var reloading : boolean;

    private var draw : boolean;

    private var weaponCamera : GameObject;

    private var mainCamera : GameObject;

    private var playing : boolean = false;

    @HideInInspector

    var selected : boolean = false;

    //private var player : GameObject;

            

    //GUI

    var mySkin : GUISkin;

    

    //KickBack

    var kickGO : Transform;

    var kickUpside : float = 0.5;

    var kickSideways : float = 0.5;

    

    //Crosshair Textures

    var crosshair : Texture2D;

    

function Start(){

    weaponCamera = GameObject.FindWithTag("WeaponCamera");

    mainCamera = GameObject.FindWithTag("MainCamera");

    //player = GameObject.FindWithTag("Player");

    muzzleFlash.enabled = false;

    muzzleLight.enabled = false;

    bulletsLeft = bulletsPerMag;

    aiming = false;

}    

    

function Update(){

    if(selected){

    

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

            FireShotgun();

        }

        

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

            Reload();

        }

    }    

    

    if (Input.GetButton("Fire2") && !Input.GetButton ("Run") && !reloading){        

        if (!aiming){

            aiming = true;

            curVect = aimPosition - transform.localPosition;

        }

        if (transform.localPosition != aimPosition && aiming){

            if(Mathf.Abs(Vector3.Distance(transform.localPosition , aimPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){

                transform.localPosition = aimPosition;

            } else {

                transform.localPosition += curVect/aimSpeed * Time.deltaTime;                    

            }

        }

    } else {

        if (aiming){

            aiming = false;

            curVect = hipPosition-transform.localPosition;

            var go = GetComponentsInChildren(Renderer);

            for( var g : Renderer in go){

            if (g.name != "muzzle_flash")

                g.GetComponent.<Renderer>().enabled = true;

            }

        }

        

        if(Mathf.Abs(Vector3.Distance(transform.localPosition , hipPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){

            transform.localPosition = hipPosition;

        }else{

            transform.localPosition += curVect/aimSpeed * Time.deltaTime;

        }

    }

        

    if(aiming){

        mainCamera.GetComponent.<Camera>().fieldOfView -= FOV * Time.deltaTime/zoomSpeed;

        if(mainCamera.GetComponent.<Camera>().fieldOfView < FOV){

            mainCamera.GetComponent.<Camera>().fieldOfView = FOV;

        }

        weaponCamera.GetComponent.<Camera>().fieldOfView -= 40 * Time.deltaTime/zoomSpeed;

        if(weaponCamera.GetComponent.<Camera>().fieldOfView < 40){

            weaponCamera.GetComponent.<Camera>().fieldOfView = 40;

        }

            

    }else{

        mainCamera.GetComponent.<Camera>().fieldOfView += 60 * Time.deltaTime/0.5;

        if(mainCamera.GetComponent.<Camera>().fieldOfView > 60){

            mainCamera.GetComponent.<Camera>().fieldOfView = 60;

        }

        weaponCamera.GetComponent.<Camera>().fieldOfView += 50 * Time.deltaTime/0.5;

        if(weaponCamera.GetComponent.<Camera>().fieldOfView > 50){

            weaponCamera.GetComponent.<Camera>().fieldOfView = 50;

        }

    }

}



function LateUpdate(){

    if (m_LastFrameShot == Time.frameCount){

        muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);

        muzzleFlash.enabled = true;

        muzzleLight.enabled = true;        

    }else{

        muzzleFlash.enabled = false;

        muzzleLight.enabled = false;

    }    

}



function OnGUI (){

    if(selected){

        GUI.skin = mySkin;

        var style1 = mySkin.customStyles[0];

        

        

        GUI.Label (Rect(Screen.width - 200,Screen.height-35,200,80),"Ammo : ");

        GUI.Label (Rect(Screen.width - 110,Screen.height-35,200,80),"" + bulletsLeft, style1);

        GUI.Label (Rect(Screen.width - 80,Screen.height-35,200,80)," / " + magazines);    

        

        if(crosshair != null){    

            var w = crosshair.width/2;

            var h = crosshair.height/2;

            position = Rect((Screen.width - w)/2,(Screen.height - h )/2, w, h);

            if (!aiming) {

                GUI.DrawTexture(position, crosshair);

            }

        }    

    }    

}





function FireShotgun (){

    if (reloading || bulletsLeft <= 0 || draw){

        if(bulletsLeft == 0){

            OutOfAmmo();

        }        

        return;

    }

    

    var pellets : int = 0;

    

    if (Time.time - fireRate > nextFireTime)

        nextFireTime = Time.time - Time.deltaTime;

    if(Time.time > nextFireTime){

        while (pellets < pelletsPerShot){

            FireOneShot();

            pellets++;             

        }

        bulletsLeft--;

        nextFireTime = Time.time + fireRate;

        KickBack();

    }

}



function FireOneShot (){

    

    var direction = gameObject.transform.TransformDirection(Vector3(Random.Range(-0.01, 0.01) * inacuracy, Random.Range(-0.01, 0.01) * inacuracy,1));

    var hit : RaycastHit;

    var position = transform.parent.position;

    

    if (Physics.Raycast (position, direction, hit, range, layerMask.value)) {

    

        var contact = hit.point;

        var rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);

        

        if (hit.rigidbody){

            hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

        }



        if (hit.transform.tag == "Untagged") {

            var default1 = Instantiate (untagged, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            default1.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "Concrete") {

            var bulletHole = Instantiate (Concrete, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            bulletHole.transform.parent = hit.transform;

        }    

        

        if (hit.transform.tag == "Wood") {

            var woodHole = Instantiate (Wood, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            woodHole.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "Metal") {

            var metalHole = Instantiate (Metal, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            metalHole.transform.parent = hit.transform;

        }

        

        

        if (hit.transform.tag == "Dirt") {

            var dirtHole = Instantiate (Dirt, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            dirtHole.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "canBeUsed") {

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

        }    

        

        if (hit.transform.tag == "Enemy") {

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            

            yield WaitForSeconds(0.03);

            var bloodHole = Instantiate (Blood, contact, rotation) as GameObject;

            if(Physics.Raycast (position, direction, hit, range, layerMask.value)){

                if(hit.rigidbody){

                    hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

                }

            }    

        }

    }



    

    if (GetComponent.<AudioSource>()) {

        GetComponent.<AudioSource>().clip = soundFire;

        GetComponent.<AudioSource>().Play();

    }

    m_LastFrameShot = Time.frameCount;



    weaponAnim.GetComponent.<Animation>().Rewind("ShotgunFire");

    weaponAnim.GetComponent.<Animation>().Play("ShotgunFire");

}





function OutOfAmmo(){

    if(reloading || playing)

    return;

    

    playing = true;

    soundGO.GetComponent.<AudioSource>().clip = soundEmpty;

    soundGO.GetComponent.<AudioSource>().volume = 0.7;

    soundGO.GetComponent.<AudioSource>().Play();

    

    weaponAnim.GetComponent.<Animation>()["Fire"].speed = 2.0;

    weaponAnim.GetComponent.<Animation>().Play("Fire");

    yield WaitForSeconds(0.2);

    playing = false;

}





function Reload (){

    if(reloading)

    return;

    

    reloading = true;

    if (magazines > 0 && bulletsLeft < bulletsPerMag) {

        weaponAnim.GetComponent.<Animation>()["ShotgunReload"].speed = .8;

        weaponAnim.GetComponent.<Animation>().Play("ShotgunReload", PlayMode.StopAll);

        weaponAnim.GetComponent.<Animation>().CrossFade("ShotgunReload");

        GetComponent.<AudioSource>().PlayOneShot(soundReload);

        yield WaitForSeconds(reloadTime);

        magazines --;

        magazines --;

        bulletsLeft = bulletsPerMag;

    }

    reloading = false;

}



function KickBack() {

    kickGO.localRotation = Quaternion.Euler(kickGO.localRotation.eulerAngles - Vector3(kickUpside, Random.Range(-kickSideways, kickSideways), 0));   

}



function DrawWeapon(){

    draw = true;

    GetComponent.<AudioSource>().clip = soundDraw;

    GetComponent.<AudioSource>().Play();

    weaponAnim.GetComponent.<Animation>().Play("Draw", PlayMode.StopAll);

    weaponAnim.GetComponent.<Animation>().CrossFade("Draw");

    yield WaitForSeconds(drawTime);

    draw = false;

    reloading = false;

    selected = true;

}



function Deselect(){

    selected = false;

    mainCamera.GetComponent.<Camera>().fieldOfView = 60;

    weaponCamera.GetComponent.<Camera>().fieldOfView = 50;

    transform.localPosition = hipPosition;

}

 

 

######## 2 #######

 

 

 

@ ExecuteInEditMode()



enum fireMode { none, semi, auto, burst, launcher}

@HideInInspector

var currentMode = fireMode.semi;

var firstMode = fireMode.semi;

var secondMode = fireMode.launcher;



enum Ammo { Magazines, Bullets }

var ammoMode : Ammo = Ammo.Magazines;



var canReloadLauncher : boolean = false;

    

    var soundDraw : AudioClip;

    var soundFire : AudioClip;

    var soundReload : AudioClip;

    var soundEmpty : AudioClip;

    var switchModeSound : AudioClip;



    var weaponAnim : GameObject;

    var Concrete : GameObject;

    var Wood : GameObject;

    var Metal : GameObject;

    var Dirt : GameObject;

    var Blood : GameObject;

    var untagged : GameObject;



    var layerMask : LayerMask;

    var muzzleFlash : Renderer;

    var muzzleLight : Light;



    var damage : int = 50;

    var bulletsPerMag : int = 50;

    var magazines : int = 5;

    private var fireRate : float = 0.1;

    var fireRateFirstMode : float = 0.1;

    var fireRateSecondMode : float = 0.1;

    var reloadTime : float = 3.0;

    var reloadAnimSpeed : float = 1.2;

    var drawTime : float = 1.5;

    

    var range : float = 250.0;

    var force : float = 200.0;

    

    //Weapon accuracy

    private var baseInaccuracy : float;

    var baseInaccuracyAIM : float = 0.005;

    var baseInaccuracyHIP : float = 1.5;

    var inaccuracyIncreaseOverTime : float = 0.2;

    var inaccuracyDecreaseOverTime : float = 0.5;

    private var maximumInaccuracy : float;

    var maxInaccuracyHIP : float = 5.0;

    var maxInaccuracyAIM : float = 1.0;

    

    private var triggerTime : float = 0.05;

    

    //Aiming

    var hipPosition : Vector3;

    var aimPosition : Vector3;

    private var aiming : boolean;

    private var curVect : Vector3;

    var aimSpeed : float = 0.25;

    

    //Field Of View

    var zoomSpeed : float = 0.5;

    var FOV : int = 40;

    

    private var bulletsLeft : int = 0;

    private var m_LastFrameShot : int = -10;

    private var nextFireTime : float = 0.0;

    @HideInInspector

    var reloading : boolean;

    private var draw : boolean;

    private var weaponCamera : GameObject;

    private var mainCamera : GameObject;

    private var playing : boolean = false;

    @HideInInspector

    var selected : boolean = false;

    private var player : GameObject;

    private var isFiring : boolean = false;

    private var bursting : boolean = false;

    

    //Burst

    var shotsPerBurst : int = 3;

    var burstTime : float = 0.07;    

    

    //GUI

    var mySkin : GUISkin;



    //Launcher

    var projectilePrefab : Rigidbody;

    var projectileSpeed = 30.0;

    var projectiles = 20;

    var launchPosition : GameObject;

    var fireLauncherAnimGO : GameObject;

    var soundReloadLauncher : AudioClip;

    private var launcjerReload : boolean = false;

    var launcherReloadTime : float = 2.0;

    var reloadlauncher : String = "reloadlauncher";

    private var rocket : GameObject;

    

    //KickBack

    var kickGO : Transform;

    var kickUpside : float = 0.5;

    var kickSideways : float = 0.5;

    

    //Crosshair Textures

    var crosshairFirstModeHorizontal : Texture2D;

    var crosshairFirstModeVertical : Texture2D;

    var crosshairSecondMode : Texture2D;

    private var adjustMaxCroshairSize : float = 6.0;

    

    //Switch Weapon Fire Modes

    private var canSwicthMode : boolean = true;

    

function Start(){

    weaponCamera = GameObject.FindWithTag("WeaponCamera");

    mainCamera = GameObject.FindWithTag("MainCamera");

    player = GameObject.FindWithTag("Player");

    muzzleFlash.enabled = false;

    muzzleLight.enabled = false;

    bulletsLeft = bulletsPerMag;

    currentMode = firstMode;

    fireRate = fireRateFirstMode;

    aiming = false;

    if(firstMode == fireMode.launcher){

        rocket = GameObject.Find("RPGrocket");

    }

    if(ammoMode == Ammo.Bullets){

        magazines = magazines * bulletsPerMag;

    }

}    

    

function Update(){

    if(selected){

    

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

            if(currentMode == fireMode.semi){

                fireSemi();

            }

        

            if(currentMode == fireMode.launcher){

                fireLauncher();

            }

            

            if(currentMode == fireMode.burst){

                fireBurst();

            }

            

            if(bulletsLeft > 0)

            isFiring = true;    

        }

        

        if (Input.GetButton ("Fire")){

            if(currentMode == fireMode.auto){

                fireSemi();

                if(bulletsLeft > 0)

                isFiring = true;

            }    

        }

        

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

            Reload();

        }

    }



    if (Input.GetButton("Fire2") && !Input.GetButton ("Run") && !reloading){        

        if (!aiming){

            aiming = true;

            curVect = aimPosition - transform.localPosition;

        }

        if (transform.localPosition != aimPosition && aiming){

            if(Mathf.Abs(Vector3.Distance(transform.localPosition , aimPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){

                transform.localPosition = aimPosition;

            } else {

                transform.localPosition += curVect/aimSpeed * Time.deltaTime;                    

            }

        }

    } else {

        if (aiming){

            aiming = false;

            curVect = hipPosition - transform.localPosition;

            /*

            var go = GetComponentsInChildren(Renderer);

            for( var g : Renderer in go){

            if (g.name != "muzzle_flash")

                g.renderer.enabled = true;

            }

            */

        }

        

        if(Mathf.Abs(Vector3.Distance(transform.localPosition , hipPosition)) < curVect.magnitude/aimSpeed * Time.deltaTime){

            transform.localPosition = hipPosition;

        }else{

            transform.localPosition += curVect/aimSpeed * Time.deltaTime;

        }

    }

        

    if(aiming){

        maximumInaccuracy = maxInaccuracyAIM;

        baseInaccuracy = baseInaccuracyAIM;

        mainCamera.GetComponent.<Camera>().fieldOfView -= FOV * Time.deltaTime/zoomSpeed;

        if(mainCamera.GetComponent.<Camera>().fieldOfView < FOV){

            mainCamera.GetComponent.<Camera>().fieldOfView = FOV;

        }

        weaponCamera.GetComponent.<Camera>().fieldOfView -= 40 * Time.deltaTime/zoomSpeed;

        if(weaponCamera.GetComponent.<Camera>().fieldOfView < 40){

            weaponCamera.GetComponent.<Camera>().fieldOfView = 40;

        }

    }else{

        maximumInaccuracy = maxInaccuracyHIP;

        baseInaccuracy = baseInaccuracyHIP;

        mainCamera.GetComponent.<Camera>().fieldOfView += 60 * Time.deltaTime/0.5;

        if(mainCamera.GetComponent.<Camera>().fieldOfView > 60){

            mainCamera.GetComponent.<Camera>().fieldOfView = 60;

        }

        weaponCamera.GetComponent.<Camera>().fieldOfView += 50 * Time.deltaTime/0.5;

        if(weaponCamera.GetComponent.<Camera>().fieldOfView > 50){

            weaponCamera.GetComponent.<Camera>().fieldOfView = 50;

        }

    }

    

    if(player.GetComponent.<Rigidbody>().velocity.magnitude > 3.0){

        triggerTime += inaccuracyDecreaseOverTime;

    }



    if(isFiring){

        triggerTime += inaccuracyIncreaseOverTime;

    }else{

        if(player.GetComponent.<Rigidbody>().velocity.magnitude < 3.0)

        triggerTime -= inaccuracyDecreaseOverTime;

    }

    

    if (triggerTime >= maximumInaccuracy) {

        triggerTime = maximumInaccuracy;

    }

    

    if (triggerTime <= baseInaccuracy) {

        triggerTime = baseInaccuracy;

    }



    if(nextFireTime > Time.time){

        isFiring = false;

    }    

    

    if(Input.GetButtonDown("switchFireMode") && secondMode != fireMode.none && canSwicthMode){

        if(currentMode != firstMode){

            FirstFireMode();

        }else{

            SecondFireMode();

        }

    }            

}





function LateUpdate(){

    if (m_LastFrameShot == Time.frameCount){

        muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);

        muzzleFlash.enabled = true;

        muzzleLight.enabled = true;        

    }else{

        muzzleFlash.enabled = false;

        muzzleLight.enabled = false;

    }    

}



function OnGUI (){

    if(selected){

        GUI.skin = mySkin;

        var style1 = mySkin.customStyles[0];

        if(ammoMode == Ammo.Magazines){

            if(firstMode != fireMode.none && firstMode != fireMode.launcher || secondMode != fireMode.none && secondMode != fireMode.launcher){

                GUI.Label (Rect(Screen.width - 200,Screen.height-35,200,80),"Ammo : ");

                GUI.Label (Rect(Screen.width - 110,Screen.height-35,200,80),"" + bulletsLeft, style1);

                GUI.Label (Rect(Screen.width - 80,Screen.height-35,200,80)," / " + magazines);

            }

        }    

        

        if(ammoMode == Ammo.Bullets){

            if(firstMode != fireMode.none && firstMode != fireMode.launcher || secondMode != fireMode.none && secondMode != fireMode.launcher){

                GUI.Label (Rect(Screen.width - 200,Screen.height-35,200,80),"Ammo : ");

                GUI.Label (Rect(Screen.width - 110,Screen.height-35,200,80),"" + bulletsLeft, style1);

                GUI.Label (Rect(Screen.width - 80,Screen.height-35,200,80)," |  " + magazines);

            }    

        }

        

        if(firstMode != fireMode.none || secondMode != fireMode.none){

            GUI.Label (Rect(Screen.width - 200,Screen.height-65,200,80),"Firing Mode :");

            GUI.Label (Rect(Screen.width - 110,Screen.height-65,200,80),"" + currentMode, style1);

        }

        

        if(secondMode == fireMode.launcher || firstMode == fireMode.launcher){

            GUI.Label (Rect(Screen.width - 200,Screen.height-95,200,80),"Projectiles : ");

            GUI.Label (Rect(Screen.width - 110,Screen.height-95,200,80),"" + projectiles, style1);

        }    

        

        if(crosshairFirstModeHorizontal != null){    

            if(currentMode != fireMode.launcher){

                var w = crosshairFirstModeHorizontal.width;

                var h = crosshairFirstModeHorizontal.height;

                position1 = Rect((Screen.width + w)/2 + (triggerTime * adjustMaxCroshairSize),(Screen.height - h)/2, w, h);

                position2 = Rect((Screen.width - w)/2,(Screen.height + h)/2 + (triggerTime * adjustMaxCroshairSize), w, h);

                position3 = Rect((Screen.width - w)/2 - (triggerTime * adjustMaxCroshairSize) - w,(Screen.height - h )/2, w, h);

                position4 = Rect((Screen.width - w)/2,(Screen.height - h)/2 - (triggerTime * adjustMaxCroshairSize) - h, w, h);

                if (!aiming) {

                    GUI.DrawTexture(position1, crosshairFirstModeHorizontal);     //Right

                    GUI.DrawTexture(position2, crosshairFirstModeVertical);     //Up

                    GUI.DrawTexture(position3, crosshairFirstModeHorizontal);     //Left

                    GUI.DrawTexture(position4, crosshairFirstModeVertical);        //Down

                }

            }

        }    

        

        if(crosshairSecondMode != null){

            if(currentMode == fireMode.launcher){

                var width = crosshairSecondMode.width/2;

                var height = crosshairSecondMode.height/2;

                position = Rect((Screen.width - width)/2,(Screen.height - height )/2, width, height);

                if (!aiming) {

                    GUI.DrawTexture(position, crosshairSecondMode);

                }

            }

        }    

    }    

}



function FirstFireMode(){

    

    canSwicthMode = false;

    selected = false;

    weaponAnim.GetComponent.<Animation>().Rewind("SwitchAnim");

    weaponAnim.GetComponent.<Animation>().Play("SwitchAnim");

    GetComponent.<AudioSource>().clip = switchModeSound;

    GetComponent.<AudioSource>().Play();

    yield WaitForSeconds(0.6);

    currentMode = firstMode;

    fireRate = fireRateFirstMode;

    selected = true;

    canSwicthMode = true;

}



function SecondFireMode(){

    

    canSwicthMode = false;

    selected = false;

    GetComponent.<AudioSource>().clip = switchModeSound;

    GetComponent.<AudioSource>().Play();

    weaponAnim.GetComponent.<Animation>().Play("SwitchAnim");

    yield WaitForSeconds(0.6);

    currentMode = secondMode;

    fireRate = fireRateSecondMode;

    selected = true;

    canSwicthMode = true;

    

}



function fireSemi (){

    if (reloading || bulletsLeft <= 0){

        if(bulletsLeft == 0){

            OutOfAmmo();

        }        

        return;

    }

    

    if (Time.time - fireRate > nextFireTime)

        nextFireTime = Time.time - Time.deltaTime;



        while(nextFireTime < Time.time){

            fireOneBullet();

            nextFireTime = Time.time + fireRate;

    }

}



function fireLauncher (){

    if (reloading || projectiles <= 0){

        if(projectiles == 0){

            OutOfAmmo();

        }        

        return;

    }

    

    if (Time.time - fireRate > nextFireTime)

        nextFireTime = Time.time - Time.deltaTime;



        while(nextFireTime < Time.time){

            fireProjectile();

            nextFireTime = Time.time + fireRate;

    }

}



function fireBurst (){

    var shotCounter : int = 0;

    

    if (reloading || bursting || bulletsLeft <= 0){

        if(bulletsLeft <= 0){

            OutOfAmmo();

        }        

        return;

    }

    

    if (Time.time - fireRate > nextFireTime)

        nextFireTime = Time.time - Time.deltaTime;



    if(Time.time > nextFireTime){

        while (shotCounter < shotsPerBurst){

            bursting = true;

            shotCounter++;

            if (bulletsLeft > 0){

                fireOneBullet();

            }            

            yield WaitForSeconds(burstTime);

        }           

        nextFireTime = Time.time + fireRate;

    }

    bursting = false;

}





function fireOneBullet (){

    if (nextFireTime > Time.time || draw){

        if(bulletsLeft <= 0){

            OutOfAmmo();

        }    

        return;

    }

    

    var direction = gameObject.transform.TransformDirection(Vector3(Random.Range(-0.01, 0.01) * triggerTime, Random.Range(-0.01, 0.01) * triggerTime,1));

    var hit : RaycastHit;

    var position = transform.parent.position;



    if (Physics.Raycast(position, direction, hit, range, layerMask.value)) {

    

        var contact = hit.point;

        var rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);

        

        if (hit.rigidbody){

            hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

        }



        if (hit.transform.tag == "Untagged") {

            var default1 = Instantiate (untagged, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            default1.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "Concrete") {

            var bulletHole = Instantiate (Concrete, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            bulletHole.transform.parent = hit.transform;

        }    

        

        if (hit.transform.tag == "Wood") {

            var woodHole = Instantiate (Wood, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            woodHole.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "Metal") {

            var metalHole = Instantiate (Metal, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            metalHole.transform.parent = hit.transform;

        }

        

        

        if (hit.transform.tag == "Dirt") {

            var dirtHole = Instantiate (Dirt, contact, rotation) as GameObject;

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            dirtHole.transform.parent = hit.transform;

        }

        

        if (hit.transform.tag == "canBeUsed") {

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

        }    

        

        if (hit.transform.tag == "Enemy") {

            hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);

            

            yield WaitForSeconds(0.01);

            var bloodHole = Instantiate (Blood, contact, rotation) as GameObject;

            if(Physics.Raycast (position, direction, hit, range, layerMask.value)){

                if(hit.rigidbody){

                    hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

                }

            }    

        }

    }

    

    PlayAudioClip(soundFire, transform.position, 0.7);

    m_LastFrameShot = Time.frameCount;



    weaponAnim.GetComponent.<Animation>().Rewind("Fire");

    weaponAnim.GetComponent.<Animation>().Play("Fire");

    KickBack();

    bulletsLeft--;

}



function PlayAudioClip (clip : AudioClip, position : Vector3, volume : float) {

    var go = new GameObject ("One shot audio");

    go.transform.position = position;

    var source : AudioSource = go.AddComponent (AudioSource);

    source.clip = clip;

    source.volume = volume;

    source.pitch = Random.Range(0.95,1.05);

    source.Play ();

    Destroy (go, clip.length);

    return source;

}



function fireProjectile (){

    if (projectiles < 1 || draw || launcjerReload){    

        return;

    }

    

    var instantiatedProjectile : Rigidbody = Instantiate (projectilePrefab, launchPosition.transform.position, launchPosition.transform.rotation);

    fireLauncherAnimGO.GetComponent.<Animation>().Play("FireGL");

    instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, projectileSpeed));

    Physics.IgnoreCollision(instantiatedProjectile.GetComponent.<Collider>(), gameObject.FindWithTag("Player").transform.root.GetComponent.<Collider>());

    projectiles--;

    

    if(canReloadLauncher)

    ReloadLauncher();

}



function OutOfAmmo(){

    if(reloading || playing)

    return;

    

    playing = true;

    PlayAudioClip(soundEmpty, transform.position, 0.7);

    

    weaponAnim.GetComponent.<Animation>()["Fire"].speed = 2.0;

    weaponAnim.GetComponent.<Animation>().Rewind("Fire");

    weaponAnim.GetComponent.<Animation>().Play("Fire");

    yield WaitForSeconds(0.2);

    playing = false;

}

//For RPG

function ReloadLauncher(){

    if(projectiles > 0){

        launcjerReload = true;

        canSwicthMode = false;

        DisableProjectileRenderer();        

        yield WaitForSeconds(0.5);

        GetComponent.<AudioSource>().PlayOneShot(soundReloadLauncher);

        weaponAnim.GetComponent.<Animation>()[reloadlauncher].speed = 1.2;

        weaponAnim.GetComponent.<Animation>().Play(reloadlauncher);

        yield WaitForSeconds(launcherReloadTime);    

        canSwicthMode = true;

        launcjerReload = false;

    }else{

        if(rocket != null && projectiles == 0){

            rocket.GetComponent.<Renderer>().enabled = false;

        }

    }    

    

}



function DisableProjectileRenderer(){

    if(rocket != null){

        rocket.GetComponent.<Renderer>().enabled = false;

    }

    yield WaitForSeconds(launcherReloadTime/1.5);

    if(rocket != null){

        rocket.GetComponent.<Renderer>().enabled = true;

    }

}



function EnableProjectileRenderer(){

    if(rocket != null){

        rocket.GetComponent.<Renderer>().enabled = true;

    }

}



function Reload (){

    if(reloading)

    return;

    

    if(ammoMode == Ammo.Magazines){

        reloading = true;

        canSwicthMode = false;

        if (magazines > 0 && bulletsLeft != bulletsPerMag) {

            weaponAnim.GetComponent.<Animation>()["Reload"].speed = reloadAnimSpeed;

            weaponAnim.GetComponent.<Animation>().Play("Reload", PlayMode.StopAll);

            weaponAnim.GetComponent.<Animation>().CrossFade("Reload");

            GetComponent.<AudioSource>().PlayOneShot(soundReload);

            yield WaitForSeconds(reloadTime);

            magazines --;

            bulletsLeft = bulletsPerMag;

        }

        reloading = false;

        canSwicthMode = true;

        isFiring = false;

    }    

    

    if(ammoMode == Ammo.Bullets){

        if(magazines > 0 && bulletsLeft != bulletsPerMag){

            if(magazines > bulletsPerMag){

                canSwicthMode = false;

                reloading = true;

                weaponAnim.GetComponent.<Animation>()["Reload"].speed = reloadAnimSpeed;

                weaponAnim.GetComponent.<Animation>().Play("Reload", PlayMode.StopAll);

                weaponAnim.GetComponent.<Animation>().CrossFade("Reload");

                GetComponent.<AudioSource>().PlayOneShot(soundReload);

                yield WaitForSeconds(reloadTime);

                magazines -= bulletsPerMag - bulletsLeft;

                bulletsLeft = bulletsPerMag;

                canSwicthMode = true;

                reloading = false;

                return;

            }else{

                canSwicthMode = false;

                reloading = true;

                weaponAnim.GetComponent.<Animation>()["Reload"].speed = reloadAnimSpeed;

                weaponAnim.GetComponent.<Animation>().Play("Reload", PlayMode.StopAll);

                weaponAnim.GetComponent.<Animation>().CrossFade("Reload");

                GetComponent.<AudioSource>().PlayOneShot(soundReload);

                yield WaitForSeconds(reloadTime);

                var bullet = Mathf.Clamp(bulletsPerMag, magazines, bulletsLeft + magazines);

                magazines -= (bullet - bulletsLeft);

                bulletsLeft = bullet;

                canSwicthMode = true;

                reloading = false;

                return;

            }    

        }    

    }

}



function KickBack() {

    kickGO.localRotation = Quaternion.Euler(kickGO.localRotation.eulerAngles - Vector3(kickUpside, Random.Range(-kickSideways, kickSideways), 0));   

}



function DrawWeapon(){

    draw = true;

    canSwicthMode = false;

    GetComponent.<AudioSource>().clip = soundDraw;

    GetComponent.<AudioSource>().Play();

    weaponAnim.GetComponent.<Animation>().Play("Draw", PlayMode.StopAll);

    weaponAnim.GetComponent.<Animation>().CrossFade("Draw");

    yield WaitForSeconds(drawTime);

    draw = false;

    reloading = false;

    canSwicthMode = true;

    selected = true;

    

}



function Deselect(){

    selected = false;

    mainCamera.GetComponent.<Camera>().fieldOfView = 60;

    weaponCamera.GetComponent.<Camera>().fieldOfView = 50;

    transform.localPosition = hipPosition;

}

    

  

 

 

 

ten drugi to niewiem czy działa poprawnie

Practice Makes PerfectJulie James


 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...