Unity3d 显示/隐藏Unity 3D元素
我希望我张贴在正确的部分。我知道可以在Unity中编写自定义代码,因此我有以下问题:Unity3d 显示/隐藏Unity 3D元素,unity3d,unityscript,Unity3d,Unityscript,我希望我张贴在正确的部分。我知道可以在Unity中编写自定义代码,因此我有以下问题: 想象一个统一的房屋模型。是否可能有一个代码来帮助隐藏/取消隐藏某些对象?例如,字母“W”将隐藏/取消隐藏所有窗口,字母“C”将隐藏/取消隐藏所有列等 如果有可能为此开发一个代码,那么工作流程是什么?统一如何知道什么是窗户,什么是门 更进一步。。是否可能有一个代码来取消隐藏项目的下一步。例如,第一步是建立基础。有没有可能有一个代码可以通过键盘键的咔嗒声来取消隐藏下一步,比如说,一楼元素?然后用同一把钥匙打开下一步
是的,只是有一个类,其中有一个要显示/隐藏的对象数组和另一个属性,用于指定按钮将执行的操作。然后有一个方法可以隐藏/取消隐藏该类中的每个对象。在行为的更新方法中,只需检查输入并根据按下的按钮调用类的方法。
是否可能有一个代码帮助隐藏/取消隐藏? 是的,您可以通过调用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"));
}