我希望我在正确的部分发帖。我知道可以在Unity中编写自定义代码,因此我有以下问题:
答案 0 :(得分:0)
是的,只需要一个包含要显示/隐藏的对象数组的类,以及用于执行该操作的按钮的另一个属性。然后只需要一个隐藏/取消隐藏该类中每个对象的方法。在行为的更新方法中,只需检查输入并根据按下的按钮调用类的方法。
答案 1 :(得分:0)
是的,你可以通过调用GameObject.SetActive()函数
来做到这一点door.SetActive(true); // door is a game object;
您可以为窗口/门指定名称,然后按名称访问游戏对象
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
}
}
鉴于上述代码段,您可以轻松推断出您的最后答案。
答案 2 :(得分:0)
我看到了两种做法的方法。
第一路
GameObject[] walls;
walls = GameObject.FindGameObjectsWithTag("Wall");
foreach (GameObject wall in walls)
{
wall.setActive(true);
}
除了代码之外,您还必须为这些对象分配正确的标记(例如“Wall”“Window”“WatheverYouWillNeed”)。因此,您可以通过给它们某种顺序(带标签)轻松找到所有对象。
最佳做法提示
您可能想要创建一个静态类“Tags”,并在类中设置所有标记名称的公共常量字符串。
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"));
}
第二个选项可能看起来很奇怪,但请记住,cullingMask由位组成,每个位都是由标签定义的层。 “Everything”剔除面具是111111.例如,如果你只想看到Window,而窗口是最后一个元素,你的剔除面具看起来就像0000001
希望它有所帮助! :)