В единстве я делаю программу, которая позволяет щелкнуть на кубе и выберите сферы, которые представляют собой вершину, как показано ниже:Как изменить Список <> между двумя классами в единстве?
После того, как тезисы сфера выбраны они должны быть добавлены к лист selectedSpheres
типа GameObject
.
Я создал два файла классов - Cube.cs
и Vertex.cs
. Vertex
наследует от Cube
, который наследует от MonoBehaviour
. В Cube у меня есть список участников, в котором хранятся выбранные сферы.
Я определил функцию addToSelected()
, которая добавляет ввод в список selectedSpheres
. Оператор печати внутри функции выводит значение true каждый раз. Но оператор печати в функции Update()
печатает аргумент из ошибки диапазона, как показано ниже, в то время как addToSelected()
показал, что он работал в 8 раз:
addToSelected()
функция вызывается из OnMouseDown()
функции внутри Vertex
класс. Код для обоих классов приведен ниже:
Cube.cs
public class Cube : MonoBehaviour {
bool isSelected = false;
GameObject[] Spheres;
List<GameObject> selectedSpheres = new List<GameObject>();
public void addToSelected(GameObject obj) {
selectedSpheres.Add(obj);
print(selectedSpheres.Contains(obj));
}
public void removeSelected(GameObject obj) {
selectedSpheres.Remove(obj);
}
public void clearSelected() {
selectedSpheres.Clear();
}
// Update is called once per frame
void Update() {
if(Input.GetKeyDown(KeyCode.Space)) {
print(selectedSpheres[0]);
}
}
}
Vertex.cs
public class Vertex : Cube {
void OnMouseDown() {
// this object was clicked - do something
Renderer rend = GetComponent<Renderer>();
if (rend.material.color != Color.red) {
rend.material.color = Color.red; // #d96459
addToSelected(this.gameObject);
} else {
rend.material.color = Color.white;
removeSelected(this.gameObject);
}
}
}
Это работает, спасибо. Однако мне любопытно, почему сделать его частным не работает? Если он был закрыт, то Vertex не должен наследовать 'selectedSpheres' из Cube, поэтому я думаю, что он будет работать. – ryanmattscott
Подождите, если я сделал 'selectedSpheres' приватным и сделал переопределение в функции' Update', то он _should_ work – ryanmattscott