2015-08-13 4 views
4

Я использую Photon для создания многопользовательской игры в своей игре, чтобы один игрок не контролировал их всех, когда вы появлялись, клиентская сторона активирует ваши сценарии/камеру, чтобы вы могли видеть и перемещаться.Как включить части/компоненты в Unity C# только с игровым объектом в скрипте

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

Я хочу, чтобы включить это с помощью сценариев 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, и что только один.

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

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

ответ

1

I единство вы можете включать и отключать компоненты дочернего объекта с помощью gameObject.GetComponentInChildren

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

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

+0

Спасибо, я не знаю, кто ответил первым между вами и Крисом, но я исправил ссылки imgur, чтобы вы могли увидеть вторую половину проблемы –

+0

, если игровой объект неактивен, вы не можете его активировать, получив его или если я говорю, что вы даже не можете получить эти компоненты, так что вам нужно сделать, чтобы создать общедоступную ссылку на вашу камеру в вашем скрипте HeadMovement, а затем активировать user cameraRef.setActive (true). – Nain

1

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

Возможно, я рекомендую вам разместить какой-то скрипт, который позволит подключить сценарий 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; 

я бы, вероятно, говорят, что это лучший вариант, потому что он более явный и быстрый. Если у вас несколько HeadMovements, у вас возникнут проблемы. Он также требует обхода всей иерархии prefab только для того, чтобы найти то, что вы уже знали о местоположении во время компиляции.

+0

Я стараюсь, как мы говорим, также фиксировал ссылки imgur, теперь вы можете увидеть мою другую проблему, –

+0

Я не могу сделать первый, как я уже пробовал это раньше. Но GetComponentsInChildren прошел с летающими цветами, я бы сделал это лучшим ответом, но мне пришлось исправить ссылки imgur для вас, чтобы увидеть вторую половину проблемы. –