如何在Unity c#中仅使用脚本中的游戏对象来启用部件/组件?

本文关键字:启用部 对象 游戏 组件 脚本 Unity | 更新日期: 2023-09-27 18:07:59

我使用Photon在我的游戏中放置多人游戏,以确保一个玩家不控制他们,当你在,客户端它会激活你的脚本/相机,所以你可以看到和移动。

虽然我想不出解决这个问题的方法,因为我不知道如何启用/禁用子组件或启用子组件的子组件。

我想通过脚本启用此功能https://i.stack.imgur.com/TmhV2.jpg

这https://i.stack.imgur.com/JqEAt.jpg

我的脚本是这样的:
using UnityEngine;
using System.Collections;
public class NetworkManager : MonoBehaviour {
public Camera standByCamera;
// Use this for initialization
void Start () {
Connect();
}
void Connect() {
Debug.Log("Attempting to connect to Master...");
PhotonNetwork.ConnectUsingSettings("0.0.1");
}
void OnGUI() {
GUILayout.Label(PhotonNetwork.connectionStateDetailed.ToString());
}
void OnConnectedToMaster() {
Debug.Log("Joined Master Successfully.");
Debug.Log("Attempting to connect to a random room...");
PhotonNetwork.JoinRandomRoom();
}
void OnPhotonRandomJoinFailed(){
Debug.Log("Join Failed: No Rooms.");
Debug.Log("Creating Room...");
PhotonNetwork.CreateRoom(null);
}
void OnJoinedRoom() {
Debug.Log("Joined Successfully.");
SpawnMyPlayer();
}
void SpawnMyPlayer() {
GameObject myPlayerGO = (GameObject)PhotonNetwork.Instantiate("Body", Vector3.zero, Quaternion.identity, 0);
standByCamera.enabled = false;
((MonoBehaviour)myPlayerGO.GetComponent("Movement")).enabled = true;
}
}

在monobehaviour下面的bit是我想要启用它们的地方正如你所看到的,我已经弄清楚了如何激活一些东西,这是我生成的游戏对象的一部分,我只是需要帮助我上面说的,谢谢你的帮助。

我通过预装件生成它,所以我希望它只编辑我生成的那个,而不是关卡中的其他每个,因为我想使用myPlayerGO Game对象启用这些组件,而且只有那个。

这是所有我需要得到我的游戏工作,所以请帮助。

如果这是重复的,我很抱歉,因为我不知道如何表达这个标题

如何在Unity c#中仅使用脚本中的游戏对象来启用部件/组件?

在unity中,你可以使用gameObject来启用和禁用子对象中的组件。GetComponentInChildren

ComponentYouNeed component = gameObject.GetComponentInChildren<ComponentYouNeed>();
component.enabled = false;

也可以使用gameObject。GetComponentsInChildren

两个图像链接到同一个地方,但我想我明白了。

我可能会建议你放置一些脚本,允许你在Body游戏对象中连接HeadMovement脚本。例如:

public class BodyController : MonoBehaviour
{
  public HeadMovement headMovement;
}

然后你可以把它连接到你的预制中,然后调用:

BodyController bc = myPlayerGo.GetComponent<BodyController>();
bc.headMovement.enabled = true;
另一个修复方法是使用GetComponentsInChildren():
HeadMovement hm = myPlayerGo.GetComponentsInChildren<HeadMovement>(true)[0]; //the true is important because it will find disabled components.
hm.enabled = true;

我可能会说第一个是更好的选择,因为它更明确,也更快。如果你有多个头部动作,那么你就会遇到问题。它还需要对整个预制层次结构进行爬行,以便找到在编译时已经知道位置的内容。