Как включить детали / компоненты в Unity C# только с игровым объектом в скрипте

Я использую Photon для создания многопользовательского режима в своей игре, чтобы один игрок не контролировал их все, когда вы появляетесь на стороне клиента, он активирует ваши скрипты / камеру, чтобы вы могли видеть и двигаться.

Хотя я не могу придумать, как обойти эту проблему, так как я не знаю, как включить / отключить детские компоненты или включить ребенка.

Я хочу включить это с помощью сценариев http://imgur.com/ZntA8Qx

и это http://imgur.com/Nd0Ktoy

Мой сценарий такой:

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 я хочу включить их. Как вы видите, я уже понял, как активировать что-то, что является частью игрового объекта, который я породил, мне просто нужна помощь с тем, что я сказал выше, Спасибо за помощь.

Я порождаю его через префаб, поэтому я хочу, чтобы он редактировал только тот, который я порождаю, а не все остальные на уровне, как я хочу включить эти компоненты, используя объект myPlayerGO Game, и только этот.

Это все, что мне нужно, чтобы моя игра работала, поэтому, пожалуйста, помогите.

Если это дубликат, я извиняюсь, потому что я не знал, как назвать это название.

2 ответа

Решение

В целом, вы можете включать и отключать компоненты в дочернем объекте, используя gameObject.GetComponentInChildren.

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

Также можете использовать gameObject.GetComponentsInChildren

Обе ссылки на изображения идут в одно и то же место, но я думаю, что понимаю.

Возможно, я бы порекомендовал вам поместить какой-нибудь скрипт, который позволит вам подключить скрипт HeadMovement к игровому объекту Body. Например:

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;

Я бы, вероятно, сказал, что первый вариант лучше, потому что он более явный, а также более быстрый. Если у вас есть несколько HeadMovement s, то вы столкнетесь с проблемами. Это также требует обход всей вашей сборной иерархии только для того, чтобы найти то, к чему вы уже знали местоположение во время компиляции.

Другие вопросы по тегам