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

Text Mesh из serializable текстового файла. Прокрутка без GUI

15.12.2020, 10:20. Показов 806. Ответов 0

Студворк — интернет-сервис помощи студентам
Добрый день. Я пытаюсь сделать список лидеров игроков без GUI элементов.
Для начала сделал ввод имени игрока и дал им рандомное количество очков после ввода. Потом записываю их в файл и вывожу список из 10 игроков в зависимости от количества их очков. 1 строка с игроком = 1 клон пребафа TextMesh. Сейчас добавил еще 20 игроков и создал 2 кнопки "Вверх"/"Вниз". Как сделать чтобы можно было по нажатию кнопки "Вниз" отображать 10 следующих и 10 предыдущих по нажатию "Вверх", либо просто скроллить вниз/вверх по одному игроку за раз?

Обновление списка при вводе имени игрока Input.cs
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
if (Physics.Raycast(RightHand.transform.position, Temp, out hit))
        {
            
            if (hit.transform.tag == "button" && Input.GetKeyDown("space"))
            {
                GameObject TempParent = hit.transform.parent.gameObject;
 
                if (TempParent.GetComponentInChildren<TextMesh>().text == ('\u21B2').ToString())
                    {
                        Nickname = NicknameBlank.GetComponent<TextMesh>().text;
                        ReadWriteFile.CurrentPlayer.score = Random.Range(11, 99);
                        ReadWriteFile.CurrentPlayer.playerName = Nickname;
                        ReadWriteFile.AddNewPlayer();
 
                        for (int i=0; i<9; i++)
                    {
                        ReadWriteFile.ListOfPlayers[i].GetComponentInChildren<TextMesh>().text = (i + 1).ToString() + ".  " + ReadWriteFile.listPlayers[i].playerName +
                        ReadWriteFile.LengthAlignment(ReadWriteFile.listPlayers[i].playerName) +
                        ReadWriteFile.listPlayers[i].score.ToString();
                    }
                        ReadWriteFile.ListOfPlayers[9].GetComponentInChildren<TextMesh>().text = "10. " 
                        + ReadWriteFile.listPlayers[9].playerName + ReadWriteFile.LengthAlignment(ReadWriteFile.listPlayers[9].playerName) 
                        + ReadWriteFile.listPlayers[9].score.ToString();
                }
Создание файла ReadWriteFile.cs
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
86
87
88
89
90
91
92
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Runtime.Serialization.Formatters.Binary;
 
public static class ReadWriteFile
{
    [Serializable]
    public struct DataRecord
    {
        public string playerName;
        public int score;
    }
   
    private static string Path = Application.dataPath + "/StreamingAssets/Scores.txt";  
    
    public static List<GameObject> ListOfPlayers;// Список
    
    public static DataRecord[] listPlayers = new DataRecord[30];// все игроки
    public static DataRecord CurrentPlayer;// Данные о текущем игроке
 
 
 
    // Размещение игрока в списке 
    public static void AddNewPlayer()
    {
        int i = 0;
        while (i < 30)
        {
            if (CurrentPlayer.score > listPlayers[i].score)
            {
                DataRecord temp1, temp2;
                temp1 = listPlayers[i];
                listPlayers[i] = CurrentPlayer;
                i++;
 
                for (; i < 30; i++)
                {
                    temp2 = listPlayers[i];
                    listPlayers[i] = temp1;
                    temp1 = temp2;
                }
            }
            i++;
        }
        SaveToFile();  // Сохраняем  список
    }
 
 
    // Вычисляем количество пробелов между именем игрока и набранными очками
    public static string LengthAlignment(string str)
    {
        string temp = "";
        int n = 22 - str.Length;
        for (int i = 1; i <= n; i++) temp += " ";
        return temp;
    }
 
 
    // Сохранение  в файл
    public static void SaveToFile()
    {
        FileStream fout = File.OpenWrite(Path);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fout, listPlayers);
        fout.Close();
    }
 
 
    // Загрузка  из файла
    public static void LoadFromFile()
    {
        if (File.Exists(Path))
        {
            FileStream fin = File.OpenRead(Path);
            BinaryFormatter bf = new BinaryFormatter();
            listPlayers = (DataRecord[])bf.Deserialize(fin);
            fin.Close();
        }
        else  
        {
            for (int i = 0; i < 30; i++)
            {
                listPlayers[i].playerName = "---------------";
                listPlayers[i].score = 0;
            }
            SaveToFile();
        }
    }
}
Scoreboard.cs
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Scoreboard : MonoBehaviour
{
    public GameObject ScoreText;
    public GameObject Spawn;
    public GameObject ScrollButton;
 
    private void ScoreList()
    {
        Transform generateText = Spawn.transform;
        GameObject textobj;
        ReadWriteFile.ListOfPlayers = new List<GameObject>();
 
        for (int i = 0; i < 10; i++)
        {
            textobj = Instantiate(ScoreText, generateText.transform) as GameObject;
            textobj.transform.localPosition = new Vector3(generateText.position.x + 2.84f, generateText.position.y - i * 0.25f - 3.3f, generateText.position.z - 5.095f);
            ReadWriteFile.ListOfPlayers.Add(textobj);
        }
    }
 
 
 
    void Start()
    {
        ScoreList();
 
        Transform InitialPosition = gameObject.transform;
        GameObject scroll;
 
        scroll = Instantiate(ScrollButton, InitialPosition) as GameObject;
        scroll.GetComponentInChildren<TextMesh>().text = ('\u25B2').ToString();
        scroll.transform.localPosition = new Vector3(4.6f, -2.05f, 0.967f);
        scroll.transform.localRotation = Quaternion.Euler(0f, 90f, 0f);
        scroll = Instantiate(ScrollButton, InitialPosition) as GameObject;
        scroll.GetComponentInChildren<TextMesh>().text = ('\u25BC').ToString();
        scroll.transform.localPosition = new Vector3(4.6f, -2.613f, 0.968f);
        scroll.transform.localRotation = Quaternion.Euler(0f, 90f, 0f);
 
        ReadWriteFile.LoadFromFile();
        for (int i = 0; i<9; i++)
        {
            ReadWriteFile.ListOfPlayers[i].GetComponentInChildren<TextMesh>().text = (i + 1).ToString() + ".  " 
                + ReadWriteFile.listPlayers[i].playerName + ReadWriteFile.LengthAlignment(ReadWriteFile.listPlayers[i].playerName) 
                + ReadWriteFile.listPlayers[i].score.ToString();
        }
 
            ReadWriteFile.ListOfPlayers[9].GetComponentInChildren<TextMesh>().text = "10. " 
            + ReadWriteFile.listPlayers[9].playerName + ReadWriteFile.LengthAlignment(ReadWriteFile.listPlayers[9].playerName) 
            + ReadWriteFile.listPlayers[9].score.ToString();
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2020, 10:20
Ответы с готовыми решениями:

Как в Matlabe GUI в ListBox поместить кнопки, Edit Text. (прокрутка страницы)
Здравствуйте. Подскажите пожалуйста как в ListBox поместить компоненты не формата String а кнопки, Edit Text. Хочу сделать прокрутку...

Text Mesh
По умолчанию в нем очень расплывчатый текст, как это можно поправить ситуацию?

Text Mesh редактиривания текста
У меня есть записаний текс в Text Mesh text в таком виде _ _ _ _ _. Мне нужно что при нажатии кнопки записивалось значения кнопки. Например...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2020, 10:20
Помогаю со студенческими работами здесь

Text Mesh справа на лево
Сначала появляется текст вот такой &quot;__&quot;. Тоесть _ и _ вместе. Нужно заменять текст например ввожу 1 и 2. Текст должен стать 12. у меня 21....

Создание Text Mesh из кода
Доброго времени суток. Возникла такая проблема при создании Text Mesh из кода - C#: GameObject TO = new GameObject(); TO.name =...

Text Mesh Pro не работает при большом объеме текста
Я пытаюсь передать большой текст, где-то 1,500,000 символов, в textMeshPro вот так мой класс using UnityEngine; using TMPro; ...

Вероятно ли вывести в entry и text в tkinter информацию из текстового файла?
Привет форумчане. Решил сделать для входа в приложение такую вещь, чтобы при нажатии на кнопку происходило заполнение формы логином,...

Создание текстового файла и запись в него содержимого Edit.Text
Как создать файл с указанным именем в указанной папке? Как записать Edit.Text в файл?


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru