首页 > 解决方案 > 打开和关闭光标

问题描述

我想做的是有不同的NPC菜单,游戏从关闭光标开始。但是,当您单击 NPC 时,它会重复,因此您可以与 NPC 交谈。

using UnityEngine;
using System.Collections;

public class CursorScript : MonoBehaviour
{
    public GameObject merchant;
    public GameObject builder;
    public bool canTurnMerchantOn;
    public bool canTurnBuilderOn;


    // Use this for initialization
    void Start()
    {
        //Set Cursor to not be visible
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
       if(builder.activeSelf == true && canTurnBuilderOn)
        {
            Cursor.visible = true;
            Cursor.lockState = CursorLockMode.None;
            canTurnMerchantOn = false;
        }

        if (builder.activeSelf == false)
        {
            Cursor.visible = false;
            Cursor.lockState = CursorLockMode.Locked;
            canTurnMerchantOn = true;
        }

        if (merchant.activeSelf == true && canTurnMerchantOn)
        {
            Cursor.visible = true;
            Cursor.lockState = CursorLockMode.None;
            canTurnBuilderOn = false;
        }

        if (merchant.activeSelf == false)
        {
            Cursor.visible = false;
            Cursor.lockState = CursorLockMode.Locked;
            canTurnBuilderOn = true;
        }
    }
}

奇怪的是商人 npc 工作正常,然后建设者 npc 光标闪烁,我不能点击任何东西。

标签: c#unity3dcursor

解决方案


问题可能是builder的active self等于true,can turn builder on也是true,代码会打开光标。但这会将罐头打开商人设置为假,这将关闭光标。update 函数每帧调用一次,因此它会反复打开和关闭光标。我建议使用 else if 而不是所有的 if 语句,如果你不想这样,你可以使用 return;。这是代码:

void Update()
{
   if(builder.activeSelf == true)
    {
        Cursor.visible = true;
        Cursor.lockState = CursorLockMode.None;
        return;
    }

    else if (builder.activeSelf == false)
    {
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    if (merchant.activeSelf == true)
    {
        Cursor.visible = true;
        Cursor.lockState = CursorLockMode.None;
        return;
    }

    else if (merchant.activeSelf == false)
    {
        Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }
}

因此,您也不需要可以在代码中转换生成器/商人。如果这不起作用,您至少知道问题所在。


推荐阅读