Çözüldü Unity muzzleflash scripti

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

etol4040

Hectopat
Katılım
10 Mayıs 2020
Mesajlar
937
Çözümler
7
Şu an bir FPS oyun yapıyorum ama silhın ucundan ateş edince çıkan şeyi ateş edince nasıl açıp kapatıyoruz?
Biliyorum yapmayı da yeni bir ders yok muzzleflash eklemekle ilgili particle sistemi değişti onun için de eskileri olmuyor.

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class atesetme : MonoBehaviour {

public float mermı, sarjor, taplammermi, menzil, hasar1, hasar2, sıradakiates, ateszamani, sayi, zaman, maxzaman;
public bool ates,reload;
RaycastHit hit;
public Text mermiyazi;

void Start () {
zaman = maxzaman;
}

// Update is called once per frame
void Update () {
mermiyazi.text = ""+mermı+"/"+taplammermi;
if (Input.GetMouseButton(0) && mermı > 0 && Time.time > sıradakiates && !reload){
ates = true;
sıradakiates = Time.time + ateszamani;
mermı -= 1;
}
if (Input.GetKeyDown(KeyCode.R) && mermı != 30 && !reload)
{
reload = true;
}
if (reload)
{
sayi = sarjor - mermı;
zaman -= Time.deltaTime;
if(zaman <= 0)
{
reload = false;
zaman = maxzaman;
if (sayi > taplammermi)
{
mermı += taplammermi;
taplammermi = 0;
}
if (sayi < taplammermi)
{
mermı += sayi;
taplammermi -= sayi;
}
}
}
}
void FixedUpdate()
{
if (ates) {
ates = false;
if (Physics.Raycast(Camera.main.transform.position,Camera.main.transform.forward,out hit,menzil)){
if(hit.transform.tag == "Düşman")
{
Debug.Log("düşmana değdin");
}
}
}
}
}
Kod Böyleydi fakat böyle yapınca Compiler Error veriyor yeni yöntemi nedir?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AtesEtme : MonoBehaviour
{

public float mermı, sarjor, taplammermi, menzil, hasar1, hasar2, sıradakiates, ateszamani, sayi, zaman, maxzaman;
public bool ates, reload;
RaycastHit hit;
public Text mermiyazi;
ParticleEmitter muzzle;

void Start()
{
zaman = maxzaman;
}

// Update is called once per frame
void Update()
{
mermiyazi.text = "" + mermı + "/" + taplammermi;
if (Input.GetMouseButton(0) && mermı > 0 && Time.time > sıradakiates && !reload)
{
ates = true;
muzzle.emit = true
sıradakiates = Time.time + ateszamani;
mermı -= 1;
if (Input.GetMouseButtonUp(0) || mermiyazi == 0) {
{
muzzle.emit = false
}
if (Input.GetKeyDown(KeyCode.R) && mermı != 30 && !reload)
{
reload = true;
}
if (reload)
{
sayi = sarjor - mermı;
zaman -= Time.deltaTime;
if (zaman <= 0)
{
reload = false;
zaman = maxzaman;
if (sayi > taplammermi)
{
mermı += taplammermi;
taplammermi = 0;
}
if (sayi < taplammermi)
{
mermı += sayi;
taplammermi -= sayi;
}
}
}
}
void FixedUpdate()
{
if (ates)
{
ates = false;
if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, menzil))
{
if (hit.transform.tag == "Düşman")
{
Debug.Log("düşmana değdin");
}
}
}
}
}

Eğer biliyorsanız söyleyin burada takıldım :\
Biliyorsanız birde;
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AtesEtme : MonoBehaviour
{
    public GameObject theGun;
    public AudioSource gunShot;
    public GameObject muzzleFlash
    public float mermı, sarjor, taplammermi, menzil, hasar1, hasar2, sıradakiates, ateszamani, sayi, zaman, maxzaman;(unexpected symbol "public"in class scruct or interface member definication)
    public bool ates, reload;
    RaycastHit hit;
    public Text mermiyazi;

    void Start()
    {
        zaman = maxzaman;
    }

    // Update is called once per frame
    void Update()
    {
        mermiyazi.text = "" + mermı + "/" + taplammermi;
        if (Input.GetMouseButton(0) && mermı > 0 && Time.time > sıradakiates && !reload)
        {
            ates = true;
            sıradakiates = Time.time + ateszamani;
            mermı -= 1;
        }
        if (Input.GetKeyDown(KeyCode.R) && mermı != 30 && !reload)
        {
            reload = true;
        }
        if (reload)
        {
            sayi = sarjor - mermı;
            zaman -= Time.deltaTime;
            if (zaman <= 0)
            {
                reload = false;
                zaman = maxzaman;
                if (sayi > taplammermi)
                {
                    mermı += taplammermi;
                    taplammermi = 0;
                }
                if (sayi < taplammermi)
                {
                    mermı += sayi;
                    taplammermi -= sayi;
                }
            }
        }
    }
    void FixedUpdate()
    {
        if (ates)
        {
            ates = false;
            if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, menzil))
            {
                if (hit.transform.tag == "Düşman")
                {
                    Debug.Log("düşmana değdin");
                }
            }
        }
    }
}
Başka bir scripte geçtim
using System.Collections;
using UnityEngine;
using System.Collections.Generic;

public class MuzzleFlash : MonoBehaviour {
{
public GameObject theGun;
public AudioSource gunShot;
public bool isFiring = false;
public GameObject muzzleFlash;

void Update()
{
if (Input.GetButtonDown("Fire1"))
{
if (isFiring == false)
{
StartCoroutine(FireHandgun());
}
}
}


IEnumerator FireHandgun()
{
isFiring = true;
theGun.GetComponent<Animator>().Play("PistolFire");
muzzleFlash.SetActive(true);
gunShot.Play();
yield return new WaitForSeconds(0.05f)
muzzleFlash.SetActive(false);
yield return new WaitForSeconds(0.45f);
theGun.GetComponent<Animator>().Play("New State");
isFiring = false;
}
}

C#:
[CODE=csharp]using System.Collections;
using UnityEngine;
using System.Collections.Generic;

public class MuzzleFlash : MonoBehaviour {
{
    public GameObject theGun;
    public AudioSource gunShot;
    public bool isFiring = false;
    public GameObject muzzleFlash;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            if (isFiring == false)
            {
                StartCoroutine(FireHandgun());
            }
        }
    }


    IEnumerator FireHandgun()
    {
        isFiring = true;
        theGun.GetComponent<Animator>().Play("PistolFire");
        muzzleFlash.SetActive(true);
        gunShot.Play();
        yield return new WaitForSeconds(0.05f)
        muzzleFlash.SetActive(false);
        yield return new WaitForSeconds(0.45f);
        theGun.GetComponent<Animator>().Play("New State");
        isFiring = false;
    }
}
[/CODE]
 
Son düzenleme:
Çözüm
İlk başta start ve update in üstüne

public ParticleSystem muzzleParticle;

ekleyin. Sonra el ile buraya silahınızın ucunda gözükmesini istediğiniz efekti verin.Bu particle'ı silahınızın namnusunun ucuna yerleştirmelisiniz. Ardından her ateş ettiğinizde

muzzleParticle.Play(true);

komutunu çağırın. bu particle'ın Life Time ı oldukça kısa olmalı ki 2. kez ateş ettiğinizde kötü gözükmesin
İlk başta start ve update in üstüne

public ParticleSystem muzzleParticle;

ekleyin. Sonra el ile buraya silahınızın ucunda gözükmesini istediğiniz efekti verin.Bu particle'ı silahınızın namnusunun ucuna yerleştirmelisiniz. Ardından her ateş ettiğinizde

muzzleParticle.Play(true);

komutunu çağırın. bu particle'ın Life Time ı oldukça kısa olmalı ki 2. kez ateş ettiğinizde kötü gözükmesin
 
Çözüm
İlk başta start ve update in üstüne

public ParticleSystem muzzleParticle;

ekleyin. Sonra el ile buraya silahınızın ucunda gözükmesini istediğiniz efekti verin.Bu particle'ı silahınızın namnusunun ucuna yerleştirmelisiniz. Ardından her ateş ettiğinizde

muzzleParticle.Play(true);

komutunu çağırın. bu particle'ın Life Time ı oldukça kısa olmalı ki 2. kez ateş ettiğinizde kötü gözükmesin
Nerden Muzzle çıkacağını nasıl belirliyorum?
 
Son düzenleme:
Ve birde mermi biterse nasıl muzzle'ı durdurabilirim?

Bunu kullandığımda taramalı silahta teker teker basmam gerek.
Özür dilerim mesajı geç gördüm epey. Ateş etme fonksiyonu mermi bittiğinde çağrılmıyordur muhtemelen. Dolayısıyla bu muzzle efect i ateş edilebilir zamanlarda play ederseniz yani örneğin ateş ettiğinde mermi yokken hasar vermiyorsa ama mermi varken hasar veriyoesa siz hasar verdiğiniz kısımda bu efecti play edebilirsiniz. Taramalı olduğunda da yine ateş edilebilir anlarda çıkacağı için sorun olmayacaktır
 
Özür dilerim mesajı geç gördüm epey. Ateş etme fonksiyonu mermi bittiğinde çağrılmıyordur muhtemelen. Dolayısıyla bu muzzle efect i ateş edilebilir zamanlarda play ederseniz yani örneğin ateş ettiğinde mermi yokken hasar vermiyorsa ama mermi varken hasar veriyoesa siz hasar verdiğiniz kısımda bu efecti play edebilirsiniz. Taramalı olduğunda da yine ateş edilebilir anlarda çıkacağı için sorun olmayacaktır
Demek istediğim:
Taramalıyı glock gibi kullanınca tek muzzle çıkıyor ve bende oyunumu bundan dolayı yapmayı bıraktım.
 

Yeni konular

Geri
Yukarı