Unity3d 显示/隐藏Unity 3D元素

Unity3d 显示/隐藏Unity 3D元素,unity3d,unityscript,Unity3d,Unityscript,我希望我张贴在正确的部分。我知道可以在Unity中编写自定义代码,因此我有以下问题: 想象一个统一的房屋模型。是否可能有一个代码来帮助隐藏/取消隐藏某些对象?例如,字母“W”将隐藏/取消隐藏所有窗口,字母“C”将隐藏/取消隐藏所有列等 如果有可能为此开发一个代码,那么工作流程是什么?统一如何知道什么是窗户,什么是门 更进一步。。是否可能有一个代码来取消隐藏项目的下一步。例如,第一步是建立基础。有没有可能有一个代码可以通过键盘键的咔嗒声来取消隐藏下一步,比如说,一楼元素?然后用同一把钥匙打开下一步

我希望我张贴在正确的部分。我知道可以在Unity中编写自定义代码,因此我有以下问题:

  • 想象一个统一的房屋模型。是否可能有一个代码来帮助隐藏/取消隐藏某些对象?例如,字母“W”将隐藏/取消隐藏所有窗口,字母“C”将隐藏/取消隐藏所有列等
  • 如果有可能为此开发一个代码,那么工作流程是什么?统一如何知道什么是窗户,什么是门
  • 更进一步。。是否可能有一个代码来取消隐藏项目的下一步。例如,第一步是建立基础。有没有可能有一个代码可以通过键盘键的咔嗒声来取消隐藏下一步,比如说,一楼元素?然后用同一把钥匙打开下一步,可能是一楼的墙壁。有没有可能用另一把钥匙倒回去
  • 如果这样的代码是可能的,您认为工作流程是什么?Unity如何知道哪个元素在哪个步骤中

  • 是的,只是有一个类,其中有一个要显示/隐藏的对象数组和另一个属性,用于指定按钮将执行的操作。然后有一个方法可以隐藏/取消隐藏该类中的每个对象。在行为的更新方法中,只需检查输入并根据按下的按钮调用类的方法。


    是否可能有一个代码帮助隐藏/取消隐藏? 是的,您可以通过调用GameObject.SetActive()函数来实现


    统一如何知道什么是窗户,什么是门? 你可以给窗户/门一个名字,然后按名字访问游戏对象

    var door = GameObject.Find("MyDoor") as GameObject;
    

    有没有可能有一个代码可以显示下一步,比如说,一楼的元素,用键盘键的咔嗒声? 是的,您可以使用下面的代码段来实现这一点:

    int step = 1;
    void Update() {
        if (Input.GetKeyDown("space")){
            print("space key was pressed");
            step++;
        }
    
        if(step == 1) {
        // do sth
        }
        else if(step == 2) {
        // do sth
        }               
    }
    


    根据上面的片段,可以很容易地推断出您的最后一个答案。

    我看到两种方法可以满足您的要求

    第一路

    GameObject[] walls;
    walls = GameObject.FindGameObjectsWithTag("Wall");
    
    foreach (GameObject wall in walls) 
    {
        wall.setActive(true);
    }
    
    除了代码之外,您需要做的是为这些对象指定一个正确的标记(如“墙”、“窗”、“您需要的任何东西”)。因此,您可以通过为所有对象指定某种顺序(使用标记)来轻松找到它们

    最佳实践提示

    您可能希望创建一个静态类“Tags”,并在该类中设置公共常量字符串,其中包含所有标记名

    public static class Tags
    {
        public static const WINDOW_TAG = "Window";
        // ... more tags
    }
    
    第二条道路

    如果要设置的只是“可见性”,则可能只需要修改摄影机标记渲染。它甚至不需要任何循环。当您想要查看窗口时,您只需告诉您的相机渲染标记“窗口”

    //使用OR操作打开遮罩上的Windows层
    私人电视节目()
    {
    camera.cullingMask |=1
    
    public static class Tags
    {
        public static const WINDOW_TAG = "Window";
        // ... more tags
    }
    
    // Turns on Windows Layer on mask using an OR operation
    private void Show() 
    {
        camera.cullingMask |= 1 << LayerMask.NameToLayer("Window");
    }
    
    // Turn off the bit using an AND operation with the complement of the shifted int:
    private void Hide() 
    {
        camera.cullingMask &= ~(1 << LayerMask.NameToLayer("Window"));
    }