Как мне получить доступ к другим элементам в моем предопределенном структурированном объекте в C # / Unity? - PullRequest
0 голосов
/ 24 января 2019

Я сделал предопределенный объект под названием FOOD. Внутри находится GameObject, который указывает на PreFab GameObject. Этот GameObject также прикреплен к сценарию столкновения. У меня вопрос, как мне получить доступ к другим элементам моей структуры, таким как здоровье, калории и т. Д., Внутри моего сценария столкновения?

public class FOODS: ScriptableObject
{
public GameObject preFabFood; 
//points to a prefab object that is attached to a collision script

int health;
int calories;
float height;
float width;
}

//this is the script that is attached to the GameObject preFabFood
void OnCollisionEnter2D(Collision2D c)
{
    //how do I access elements such as height, weight, etc?
}

Ответы [ 2 ]

0 голосов
/ 24 января 2019

У вас две проблемы.

1) Свойства private, что означает, что они не видны другим классам. Видимость по умолчанию для полей является личной .

2) Свойства отсутствуют в сценарии, прикрепленном к вашему префабу.

Исправление # 2 (как предполагает Soraphis) - это своего рода , что нужно сделать, однако вы захотите удалить поле public GameObject preFabFood; из вашего FOODS класса, если вы присоединяете FOODS класс для готового экземпляра (так как вам не нужно переносить копию экземпляра объекта с экземпляром). Просто помните об этом, когда вы корректируете свой код (код, который вы разместили, выглядит как один скрипт, но я подозреваю, что он должен быть больше одного, а на самом деле должен быть как минимум 2).

Что касается исправления # 1, вы должны сделать их общедоступными или получить к ним доступ из того же сценария. Если вы напрямую присоединяете свой класс FOODS к своему созданному префабу и что класс FOODS содержит метод OnCollisionEnter2D, то все в порядке.

Но, как я подозреваю, у вас есть два классов, которые вы здесь показываете, вам нужно сделать это:

public int health;
public int calories;
public float height;
public float width;

А затем используйте GetComponent() вызов, чтобы получить один скрипт от другого. например, * * одна тысяча тридцать две

FOODS foods = this.gameObject.GetComponent<FOODS>(); //gets the FOODS script attached to this game object.
//Functionally identical to GetComponent<FOODS>();
int hp = foods.health; //etc

Обратите внимание, что вы должны вызывать GetComponent как можно меньше, потому что он имеет ненулевые накладные расходы, поэтому кэшируйте результат как можно скорее (например, вы можете сделать это в Start() вместо каждого раза вверху) OnCollisionEnter2D), но это скорее общий флаг "быть осторожным", так как чрезмерное использование может вызвать проблемы с частотой кадров.

0 голосов
/ 24 января 2019

Мой вопрос: как я могу получить доступ к другим элементам моей структуры, таким как здоровье, калории и т. Д., В моем сценарии столкновения?

вы не можете.но вы можете решить это так:

в вашем CollisionScript, замените GameObject PrefabFood на свой объект сценариев FOODS food

, тогда в этом классе вы сможете получить доступ к таким вещам, как:

food.preFabFood // is the prefab
food.health // is the health variable

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...