如何在脚本中仅使用游戏 object 在 Unity C# 中启用 Parts/Components
How do I enable Parts/Components in Unity C# with only a game object in the script
我正在使用 Photon 在我的游戏中制作多人游戏,以确保一个玩家不会控制所有玩家,当你重生时,客户端将激活你的 scripts/camera 这样你就可以看到和移动。
尽管我想不出解决这个问题的方法,因为我不知道如何 enable/disable children 的组件或启用 child 的 child.
我想通过脚本启用它
http://imgur.com/ZntA8Qx
我的脚本是这样的:
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;
}
}
带有 monobehaivour 的底部底部的位是我想要启用它们的地方
如您所见,我已经弄清楚如何激活游戏中的某些内容 object 我生成了,我只需要我上面所说的帮助,谢谢您的帮助。
我通过预制件生成它,所以我希望它只编辑我生成的那个,而不是关卡中的所有其他组件,因为我想使用 myPlayerGO 游戏启用这些组件 object,而且只有那个。
这就是让我的游戏运行所需的全部内容,所以请帮忙。
如果这是重复的,我很抱歉,因为我不确定如何表达这个标题。
我统一您可以使用 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;
我可能会说第一个是更好的选择,因为它更明确也更快。如果您有多个 HeadMovements 那么您将 运行 遇到问题。它还需要爬取整个预制件层次结构,以便找到您在编译时已经知道位置的东西。
我正在使用 Photon 在我的游戏中制作多人游戏,以确保一个玩家不会控制所有玩家,当你重生时,客户端将激活你的 scripts/camera 这样你就可以看到和移动。
尽管我想不出解决这个问题的方法,因为我不知道如何 enable/disable children 的组件或启用 child 的 child.
我想通过脚本启用它 http://imgur.com/ZntA8Qx
我的脚本是这样的:
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;
}
}
带有 monobehaivour 的底部底部的位是我想要启用它们的地方 如您所见,我已经弄清楚如何激活游戏中的某些内容 object 我生成了,我只需要我上面所说的帮助,谢谢您的帮助。
我通过预制件生成它,所以我希望它只编辑我生成的那个,而不是关卡中的所有其他组件,因为我想使用 myPlayerGO 游戏启用这些组件 object,而且只有那个。
这就是让我的游戏运行所需的全部内容,所以请帮忙。
如果这是重复的,我很抱歉,因为我不确定如何表达这个标题。
我统一您可以使用 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;
我可能会说第一个是更好的选择,因为它更明确也更快。如果您有多个 HeadMovements 那么您将 运行 遇到问题。它还需要爬取整个预制件层次结构,以便找到您在编译时已经知道位置的东西。