2014-11-03 4 views
2

Пожалуйста, помогите!
У меня есть компонент Javascript, который ссылается на 2 игровых объекта. Проблема в том, что игровые объекты не существуют при запуске и только создаются, когда игрок присоединяется к сетевой комнате. Сценарий сетевого менеджера находится в C#.
Мне нужно обновить JS-скрипт из скрипта C# при создании экземпляра проигрывателя.
код у меня до сих пор ...Как изменить JS GameObject с помощью C#?

  SpawnSpot mySpawnSpot = spawnSpots [Random.Range (0, spawnSpots.Length)]; 
      GameObject myPlayerGO = (GameObject)PhotonNetwork.Instantiate ("PlayerSHIP", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0); 
      standbyCamera.SetActive (false); 

      ((MonoBehaviour)myPlayerGO.GetComponent ("PlayerControl")).enabled = true; 
      ((MonoBehaviour)myPlayerGO.GetComponent ("PlayerShooting")).enabled = true; 
      myPlayerGO.transform.FindChild ("CameraCP").gameObject.SetActive (true); 
      myPlayerGO.transform.FindChild ("LocalShip").gameObject.SetActive (true); 
      myPlayerGO.transform.FindChild ("RemoteShip").gameObject.SetActive (false); 
      GameObject test = GameObject.Find ("RadarMgr"); 
      Component test2 = test.GetComponent("3DRadar"); 
      test2.Transforms[0] = "LocalShip"; 
      //test.GetComponent("Radar_Mgr").Transforms[0] = "LocalShip"; 

Это сеть C# сценарий. Сценарий JS, к которому я хочу получить доступ, является компонентом «3DRadar», который является частью игрового объекта «RadarMgr». «Transforms [0]» является частью сценария JS, который содержит требуемый игровой объект, а «LocalShip» - это игровой объект, который я пытаюсь рассказать сценарию JS. Последние 2 строки - мои неудачные попытки присвоить LocalShip сценарию JS. У меня был другой синтаксис вместо этих двух строк, но ничего не сработало, и именно так оно и осталось.
Другим необходимым объектом был бы объект «CameraCP», но, очевидно, если бы я мог разобраться, как сделать 1, другой будет выполнен таким же образом.
Я искал последние 3 дня здесь, ответы на единицу и общий Google, но если ответ там где-то, я не могу его найти или понять.
Надеюсь, кто-то может пролить свет на это расстраивающее препятствие!
Спасибо!

+0

Какую ошибку вы получаете? Это поможет отследить, что вы делаете неправильно. Он нашел GameObject и т. Д.? Также попробуйте Component test2 = test.GetComponent («3DRadar») как компонент («3DRader»); – marsh

+0

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

+0

. Основная ошибка связана с «Transforms [0]», и я получаю «UnityEngine.Component», который не содержит определение Transforms ". «Transforms [0]» - это то, что я хочу назначить игровому объекту. Сценарий JS имеет это ... "Преобразовывает [0] = GameObject.Find (" _ Player "). Transform;" но это своего рода заполнитель. – MajorParts

ответ

1

Это синтаксис я был после ....

GameObject temp = GameObject.Find ("player(Clone)/LocalSHIP"); 
 
GameObject.Find("gameMgr").GetComponent<radarScript>().Transforms[0] = temp.transform;

1

Вы объявляете его как компонент, а не тип 3DRadar. Вы должны быть более конкретными.

3DRadar test2 = test.GetComponent("3DRadar") as 3DRadar; 

Я не помню точный синтаксис, но я верю, что это так.

или

3DRadar test2 = test3D.GetComponent<3DRadar>(); 
+0

Я не понимаю этого ответа. Если я использую ваш пример синтаксиса, я получаю «неожиданный символ« Радар ». Насколько я знаю, я уже получаю игровой объект и компонент, но не могу назначить свой игровой объект Transforms [0]. Я могу ввести вас в заблуждение с утверждением, что «последние 2 строки не удались» ... Я включил строку, которая закомментирована как 1 из 2. Я уверен, что мне нужно знать только правильный синтаксис для назначения «LocalShip», игровой объект «Transforms [0]» – MajorParts

+0

@MajorParts: Вероятно, у вас есть сценарии UnityScript и C# в той же [группе компиляции] (http://docs.unity3d.com/Manual/ScriptCompileOrderFolders.html). Это не сработает, так как C# не знает типы, определенные в вашем файле UnityScript, пока он не будет скомпилирован. Вы назвали свой компонент «3DRadar»?На самом деле это незаконное имя класса, так как classnames не должны начинаться с числа. Попробуйте разместить файл UnityScript (JS) в первой группе компиляции («/ Standard Assets /», «/ Pro Standard Assets /» или «/ Plugins /») – Bunny83

+0

Нет, на самом деле это не называется «3DRadar». .. это называется гораздо более странным именем, поэтому я сократил его здесь для ясности. Мне уже сказали, где разместить определенные папки и файлы этого актива, если я использую C#, но я не могу скомпилировать сцену из-за неправильного синтаксиса с участием «Transforms [0]» – MajorParts

Смежные вопросы