0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 3
1

Изменить спрайт объекта Image

22.10.2018, 13:55. Показов 40685. Ответов 9

День добрый.
В Unity я новичок, в C# тоже, поэтому прошу сильно не пинать.
Сабж.
Есть объект Image, на нем спрайт и рядом кнопка. В папке Assets/Resourses лежат 3 спрайта. Планируется, чтобы при нажатии на кнопку, спрайт менялся циклически на один из трех (1-2-3-1 и т.д.). Но вместо этого изначальный спрайт меняется на белый фон и ничего больше не происходит. Прошу, ткните носом, где я ошибся. Заранее благодарю
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
 
 
 
 
public class ChangeClass : MonoBehaviour {
    private Sprite spr, spr1, spr2, spr3;
    public GameObject img;
    
    void Start(){
        
        
        img = GameObject.Find("ClassImage");
        spr = img.GetComponent<Image>().sprite;
        spr1 = Resources.Load<Sprite>("mage");
        spr2 = Resources.Load<Sprite>("snipe");
        spr3 = Resources.Load<Sprite>("warrior");
        Debug.Log(spr);
 
        if (spr = spr3) {
            img.GetComponent<Image>().sprite = spr1;
        }
        if (spr = spr1) {
                img.GetComponent<Image>().sprite = spr2;
            }
            else img.GetComponent<Image>().sprite = spr3;
    }
    
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2018, 13:55
Ответы с готовыми решениями:

Как изменить спрайт объекта через код?
Добрый день. Пытаюсь изменить спрайт объекта через dll. Создаю объект &quot;goPos&quot; в dll, нахожу его и...

Как развернуть спрайт объекта ? Unity3D
Надо развернуть спрайт монстра, когда он коснулся любого объекта (коллайдера) Вот скрипт: ...

Не получается перетащить спрайт отдельно от родительского объекта
У меня не получается перетащить спрайт отдельно от родительского объекта, не вручную, не через...

Вращение объекта за Image
Всем привет!!! Мне нужно что бы объект вращался за элементом UI Image. написал код но это не совсем...

9
Эксперт .NETАвтор FAQ
10295 / 5031 / 1819
Регистрация: 11.01.2015
Сообщений: 6,220
Записей в блоге: 34
22.10.2018, 21:54 2
Mifodiy,
Во-первых, нельзя так сравнивать объекты.
Когда вы загружаете спрайт из ресурсов, создается новый объект. И сравнивать его с объектом в компоненте Image - нет смысла, они всегда будут не равны.
Во-вторых, не нужно завязывать логику приложения на визуальные компоненты и их содержимое.
Нужно создать модель данных и менять ее, а по модели данных уже строить визуальные компоненты.
В вашем случае модель простейшая - это просто номер картинки, которую нужно отображать. Нужно создать отдельное поле типа int, которое будет содержать номер отображаемой картинки и менять его при надобности. И тогда вы будете ориентироваться на ваши данные, а не на содержимое Image.

Вот пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using UnityEngine;
using UnityEngine.UI;
 
public class ImageChanger : MonoBehaviour
{
    //index of current image
    public int CurrentImageNumber;
 
    //names of images in Resources folder
    public string[] ImageNames = new string[] {"img1", "img2", "img3"};
 
    void Start ()
    {
        //load CurrentImageNumber from disk
        CurrentImageNumber = PlayerPrefs.GetInt("CurrentImageNumber");
        //show image
        ShowImage();
    }
 
    private void ShowImage()
    {
        //get name of image for CurrentImageNumber
        var name = ImageNames[CurrentImageNumber];
        //set image to Image component
        GetComponent<Image>().sprite = Resources.Load<Sprite>(name);
    }
 
    // Go to next CurrentImageNumber and show image
    // this method is handler of button click
    public void GoToNextImage()
    {
        //next CurrentImageNumber
        CurrentImageNumber = (CurrentImageNumber + 1) % ImageNames.Length;
        //show image
        ShowImage();
        //save CurrentImageNumber to disk
        PlayerPrefs.SetInt("CurrentImageNumber", CurrentImageNumber);
    }
}
Этот скрипт вешается на ваш Image.
А метод GoToNextImage вешается как обработчик на OnClick кнопки:
Изменить спрайт объекта Image
1
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 3
22.10.2018, 22:42  [ТС] 3
Спасибо огромное!
0
0 / 0 / 0
Регистрация: 04.07.2016
Сообщений: 6
11.04.2020, 16:22 4
Можешь про свой скрипт немного рассказать, просто я сейчас по нажатию хочу поменять картинку, но чет не вдупляю, откуда должны браться сами картинки
0
74 / 52 / 25
Регистрация: 08.03.2020
Сообщений: 243
11.04.2020, 16:32 5
Врядли он тебе подскажет, ибо тема 2018 года )
А по поводу картинок:
C#
1
2
3
4
5
[SerializeField] private Sprite[] spriteMassive; //если много картинок нужно или 
[SerializeField] private Sprite oneSprite; //один спрайт
 
yourImage.sprite = spriteMassive[1];
yourImage.sprite = oneSprite;
Добавлено через 52 секунды
PS Ссылки на картинки в испекторе укажешь

Добавлено через 1 минуту
https://habr.com/ru/post/359106/ можно ещё статью почитать
0
2 / 2 / 0
Регистрация: 01.02.2017
Сообщений: 14
13.04.2020, 19:22 6
Картинка должна лежать в папке Assets/Resourses в проекте Unity (та на которую меняешь)
Смена происходит кодом:
C#
1
2
public image img;
img.sprite = Resources.Load<Sprite>('имя')
ps При этом надо очень внимательно с именем (одна опечатка и код работать не будет)
(данный пример применяется к объекту Image
0
74 / 52 / 25
Регистрация: 08.03.2020
Сообщений: 243
13.04.2020, 19:58 7
Цитата Сообщение от Katurina Посмотреть сообщение
ps При этом надо очень внимательно с именем (одна опечатка и код работать не будет)
Вот именно и вам тоже ))
public Image img;
0
0 / 0 / 0
Регистрация: 13.12.2020
Сообщений: 1
13.12.2020, 11:22 8
Цитата Сообщение от Storm23 Посмотреть сообщение
Этот скрипт вешается на ваш Image.
Можете кто-нибудь объяснить, как повесить скрипт на Image
0
248 / 185 / 67
Регистрация: 04.03.2019
Сообщений: 1,010
16.12.2020, 23:44 9
JordyBordy, просто потянуть скрипт в нужное место.
2) вариант . ест ькнопка Add Component, там где компоненты все и там выбрать скрипт.
0
0 / 0 / 0
Регистрация: 22.02.2021
Сообщений: 1
22.02.2021, 20:54 10
Добавлено через 2 минуты
При попытке повесить скрипт на Image, пишет ошибку
The script don't inherit a native class that can manage a script
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2021, 20:54

Как изменить спрайт выбранного объекта из массива?
Когда я подбираю игровой предмет, то вызываю метод добавления предмета. Передаю спрайт объекта...

Белый спрайт при создании нового объекта
Здравствуйте. Я создал вектор vector&lt;Object&gt; objects; для создания новых объектов. Тут я создаю...

Нужно изменить свойство объекта, при наведении объекта на область
Здравствуйте! Нужно чтобы квадрат в зеленой и синей области превращался в круг медленно. В желтой и...

Обновление объекта Image
Добрый вечер, дамы и господа! Есть код, который реализует перемещения (рандомное изменение...

Заполнение объекта Image по URL
Здравствуйте. У есть PictureBox, который берёт картинку из файла, вот так: PictureBox pb = new...

Проблемы с отрисовкой объекта Image
Написал игру. Стал все текстурами украшать и столкнулся с вот такой проблемой: объект Image с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru