2015-12-28 2 views
2

Привет Я использую единство и javascript, чтобы написать свой код для карточной игры. После раздачи карт я хочу изменить карту игроков на случайные карты в колоде. У меня есть все спрайты, созданные в папке с моими ресурсами. Мне было интересно, есть ли способ изменить спрайт по имени или что-то для достижения этого. Все карты называются cardDiamonds8 или cardClubs4. Я уже создал, чтобы получить это имя:Изменение спрайта во время выполнения - Unity

#pragma strict 
public var testCard : GameObject; 
private var suit; 
private var value; 
private var number : int; 



function Start() { 
    number = Random.Range(1,5); 
    if (number == 1) { 
     suit = "Clubs"; 
    } else if (number == 2) { 
     suit = "Diamonds"; 
    } else if (number == 3) { 
     suit = "Hearts"; 
    } else if (number == 4) { 
     suit = "Spades"; 
    } 
    number = Random.Range(1,14); 
    if (number == 1) { 
     value = "A"; 
    } else if (number == 11) { 
     value = "J"; 
    } else if (number == 12) { 
     value = "Q"; 
    } else if (number == 13) { 
     value = "K"; 
    } else { 
     value = number; 
    } 
    testCard.name = "card" + suit + value; 
    print(testCard.name); 
} 

Это просто печатает имя, но логика есть. Любая помощь в изменении спрайта была бы оценена.

+0

Checkout это [ответ] (http://stackoverflow.com/questions/34431178/how-to-get-change-image-source-name-with-code-in-unity/34431446 # 34431446). Это может помочь вам –

ответ

0

Один из методов, который я бы предложил, - это создать объект, который может содержать все ваши спрайты. Либо используйте инспектор для ссылки на изображения, либо используйте функцию Start(), чтобы загрузить их в объект с помощью кода. Причиной этого было бы уменьшить необходимость загрузки активов во время выполнения.

После того, как вы загрузили спрайты, вы можете изменить их во время выполнения для вашего сердца.

Посмотрите на это для загрузки с помощью кода: Resources.Load <Sprite>("YourImageName");

Что касается изменений спрайта с помощью кода: вы будете нуждаться, чтобы получить компонент на игровых объектах, которые отображаются спрайт. Если вы используете объекты gui, вам необходимо получить связанный компонент изображения и изменить ссылку на компонент изображения.


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

Было бы предложено следующее, которое должно загрузить ваши спрайты до первого выполнения цикла Update().

public var Sprites: Sprite[]; 

function Start() { 
    var imports : Object[] = Resources.LoadAll("path/" , Sprite); 
    Sprites = new Sprite[imports.Length]; 
    for(var i = 0 ; i < Sprites.Length ; i++){ 
     Sprites[i] = imports[i]; 
    } 
} 

После загрузки, вы будете иметь возможность ссылаться на ваши спрайтов путем использования Sprites[idx].

Это позволит вам ссылаться на ваши спрайтов на лету, используя некоторые из кода, который вы узнали себя:

GetComponent(SpriteRenderer).sprite = Sprites[idx]; 
+0

Прокомментировать причину понижения голосов? Любопытно, поэтому я могу сделать лучше в следующий раз. – ejsd1989

+0

Я думаю, что вы были ниспосланными людьми, которым нужно было много читать и чему-то научиться. Это не хорошо. Я проголосую;) –

+0

Я думаю, что нисходящее движение пришло, так как вы даете направление, но не указали, что нужно правильно делать вещь. Это чувство, которое я получаю при чтении. Вы можете делать то или это, но было бы более целесообразно объяснить, что это такое и что. В частности, последний абзац. Никакое преступление не означало, но это звучит как тот, кто не знал бы, но все же давал бы ему попробовать, чтобы вы могли действительно знать, как это сделать. И это был не тот, кто дал dv. – Everts

0

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

gameObject.GetComponent.<SpriteRenderer>().sprite = Resources.Load("name", typeof(Sprite)) as Sprite;; 
Смежные вопросы