2015-09-21 4 views
1

Я работаю над переводом проекта Unity из UnityScript на C#. Я уже перевел значительную часть проекта, но столкнулся с некоторыми проблемами:Перевод UnityScript на C#: Array & GetComponent

Первая проблема связана с GetComponent. У меня есть файл EnnemyController.cs с множеством функций для получения/установки противников. Но перед всей этой функцией мне нужно инициализировать characterController.

private CharacterController characterController; 
characterController = GetComponent<CharacterController>(); 

Вы можете ознакомиться с контекстом здесь: http://pastebin.com/U09aH4ZA. Если добавить код, указанный выше в функции Это работает, но не в классе ... Возвращается ко мне следующее сообщение об ошибке:

UnityEngine.Component.GetComponent (string) is a method but is used as a type EnemyController.characterController is a field but is used as a type

Вторая проблема связана с массивом в C#. Точнее с массивом массив, UnityScript что-то вроде этого:

var connected : Array = Array(); 
static var waypoints : Array = Array(); 
var objects : Object [] = FindObjectsOfType (AutoWayPoint); 
waypoints = Array (objects); 

Я понятия не имею, как перевести такого рода вещи, и вы можете увидеть весь файл здесь: http://perche.jeremy.free.fr/sup_scr/AutoWayPoint.js

И для отделки , Я хотел узнать разницу между IEnumerator и IEnumerable.

ответ

2

похоже на вашу первую ошибку, потому что вы вызываете GetComponent<CharacterController>() вне любого метода, попробуйте сделать это на вашем методе Start(). Вы можете перевести ваши массивы js в простой массив C# (например, int []arrayOfInts = new int[20];) или использовать что-то вроде ArrayList, если вы не уверены в количестве элементов, которые будет иметь массив. Теперь вам нужно определить, какие элементы будут использоваться.


И последний вопрос уже здесь ответил: What is the difference between IEnumerator and IEnumerable?

+0

Да GetComponent () вызывается вне какого-либо метода, потому что я хочу, чтобы получить доступ к этому элементу в любом месте в классе. Итак, если я назову это в Start(), я могу получить доступ к этому элементу в любом месте? Для массива вопрос был больше связан с массивом array = multimimensional array? – PokeRwOw

+0

Если вы хотите получить доступ в любом месте, элемент должен быть объявлен вне вашего метода, но если вы также хотите получить доступ к элементу в любое время, вы должны получить ссылку, прежде чем что-либо сделать, здесь у вас есть 2 варианта; 1. Объявить элемент как открытый в коде и перетащить элемент из иерархии в ваш скрипт в инспекторе (т. Е. Https://www.youtube.com/watch?v=TnJhhz120js) или 2.- получить ссылку по коду внутри метода, в этом случае вы можете сделать это внутри Start или Awake с помощью GetComponent. /// Синтаксис для многомерного массива на C#: https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx – mayo

+0

Спасибо за ответы, парень, это мне очень помогло! :) – PokeRwOw