如何从一个单独的脚本中调用一个函数,并且该脚本在多个游戏对象上激活



我有这个地牢生成,我正试图调用一个函数在地牢外部生成房间,这样玩家就不会一无所获。我只需要能够从主副本生成中激活这个Raycast检查,并在所有创建的游戏对象(不同的房间类型(上激活它。

这是我在地下城的主要代码:

using UnityEngine;
public class Dungeon : MonoBehaviour
{
public int dungeonRoomsCount = 0;
public int MaxDungeonRoomCount = 0;
int roomiD = 0;
Vector2 RoomPos = new Vector2(0, 0);
public GameObject Room1_4x4;
public GameObject Room2_3x3Up;
public GameObject Room0_4x4;
public DungeonRaycastCheck RayCheck;
int roomDirection;
// Start is called before the first frame update
void Start()
{
startTile();
for (; dungeonRoomsCount < MaxDungeonRoomCount ; dungeonRoomsCount++ )
{
roomDirection = Random.Range(0, 4);
if (roomDirection == 0)
{
dungeonUp();
}
else if (roomDirection == 1)
{
dungeonDown();
}
else if (roomDirection == 2)
{
dungeonLeft();
}
else if (roomDirection == 3)
{
dungeonRight();
}
}
print("done Generation");

}
// Update is called once per frame
void Update()
{
}
void startTile()
{
dungeonRoomsCount = dungeonRoomsCount + 1;
Instantiate(Room0_4x4, new Vector2(RoomPos.x, RoomPos.y), Quaternion.identity);
}
public void dungeonUp()
{
roomiD = Random.Range(0, 2);
print("Room-Up");
if (roomiD == 0)
{
Instantiate(Room1_4x4, new Vector2(RoomPos.x, (RoomPos.y = RoomPos.y + 10)), Quaternion.identity);

}

else if (roomiD == 1)
{
Instantiate(Room2_3x3Up, new Vector2(RoomPos.x, (RoomPos.y = RoomPos.y + 10)), Quaternion.identity);

}
}
public void dungeonDown()
{
roomiD = Random.Range(0, 2);
print("Room-Down");
if (roomiD == 0)
{
Instantiate(Room1_4x4, new Vector2(RoomPos.x, (RoomPos.y = RoomPos.y - 10)), Quaternion.identity);

}

else if (roomiD == 1)
{
Instantiate(Room1_4x4, new Vector2(RoomPos.x, (RoomPos.y = RoomPos.y - 10)), Quaternion.identity);

}
}
public void dungeonLeft()
{
roomiD = Random.Range(0, 2);
print("Room-Left");
if (roomiD == 0)
{
Instantiate(Room1_4x4, new Vector2((RoomPos.x = RoomPos.x + 10), RoomPos.y), Quaternion.identity);

}

else if (roomiD == 1)
{
Instantiate(Room1_4x4, new Vector2((RoomPos.x = RoomPos.x + 10), RoomPos.y), Quaternion.identity);

}
}
public void dungeonRight()
{
roomiD = Random.Range(0, 2);
print("Room-Right");
if (roomiD == 0)
{
Instantiate(Room1_4x4, new Vector2((RoomPos.x = RoomPos.x - 10), RoomPos.y), Quaternion.identity);

}

else if (roomiD == 1)
{
Instantiate(Room1_4x4, new Vector2((RoomPos.x = RoomPos.x - 10), RoomPos.y), Quaternion.identity);

}
}
}

基本上,我只想在所有游戏对象上从我的地牢光线检查脚本中激活光线检查功能,但我不确定如何激活?

帮助将被挪用,以及我可以改进我的代码的方法!

如果方法所在的脚本有一个静态实例,您可以执行RAYCAST_script.instance.RaycastCheck((;

我将光线投射类称为RayCastScript

要将其添加到RayCastScript类并添加变量公共静态RayCastScript实例;

然后把它放在启动方法中:

void Start(({

instance=this;

}

那么,只要你想使用该函数,你就可以运行RayCastScript.instance.RaycastCheck((;

最新更新