Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2021, 10:31   #1
suzume
Пользователь
 
Регистрация: 04.03.2021
Сообщений: 14
Радость Тема: Смена Спрайта на Анимацию ))):)

Всем доброго времени суток дорогие программисты !!!
есть такой вот вопросик
столкнулся с вот такой проблемкой а решать не знаю как ???
если сумеете подсказать или помочь буду очень рад!!!



есть игра 2д и две сцены одна (1) меню другая (2) вторая игровая
и вот у меня есть 3 персонажа в меню сцене (1) которые нужно что бы при выборе персанажа загружалась
сцена (2)игровая
окей я это сделал и сделал персонажей что бы они загружались все успешно
но решил пойти дальше и за анимировал персонажей и отделил их по кусочкам и собрал анимацию так сказать
и тут возникает проблема как теперь место спрайтов загрузить в сцену анимацию в одной
папке (папку сделал прифабом а что дальше хз)

Код:
void Start()  // (2) игровой 
 {
	int shipNum = PlayerPrefs.GetInt("ship"); //  сохраняем значения выбранного корабля 
        GetComponent<SpriteRenderer>().sprite = ships[shipNum];//  мы говорим что хотим обратиться к номерам спрайта кораблей  0 1 2 и т.д. 
  }
За ранее спасибо )))

Последний раз редактировалось suzume; 08.03.2021 в 13:34.
suzume вне форума Ответить с цитированием
Старый 08.03.2021, 15:37   #2
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Судя по всему тебе с начала нужно создать экземпляр префаба

Код:
public GameObject gamePrefab;
private GameObject go_1;
Vector3 objectPosition = Vector3.zero;
Animator anim;
Animation anim;

go_1 = (GameObject)Instantiate(gamePrefab, objectPosition, Quaternion.identity);
Обратится к компоненту Animator или Animation
Так:
Код:
anim = go_1.GetComponent<Animator>();
или так:
Код:
anim = go_1.GetComponent<Animation>();
Потом проигрываешь анимацию:
Код:
go_1.GetComponent<Animator>().enable = true;
Потом останавливаешь анимацию:
Код:
go_1.GetComponent<Animator>().enabled = false;
ichi вне форума Ответить с цитированием
Старый 08.03.2021, 16:09   #3
suzume
Пользователь
 
Регистрация: 04.03.2021
Сообщений: 14
По умолчанию

ichi, спасибо большое я попробую )))
suzume вне форума Ответить с цитированием
Старый 09.03.2021, 14:47   #4
suzume
Пользователь
 
Регистрация: 04.03.2021
Сообщений: 14
По умолчанию

Супер это точно то что надо ,спасибо ))) но возникли маленькие вопросики в какой метод лучше всего записывать каждый строку кода и какая анимация должна быть в таком коде в аниматоре и как можно сделать массивную переменную в таком коде )))
suzume вне форума Ответить с цитированием
Старый 12.03.2021, 01:42   #5
suzume
Пользователь
 
Регистрация: 04.03.2021
Сообщений: 14
По умолчанию

Супер это точно то что надо ,спасибо ))) но возникли маленькие вопросики в какой метод лучше всего записывать каждый строку кода и какая анимация должна быть в таком коде в аниматоре и как можно сделать массивную переменную в таком коде )))
Цитата:
Сообщение от ichi Посмотреть сообщение
Судя по всему тебе с начала нужно создать экземпляр префаба

Код:
public GameObject gamePrefab;
private GameObject go_1;
Vector3 objectPosition = Vector3.zero;
Animator anim;
Animation anim;

go_1 = (GameObject)Instantiate(gamePrefab, objectPosition, Quaternion.identity);
Обратится к компоненту Animator или Animation
Так:
Код:
anim = go_1.GetComponent<Animator>();
или так:
Код:
anim = go_1.GetComponent<Animation>();
Потом проигрываешь анимацию:
Код:
go_1.GetComponent<Animator>().enable = true;
Потом останавливаешь анимацию:
Код:
go_1.GetComponent<Animator>().enabled = false;
Пожалуйста не могли бы вы мне чуточку подсказать как сделать массив правильно --- я попробовал ваш вариант у меня почему то не присоединяется к моему персонажу префаб просто висит воздухе в нулевой точке И я попробовал еще один вариант смена перса
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    public GameObject char1, char2, char3;
    int charOn = 1; //для переключения персонажей   

    void Start()
    {
        char1.gameObject.SetActive(true);
        char2.gameObject.SetActive(false);
        char3.gameObject.SetActive(false);
    }





    public void SwitcCharacter()
    {
        switch (charOn)
        {
            case 1:
                charOn = 2;
                char1.gameObject.SetActive(false);
                char2.gameObject.SetActive(true);
                char3.gameObject.SetActive(false);
                break;

            case 2:
                charOn = 3;
                char1.gameObject.SetActive(false);
                char2.gameObject.SetActive(false);
                char3.gameObject.SetActive(true);
                break;
            case 3:
                charOn = 1;
                char1.gameObject.SetActive(true);
                char2.gameObject.SetActive(false);
                char3.gameObject.SetActive(false);
                break;

        }
    }






}
примерно так я представляю но не могу понять как привязать персонажей именно в меню а не в игре переключать??? может не массив а что то другое ???
Код:
void Start()  // (2) игровой 
 {
	int shipNum = PlayerPrefs.GetInt("ship"); //  сохраняем значения выбранного корабля 
        GetComponent<SpriteRenderer>().sprite = ships[shipNum];//  мы говорим что хотим обратиться к номерам спрайта кораблей  0 1 2 и т.д. 
  }
думаю примерно тут что то нужно менять может что бы все сработало???

Последний раз редактировалось suzume; 12.03.2021 в 01:49.
suzume вне форума Ответить с цитированием
Старый 12.03.2021, 03:48   #6
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 138
По умолчанию

Сложно сказать как сделать чтобы у тебя код заработал как надо. Согласно этой статьи надо писать как-то так:
Код:
public SpriteRenderer spriteRenderer;
public Sprite[] spriteArray;
public int currentSprite;

void Start()
{
        spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
}

void ChangeSprite(int currentSprite)
{
    spriteRenderer.sprite = spriteArray[currentSprite];
    currentSprite++;

    if(currentSprite >= spriteArray.Length)
    {
        currentSprite = 0;
    }
}

void Update()
{
        if(Input.GetMouseButtonDown(0))
        {
            ChangeSprite(currentSprite);
        }
    }
ichi вне форума Ответить с цитированием
Старый 16.03.2021, 07:21   #7
suzume
Пользователь
 
Регистрация: 04.03.2021
Сообщений: 14
По умолчанию

Цитата:
Сообщение от ichi Посмотреть сообщение
Сложно сказать как сделать чтобы у тебя код заработал как надо. Согласно этой статьи надо писать как-то так:
Код:
public SpriteRenderer spriteRenderer;
public Sprite[] spriteArray;
public int currentSprite;

void Start()
{
        spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
}

void ChangeSprite(int currentSprite)
{
    spriteRenderer.sprite = spriteArray[currentSprite];
    currentSprite++;

    if(currentSprite >= spriteArray.Length)
    {
        currentSprite = 0;
    }
}

void Update()
{
        if(Input.GetMouseButtonDown(0))
        {
            ChangeSprite(currentSprite);
        }
    }
Вы описали точь в точь что у меня сейчас есть
у меня спрайты заменяться при выборе персонажа в 1 сцене и переходят в игровую сцена 2
а я хотел бы тоже самое только что только что бы места спрайтов заменялись прифабы анимированные а как это сделать не как не вот код с первой сцены для персонажей которые должны сменяться


сцена меню (1)
Код:
 public void ChangeShip(int num)  //  будет отвечать за смену корабля (пример  когда нажимаем на 1 то выбираем 1  корабль когда на 2 то 2  и т.д.)
    {
        switch (num)  // ( будем указывать что мы хотим )
        {
            case 1:
                Selector.transform.position = ships[0].transform.position;  //(перемещаем корабль ) говорим селектору что мы хотим переместить выделения на другой корабль на корабль 1
                ships[0].color = shipColors[0]; //// говорим то что выделенный корабль прозрачный а все остальные нет 
                ships[1].color = shipColors[1]; // // говорим то что выделенный корабль прозрачный а все остальные нет 
                ships[2].color = shipColors[1]; // // говорим то что выделенный корабль прозрачный а все остальные нет 
                                                //  ships[3].color = shipColors[1]; // говорим то что выделенный корабль прозрачный а все остальные нет
                shipNum = 0; //   объявляем какой корабль номер корабля этот элемент будет обозначать какой корабль выбран на данный момент 
                PlayBtnT.text = PlayButtonTexts[0];  // за текст 
                PlayBtnT.color = playBtnColors[0]; //  отвечает за цвет 
                priceInCoins.SetActive(false);  //  если у нас корабль накупленный(но его ненужно покупать)
                priceInDollars.SetActive(false);  // делаем значок доллара  что бы появлялся 
                Selector.GetComponent<Image>().color = selectrColors[0]; //  в случи если селектор закрыт то ставим 1 что бы открыть  обращаема к имаге что бы работал селектор подсветка кораблей обводка
                break;

            case 2:
                Selector.transform.position = ships[1].transform.position;  //(перемещаем корабль ) говорим селектору что мы хотим переместить выделения на другой корабль на корабль 1
                ships[0].color = shipColors[1]; // говорим то что выделенный корабль прозрачный а все остальные нет     
                ships[1].color = shipColors[0]; // говорим то что выделенный корабль прозрачный а все остальные нет 
                ships[2].color = shipColors[1]; // говорим то что выделенный корабль прозрачный а все остальные нет 
                                              
                shipNum = 1; //   объявляем какой корабль номер корабля этот элемент будет обозначать какой корабль выбран на данный момент 
                if (shipUnlock[1] == false) //если корабль  ещё не куплен

                {
                    Selector.GetComponent<Image>().color = selectrColors[1]; //  в случи если селектор закрыт то ставим 1 что бы открыть  обращаема к имаге что бы работал селектор подсветка кораблей обводка
                    priceInCoins.SetActive(true);  //  если у нас корабль купленый активируем 
                    priceInDollars.SetActive(false);  // делаем значок доллара  что бы появлялся 
                    PlayBtnT.text = PlayButtonTexts[1];  // за текст корабль купленный 2
                    PlayBtnT.color = playBtnColors[1]; // за цвет  корабль купленный 2
                }
                else
                {
                    Selector.GetComponent<Image>().color = selectrColors[0]; //  в случи если селектор закрыт то ставим 1 что бы открыть  обращаема к имаге что бы работал селектор подсветка кораблей обводка
                    priceInCoins.SetActive(false);  //  если у нас корабль не купленный 
                    priceInDollars.SetActive(false);  // делаем значок доллара  что бы появлялся 
                    PlayBtnT.text = PlayButtonTexts[0];  // за текст корабля не купленный
                    PlayBtnT.color = playBtnColors[0]; //  отвечает за цвет корабля не купленный
                }
                break;

            case 3:
                Selector.transform.position = ships[2].transform.position;  //(перемещаем корабль ) говорим селектору что мы хотим переместить выделения на другой корабль на корабль 1
                ships[0].color = shipColors[1]; // говорим то что выделенный корабль прозрачный а все остальные нет 
                ships[1].color = shipColors[1]; // говорим то что выделенный корабль прозрачный а все остальные нет 
                ships[2].color = shipColors[0]; // говорим то что выделенный корабль прозрачный а все остальные нет 
                                                
                shipNum = 2; //   объявляем какой корабль номер корабля этот элемент будет обозначать какой корабль выбран на данный момент 
                if (shipUnlock[1] == false) //если корабль  ещё не куплен
                {
                    priceInDollars.SetActive(true);  // делаем значок доллара  что бы появлялся 
                    priceInCoins.SetActive(false);  //  меняем  монеты на доллар  
                    PlayBtnT.text = PlayButtonTexts[1];  // за текст
                    PlayBtnT.color = playBtnColors[1]; // за цвет 
                }
                else
                {
                    priceInDollars.SetActive(false);  // делаем значок доллара  что бы появлялся 
                    priceInCoins.SetActive(false);  //  меняем  монеты на доллар  
                    PlayBtnT.text = PlayButtonTexts[0];  // за текст
                    PlayBtnT.color = playBtnColors[0]; // за цвет 
                }
                break;
        }
    }
и вот второй игровая сцена (2)
и я хотел бы поменять как то с этим годом если это возможно ну или другой вариант
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    public GameObject char1, char2, char3;
    int charOn = 1; //для переключения персонажей   

    void Start()
    {
        char1.gameObject.SetActive(true);
        char2.gameObject.SetActive(false);
        char3.gameObject.SetActive(false);
    }





    public void SwitcCharacter()
    {
        switch (charOn)
        {
            case 1:
                charOn = 2;
                char1.gameObject.SetActive(false);
                char2.gameObject.SetActive(true);
                char3.gameObject.SetActive(false);
                break;

            case 2:
                charOn = 3;
                char1.gameObject.SetActive(false);
                char2.gameObject.SetActive(false);
                char3.gameObject.SetActive(true);
                break;
            case 3:
                charOn = 1;
                char1.gameObject.SetActive(true);
                char2.gameObject.SetActive(false);
                char3.gameObject.SetActive(false);
                break;

        }
    }






}
или немного изменить что-нибудь что-бы все заработало )))
suzume вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Технико экономическая тема, ответ министру экономразвития и наша любимая тема про скоростные поезда ) ВСМ ) Alar Свободное общение 18 25.06.2019 21:38
Тема-агрегатор юмора (это служебная тема, не обращайте на неё внимания) Вадим Мошев Свободное общение 0 27.01.2016 14:59
Как сделать фон спрайта прозрачным? Sylvos Visual C++ 6 24.03.2012 01:17
Нужна функция вывода спрайта ALKOrobot Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 30.10.2011 17:53
Почему моргает экран при развороте спрайта V-int Мультимедиа в Delphi 2 03.11.2007 14:47