[英]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.