Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 29.04.2017
Сообщений: 9

Случайная текстура на кубике

08.05.2017, 16:22. Показов 3001. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, создаю игру на андроид, делаю по видеоукрокам. Суть игры: дается главный куб ему присваивается случайный цвет, под главным кубом есть кубики, одному из них присваивается цвет такой же как и на главном кубе. Остальным кубикам присваиваются другие цвета не схожие с главным.
А как изменить код чтобы вместо цветов была случайная текстура ?

Вот код
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
using UnityEngine;
using System.Collections;
 
public class RandCol : MonoBehaviour
{
 
    public bool main = false, right = false; 
 
    private static Color aColor; 
 
    void Awake()
    {
        if (main) 
            aColor = new Vector4(Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), 1); 
    }
 
    void Start()
    {
        if (main || right) 
            GetComponent<Renderer>().material.color = aColor; 
        else
            GetComponent<Renderer>().material.color = new Vector4(aColor.r + Random.Range(0.1f, 0.3f), aColor.g + Random.Range(0.1f, 0.3f), aColor.b + Random.Range(0.1f, 0.3f), aColor.a); 
    }
}
и еще вот
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
 
public class GameCntrl : MonoBehaviour
{
    public GameObject pLost;
    public GameObject colBlock;
    public Vector3[] positions;
    private GameObject block;
    private GameObject[] blocks = new GameObject[6]; 
 
    private int rand, count;
    private float rCol, gCol, bCol;
    public Text score;
    private static Color aColor;
 
    [HideInInspector]
    public bool next, lose;
 
    void Start()
    {
        count = 0; 
        next = false; 
        lose = false; 
        rand = Random.Range(0, positions.Length); 
        for (int i = 0; i < positions.Length; i++)  
        {
            blocks[i] = Instantiate(colBlock, positions[i], Quaternion.identity) as GameObject;
            if (rand == i) 
                block = blocks[i]; 
        }
        block.GetComponent<RandCol>().right = true;  
    }
 
    void Update()
    {
        if (lose)
            playerLose(); 
        if (next && !lose)
            nextColors(); 
    }
 
    void nextColors()
    {
 
        if (PlayerPrefs.GetString("Music") != "no")
            GetComponent<AudioSource>().Play();
        count++; 
        score.text = count.ToString();  
        aColor = new Vector4(Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), 1);
        GetComponent<Renderer>().material.color = aColor; 
        next = false; 
 
        if (count < 10)
        {
            rCol = 0.5f;
            gCol = 0.5f;
            bCol = 0.5f;
        }
   
 
      
        rand = Random.Range(0, positions.Length); 
        for (int i = 0; i < positions.Length; i++) 
        {
            if (i == rand) 
                blocks[i].GetComponent<Renderer>().material.color = aColor; 
            else
            {
                
                float r = aColor.r + Random.Range(0.1f, rCol) > 1f ? 1f : aColor.r + Random.Range(0.1f, rCol);
                float g = aColor.g + Random.Range(0.1f, gCol) > 1f ? 1f : aColor.g + Random.Range(0.1f, gCol);
                float b = aColor.b + Random.Range(0.1f, bCol) > 1f ? 1f : aColor.b + Random.Range(0.1f, bCol);
                blocks[i].GetComponent<Renderer>().material.color = new Vector4(r, g, b, aColor.a); 
            }
        }
    }
 
    void playerLose()
    {
        
 
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.05.2017, 16:22
Ответы с готовыми решениями:

Не работает текстура в 3d объекте, объект рисуется, я текстура на нем нет.
Здравствуйте, есть 3d кубик, и я его заполняю текстурой, но в зависимости от текстуры заполняются лишь его контуры, а сам он прозрачный,...

Исправить код по задаче о катящемся кубике
Грани кубика помечены числами от 1 до 6. Если кубик лежит на плоскости, то оставляет след в виде квадрата с цифрой равной цифре на...

Массивы: подсчитать количество выпавших шестерок в кубике
Нужно подсчитать количество выпавших шестерок в кубике,ясно что нужно делать через массив

10
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
10.05.2017, 10:15
Бросайте этот курс, я после 3го урока в нем полностью разочаровался)

А по вашему вопросу:
C#
1
public Texture2D[] textures;
В эту переменную в инспекторе добавляете нужные текстуры.

Потом, там где нужно применить текстуру, делаете что-то типо
C#
1
myGameObject.renderer.material.mainTexture = textures[Random.Range(0; textures.Length)];
Тогда вроде из массива с текстурами будет установлена случайная...

Добавлено через 2 часа 13 минут
Только вместо myGameObject.renderer.material.mainTextu re надо в последних версиях Unity
C#
1
myGameObject.GetComponent<Renderer>.material.mainTexture
1
0 / 0 / 0
Регистрация: 29.04.2017
Сообщений: 9
10.05.2017, 11:52  [ТС]
Спасибо за ответ. Но все равно не понял как в переменную заносить случайную текстуру. У меня ругается на "textures".
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
10.05.2017, 12:23
textures нужно сначала заполнить через инспектор нужными текстурами.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
10.05.2017, 12:28
Unity под рукой нет, нашел вот в интернете картинку похожую.
Кликните здесь для просмотра всего текста

У вас в инспекторе появится textures там, куда скрипт прикрепили. Нужно указать количество элементов (сколько текстур)
А потом перетащить нужные текстуры в появившиеся поля.
1
0 / 0 / 0
Регистрация: 29.04.2017
Сообщений: 9
10.05.2017, 14:20  [ТС]
это да я уже сделал, но на эту строчку ругается
C#
1
myGameObject.GetComponent<Renderer>.material.mainTexture= textures[Random.Range(0; textures.Length)];
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
10.05.2017, 14:44
Цитата Сообщение от HOVOE Посмотреть сообщение
на эту строчку ругается
У вас скрипт прикреплен к тому объекту, у которого текстуру менять собираетесь?
Тогда myGameObject замените на gameObject
0
0 / 0 / 0
Регистрация: 29.04.2017
Сообщений: 9
10.05.2017, 16:10  [ТС]
Да скрипт прикреплен к объекту. Да надо было GameObject использовать.
Сейчас вместо этого
C#
1
aColor = new Vector4(Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), Random.Range(0.1f, 1f), 1);
написал так
C#
1
aColor = GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
Теперь проблема с переменной. Как правильно ее объявлять ?
так не получается
C#
1
private static Texture2D aColor;
а было так
C#
1
private static Color aColor;
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
10.05.2017, 16:17
a color тут вообще не нужна.
C#
1
2
3
4
5
6
    public Texture2D[] textures;
 
    void Start()
    {
        gameObject.GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
    }
1
0 / 0 / 0
Регистрация: 29.04.2017
Сообщений: 9
10.05.2017, 16:39  [ТС]
а как быть тогда с этим
C#
1
2
3
4
5
6
7
void Start()
    {
        if (main || right) 
            GetComponent<Renderer>().material.color = aColor; 
        else
            GetComponent<Renderer>().material.color = new Vector4(aColor.r + Random.Range(0.1f, 0.3f), aColor.g + Random.Range(0.1f, 0.3f), aColor.b + Random.Range(0.1f, 0.3f), aColor.a); 
    }
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
10.05.2017, 21:21
Лучший ответ Сообщение было отмечено HOVOE как решение

Решение

Ну хорошо.

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
public Texture2D[] textures; //массив текстур
    public bool main = false, right = false;
    private static Texture2D aTexture; //не знаю, нужен ли тут вообще static
 
    void Awake()
    {
        if (main)
            aTexture = textures[Random.Range(0, textures.Length)]; // aTexture присваиваем случайную текстуру из массива
    }
 
    void Start()
    {
        if (main || right)
            gameObject.GetComponent<Renderer>().material.mainTexture = aTexture;
        else
        {
            GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
 
            while (aTexture == gameObject.GetComponent<Renderer>().material.mainTexture)
            {
                GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
            }
        }
 
    }
Добавлено через 4 часа 26 минут
Вот второй код, но я уже запутался и спать хочу, пусть опытные поправляют))

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class GameCntrl : MonoBehaviour
{
    public GameObject pLost;
    public GameObject colBlock;
    public Texture2D[] textures;
    public Vector3[] positions;
    private GameObject block;
    private GameObject[] blocks = new GameObject[6];
 
    private int rand, count;
    //private float rCol, gCol, bCol;
    public Text score;
    private static Texture2D aTexture;
 
    [HideInInspector]
    public bool next, lose;
 
    void Start()
    {
        count = 0;
        next = false;
        lose = false;
        rand = Random.Range(0, positions.Length);
        for (int i = 0; i < positions.Length; i++)
        {
            blocks[i] = Instantiate(colBlock, positions[i], Quaternion.identity) as GameObject;
            if (rand == i)
                block = blocks[i];
        }
        block.GetComponent<RandCol>().right = true;
    }
 
    void Update()
    {
        if (lose)
            playerLose();
        if (next && !lose)
            nextColors();
    }
 
    void nextColors()
    {
 
        if (PlayerPrefs.GetString("Music") != "no")
            GetComponent<AudioSource>().Play();
        count++;
        score.text = count.ToString();
        aTexture = textures[Random.Range(0, textures.Length)];
        GetComponent<Renderer>().material.mainTexture = aTexture;
        next = false;
 
        rand = Random.Range(0, positions.Length);
        for (int i = 0; i < positions.Length; i++)
        {
            if (i == rand)
                blocks[i].GetComponent<Renderer>().material.mainTexture = aTexture;
            else
            {
                blocks[i].GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
                while (aTexture == blocks[i].GetComponent<Renderer>().material.mainTexture)
                {
                    blocks[i].GetComponent<Renderer>().material.mainTexture = textures[Random.Range(0, textures.Length)];
                }
            }
        }
    }
 
    void playerLose()
    {
 
 
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2017, 21:21
Помогаю со студенческими работами здесь

Какова вероятность того, что выпадет число 6 на игральном кубике?
Всем хай! Сходу к делу! Условие задачки: Какова вероятность того, что выпадет число 6 на игральном кубике(у него 6 граней и на...

Эмулятор игральных кубиков (выпадение случайного числа на стандартном шестигранном кубике)
Ребят подскажите плз. Я хочу написать прогу эмулятор игральных кубиков ! Подскажите как это организовать в программном коде лазаруса ,...

Брошено 6 игральных костей. Найти вероятность того, что хотя бы на одном кубике выпадает 5 очков
брошено 6 игральных костей. найти вероятность хотя бы на одном кубике выпадает 5 очков

задана сведения о кубике:размер,цвет,материал.Надо найти число кубиков которые не больше 3 см квадратный метр
Кубик туралы мәліметтер берілген: кубиктің өлшемі, оның түсі, материалы. Қабырғасы 3 см-ден аспайтын кубиктар санын табу. задана сведения...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru