unity3d 为什么增量功能不起作用?

jvidinwx  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(182)

我只想使一个操作可以使用两次。例如:
我在键盘上按5,Object1被示例化,但同时计数器增加1。在这之后,我再次按5,Object1再次被示例化,计数器再次增加1。所以,这一次,如果我尝试第三次按5,什么也没有发生。
应该很简单吧?我也是这么想的,我仍然认为应该这么简单,但是,每次我按5,Object1被示例化,计数器不增加。更具体地说,计数器增加了一段时间,在那一瞬间之后,它重置为0。

public class Placement : MonoBehaviour
{
    public GameObject Object1;
    private int count = 0;

    void Start()
    {

    }

    void Update()
    {
        Debug.Log(count);
        if ((Input.GetKeyDown(KeyCode.Alpha5)) && count < 2)
        {
            count = count + 1;
            Instantiate(Object1, transform.position, transform.rotation);
            this.enabled = false;
        }
    }
}

我简化了代码,只是为了开门见山。通过控制台(调试)我看到计数在每个周期自动重置为0 ...

gajydyqb

gajydyqb1#

根据您的代码逻辑,您将在按5后禁用对象。您可能希望在按2后禁用它。

if ((Input.GetKeyDown(KeyCode.Alpha5)) && count < 2)
{
    count = count + 1;
    Instantiate(Object1, transform.position, transform.rotation);
    if(count >= 2) {
        this.enabled = false;
    }
}

你的计数器没有增加的原因是:您记录count,但按5后禁用它,因此Update()中不会再发生日志。
提示:您可以将count设置为公共的,或者使用[Serializable],或者使用调试检查器视图来查看count的实际值,而不是依赖Debug.Log。

edit:如果Object 1附加了Placement脚本,您将创建越来越多的脚本(每个脚本都有一个count变量)。

最好有一个示例化其他对象的管理器对象,但是你也可以删除/禁用示例化对象上的脚本,如下所示:

if ((Input.GetKeyDown(KeyCode.Alpha5)) && count < 2)
{
    count = count + 1;
    GameObject newObj = Instantiate(Object1, transform.position, transform.rotation);

    newObj.getComponent<Placement>().enabled = false; // this disables the script

    // (optional) Destroy(newObj.getComponent<Placement>()); // this removes the script
    

    if(count >= 2) {
        this.enabled = false;
    }
}

相关问题