2016-10-09 2 views
1

В моей игре на основе Android, основанной на единстве, я хочу добавить изображение динамически в зависимости от количества вопросов на каждом уровне. Изображение показано для справки. Каждый правильный ответ будет отмечен зеленым, а красный - красным. Я новичок в единстве и стараюсь найти шаги для достижения этого.Динамическое добавление изображения во время выполнения - Unity 5

Любая помощь с примером для этого требования будет большой помощью.

enter image description here

ответ

1

Я когда-то написал сценарий для динамического создания кнопок, основанные на каждом уровне. То, что я сделал, это создать первую кнопку на сцене и добавить другие кнопки, основанные на первом. Ниже оболочка моего кода:

// tutorialButton and levelButtons are public variables which can be set from Inspector 
RectTransform rect = tutorialButton.GetComponent<RectTransform>(); 

for (int i = 1; i < levelSize; i++) { 
    // Instantiate the button dynamically 
    GameObject newButton = GameObject.Instantiate (tutorialButton); 

    // Set the parent of the new button (In my case, the parent of tutorialButton) 
    newButton.transform.SetParent (levelButtons.transform); 

    //Set the scale to be the same as the tutorialButton 
    newButton.transform.localScale = tutorialButton.transform.localScale; 

    //Set the position to the right of the tutorialButton 
    Vector3 position = tutorialButton.transform.localPosition; 
    position.x += rect.rect.width*i; 
    newButton.transform.localPosition = position; 
} 

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

+0

Где прикреплять этот скрипт. в холсте или панели? – iappmaker

+0

Пока вы устанавливаете объекты tutorialButton и levelButton у инспектора, на самом деле не имеет значения, где вы прикрепляете скрипт. Он не использует никаких свойств Gameobject, к которым прикреплен скрипт. (В моем случае у меня был скрипт, который обрабатывает всю логику игры, и он был прикреплен к пустым Gameobject, и этот фрагмент кода находился в функции Start(), поэтому при загрузке каждого уровня (сцены) он вызывался один раз и созданы кнопки, необходимые для уровня). – merterpam

1

Я не уверен, если это поможет, но если у вас есть все изображения в сцене под брезентом, с этим нужно просто перетащить холст на сценарий и использовать

//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.ChangeColor(level-1,Color.green);

или вы можете сделать также

//level-1 is to keep the array notation FindObjectOfType<NameOfScript>.RevertColor(level - 1);

Это сценарий:

//Keep it private but you still see it in inspector 
//#Encapsulation :) 
[SerializeField] 
private Canvas _canvas; 

private Image[] _images; 
//keep the original colors in case you want to change back 
private Color[] _origColors; 

void Start() { 
    _images = GetComponentsInChildren<Image>(); 
    _origColors = new Color[_images.Length]; 
    for (int i = 0; i < _images.Length; i++) 
    { 
     _origColors[i] = _images[i].color; 
    } 

} 
//Reverts the color of the image back to the original 
public void RevertToOriginal(int imageIndex) 
{ 
    _images[imageIndex].color = _origColors[imageIndex]; 
} 
//Change to color to the coresponding index, starts from 0 
public void ChangeColor(int imageIndex, Color color) 
{ 
    _images[imageIndex].color = color; 
} 

P.S Если вы хотите, чтобы это было видно только в конце, вы можете создать метод, в котором вы включаете = (true или false) для холста. Таким образом, вы держите его ложным до конца уровня, и вы делаете это правдой, когда хотите показать, а после каждого ответа вы вызываете ChangeColor в зависимости от результата. Для упрощения вы можете использовать:

NameOfScript variableName = FindObjectOfType<NameOfScript>(); 

и после того, что вы просто позвоните

variableName.ChangeColor(level - 1, Color.green); 

Также не имеет значения, где вы положили сценарий. Я бы сделал своего рода менеджера (пустой GameObject) в сцене и поместил его туда.

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