【问题标题】:Cloning too many of the same object when pressing an object to replace instead of the other按下要替换的对象而不是另一个对象时克隆太多相同的对象
【发布时间】:2022-06-27 23:49:42
【问题描述】:

我想用固定表替换损坏的表,但是当我按下按钮时,它会将表多次放置在背景周围。这是替换的脚本。

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);

    }
}

【问题讨论】:

    标签: c# visual-studio unity3d script


    【解决方案1】:

    当您的触摸计数大于零时,您的代码将在每一帧被调用。 因此,只要您将手指放在屏幕上,它就会调用 Replace() 方法。

    您可以将“已使用”布尔值添加到前一个 if 以避免这种情况,如下所示:

     void Update()
    
        {
    
            if (Input.touchCount > 0 && !used)
            {
                Replace(broken_Table, table);
                used = true;
            }
    
        }
    

    【讨论】:

      【解决方案2】:

      您为输入的每一帧实例化 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 个固定表。

      要解决此问题,您可以执行以下两项操作:

      1. 仅在播放器“触摸”对象的第一帧而不是每一帧都执行逻辑。最好的方法是使用GetTouch 方法并且只在TouchPhase.Began 期间执行。

      2. 不要在此代码中实例化超过 1 个“固定表”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 2011-10-15
        • 2020-12-04
        • 1970-01-01
        • 2016-12-31
        • 1970-01-01
        相关资源
        最近更新 更多