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