
我想用固定表替換損壞的表,但是當我按下按鈕時,它會將表多次放置在背景周圍。這是替換的腳本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ReplaceObjects : MonoBehaviour
{
public GameObject Broken_Table;
public GameObject Table;
private bool used = false;
void Start()
{
}
void Update()
{
if (Input.touchCount > 0)
{
GameObject broken_Table = Instantiate(Broken_Table) as GameObject;
GameObject table = Instantiate(Table) as GameObject;
Replace(broken_Table, table);
used = true;
}
}
void Replace(GameObject obj1, GameObject obj2)
{
Instantiate(obj2, obj1.transform.position, obj1.transform.rotation);
Destroy(obj1);
}
}
uj5u.com熱心網友回復:
您正在為輸入的每一幀實體化 3 個物件。
GameObject broken_Table = Instantiate(Broken_Table) as GameObject;
GameObject table = Instantiate(Table) as GameObject;
和
Instantiate(obj2, obj1.transform.position, obj1.transform.rotation);
上述所有陳述句都將物件克隆到您的場景中。然后,您在創建 broken_Table 后立即將其銷毀,這意味著您為按住手指的每一幀創建 2 個固定表。
要解決此問題,您可以執行以下兩項操作:
僅在您的播放器“觸摸”物件的第一幀上執行邏輯,而不是每一幀。最好的方法是使用GetTouch方法,并且只在 TouchPhase.Began 期間執行。
不要在此代碼中實體化超過 1 個“固定表”。
uj5u.com熱心網友回復:
當您的觸摸計數大于零時,您的代碼將在每一幀被呼叫。因此,只要您將手指放在螢屏上,它就會呼叫 Replace() 方法。
如果避免這種情況,您可以將“使用”布林值添加到前一個,如下所示:
void Update()
{
if (Input.touchCount > 0 && !used)
{
Replace(broken_Table, table);
used = true;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/496190.html
上一篇:AttributeError:部分初始化的模塊“cv2”沒有屬性“gapi_wip_gst_GStreamerPipeline”(很可能是由于回圈匯入)
