簡體   English   中英

我怎樣才能使這個去抖動腳本工作? Unity3D

[英]How Can I Make This Debounce Script Work? Unity3D

這是我的腳本,當我首先點擊去抖動時,但在等待之后你可以垃圾點擊並一次發射很多子彈。 我怎樣才能解決這個問題? 我是初學者所以任何幫助都會很好 :) 我不得不擺脫一些因為堆棧溢出不開心

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SingleShotGun : Gun
{
    [SerializeField] Camera cam;

    PhotonView PV;

    public bool debounce = false;

    public float debounce2;

    public AudioSource audioSource;
    public AudioClip audioClip;

    private float timeStarted;
    private float audioTime;

    private void Start()
    {
        if (PV.IsMine)
        {
            audioSource.clip = audioClip;
            float timeStarted = (float)PhotonNetwork.Time;
            audioTime = 0;
        }
    }

    private void Update()
    {
        if (PV.IsMine)
        {
            float audioTime = (float)PhotonNetwork.Time - timeStarted;
        }
        else
        {
            audioSource.time = audioTime;
        }
    }

    void Awake()
    {
        PV = GetComponent<PhotonView>();
    }

    public override void Use()
    {
        if (debounce)
        {
            StartCoroutine(Deb());
            return;
        }
        if (PV.IsMine)
        {
            audioSource.clip = audioClip;
            float timeStarted = (float)PhotonNetwork.Time;
        }
        debounce = true;
        Shoot();
    }

    private IEnumerator Deb()
    {
        Debug.Log("Debouncing");
        yield return new WaitForSeconds(debounce2);
        debounce = false;
    }
}

我試圖為 unity3d 制作一個去抖動腳本,但它沒有用?

作為第一個注釋:在

float audioTime = (float)PhotonNetwork.Time - timeStarted;

您正在創建一個新的局部變量 => 在這種情況下未分配 class 字段audioTime

對於所有出現的情況也相同

float timeStarted = (float)PhotonNetwork.Time;

你想刪除所有三個地方的float ,以便分配你的 class 字段而不是用相同命名的局部變量覆蓋它們,否則它們將始終具有默認值0


然后在Use中,您將啟動多個並發例程,這些例程最終都會完成並在意想不到的時刻重置您的debounce 您可能寧願將其包裝起來以便僅啟動一個例程,例如

if(!debounce)
{
    debounce = true;
    Shoot();
    StartCoroutine(Deb()):
}

同樣,一般來說,我希望整個Use應該包含在/開始

if (!PV.IsMine) return;

如果這不是你的槍,看起來和聽起來這些事情都不會發生;)

並設置后

audioSource.clip = audioClip;

你還需要

audioSource.Play();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM