Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.04.2023
Сообщений: 17

Как создать нелинейный ход сцен для новеллы?

13.04.2024, 22:38. Показов 1499. Ответов 21

Студворк — интернет-сервис помощи студентам
делаю новеллу и столкнулся с проблемой, что после отработки кнопки и её логического прохождения, сцены, предназначенные для второй кнопки тоже отрабатываются. я почитал и нашёл такой способ: SceneManager.LoadScene("Loading"); но проблема в том, что у меня кнопки(вариантов ответа с кнопок всегда будет два) сделаны в виде префаба и я не могу задать новывй скрипт для одной из них.. помогите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2024, 22:38
Ответы с готовыми решениями:

Скрипт для графической новеллы
Помогите разобраться и пофиксить скрипт. Создавался не мной, а по просьбе. Сам в AS 3.0 плохо разбираюсь, только по шаблонам. ...

Какой движок для визуальной новеллы выбрать?
Я хочу создать мобильную визуальную новеллу. Немного знаю питон, немного с++, немного разбираюсь в компьютерах. Вопрос: какой движок...

Код на C# для Андроид приложения в Unity2D , как сделать масив со сцен и перенаправить их на клон префаба!
Здраствуйте! Ситуация такая! Это должно быть меню ля игры! Есть сцена с префабом и сроллом , в которой клонируется экземпляр прифаба на...

21
304 / 211 / 96
Регистрация: 04.07.2012
Сообщений: 903
15.04.2024, 17:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Apollogize Посмотреть сообщение
потому что после нажатия на кнопку диалог не появляется
Ну я Ваш код не вижу, по-моему это не серьезно дальше пытаться угадывать.
Если у Вас все диалоги заканчивается переходом на новую сцену. То есть тем что раньше было у Вас в методе ExitDialog(), значит что-то не то закомментировали.
Покажите код, надоело гадать.
0
0 / 0 / 0
Регистрация: 22.04.2023
Сообщений: 17
15.04.2024, 22:17  [ТС]
этот скрипт отвечает за диалоги
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using Ink.Runtime;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using Zenject;
 
public class Dialogs : MonoBehaviour
{
    private Story _currentStory;
    private TextAsset _inkJson;
 
    private GameObject _dialogPanel;
    private TextMeshProUGUI _dialogText;
    private TextMeshProUGUI _nameText;
 
    [HideInInspector] public GameObject _choiceButtonsPanel;
    private GameObject _knopkaButton;
    private List<TextMeshProUGUI> _choicesText = new();
    //private List<Character> characters = new();
   // private float multiplier = 1.1f;
 
    public bool DialogPlay { get; private set; }
    [Inject]
    public void Construct(DialogsInstaller dialogsInstaller)
    {
        _inkJson = dialogsInstaller.inkJson;
        _dialogPanel = dialogsInstaller.dialogPanel;
        _dialogText = dialogsInstaller.dialogText;
        _nameText = dialogsInstaller.nameText;
        _choiceButtonsPanel = dialogsInstaller.choiceButtonsPanel;
        _knopkaButton = dialogsInstaller.knopkaButton;
    }
 
    private void Awake()
    {
        _currentStory = new Story(_inkJson.text);
    }
 
    void Start()
    {
        //foreach (var character in FindObjectsOfType<Character>())
        {
          //  characters.Add(character);
        }
        StartDialogs();
    }
 
    public void StartDialogs()
    {
        DialogPlay = true;
        _dialogPanel.SetActive(true);
        ContinueStory();
    }
 
    public void ContinueStory(bool choiceBefore = false)
    {
        if (_currentStory.canContinue)
        {
            ShowDialog();
            ShowChoiceButtons();
        }
        else if (!choiceBefore)
        {
            ExitDialog();
        }
    }
 
    private void ShowDialog()
    {
        _dialogText.text = _currentStory.Continue();
        _nameText.text = (string)_currentStory.variablesState["CharacterName"];
       // var index = characters.FindIndex(Character => Character.characterName.Contains(_nameText.text));
       // characters[index].ChangeEmotion((int)_currentStory.variablesState["characterExpression"]);
       // ChangeCharacterScale(index);
    }
 
    //private void ChangeCharacterScale(int indexCharacter)
    //{
       // if (indexCharacter >= 0)
       // {
           // foreach (var character in characters)
           // {
               // if (character != characters[indexCharacter])
              // {
                   // character.ResetScale();
              //  }
               // else if (character.DefaultScale == character.transform.localScale)
               // {
                 //  character.ChangeScale(multiplier);
               // }
          //  }
      //  }
       // else
      //  {
           // characters.ForEach(character => character.ResetScale());
       // }
    //}
 
    private void ShowChoiceButtons()
    {
        List<Choice> currentChoices = _currentStory.currentChoices;
        _choiceButtonsPanel.SetActive(currentChoices.Count != 0);
        if (currentChoices.Count <= 0)
        {
            return;
        }
 
        _choiceButtonsPanel.transform.Cast<Transform>().ToList().ForEach(child => Destroy(child.gameObject));
        _choicesText.Clear();
 
        for (int i = 0; i < currentChoices.Count; i++)
        {
            GameObject choice = Instantiate(_knopkaButton);
            choice.GetComponent<ButtonActions>().index = i;
            choice.transform.SetParent(_choiceButtonsPanel.transform);
 
            TextMeshProUGUI choiceText = choice.GetComponentInChildren<TextMeshProUGUI>();
            choiceText.text = currentChoices[i].text;
            _choicesText.Add(choiceText);
        }
    }
 
    public void ChoiceButtonActions(int choiceIndex)
    {
        _currentStory.ChooseChoiceIndex(choiceIndex);
        ContinueStory(true);
    }
 
   private void ExitDialog()
    {
        ///DialogPlay = false;
       // _dialogPanel.SetActive(false);
        //int nextSceneIndex = SceneManager.GetActiveScene().buildIndex + 1;
        //if (nextSceneIndex <= SceneManager.sceneCount)
       ///{
          // SceneManager.LoadScene(nextSceneIndex);
      }
 
 
}
Добавлено через 46 секунд
это новый скрипт для кнопки, которая меняет сцены по названию сцены
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 System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
 
public class ButtonScript4 : MonoBehaviour
{
    public void ButtonClick(string sceneName)
    {
        if (sceneName != "")
            // Debug.Log("кнопка нажимается, если сцена " + sceneName + " не открылась, что-то пошло не так.");
            SceneManager.LoadScene(sceneName);
        else
 
            ExitDialog();
 
    }
 
    private void ExitDialog()
    {
        throw new NotImplementedException();
    }
}
Добавлено через 1 минуту
это скрипт для кнопок, которые префаб. но теперь я думаю их убрать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
 
public class ButtonActions : MonoBehaviour
{
    public int index;
    private Button _button;
    private Dialogs _dialogs;
    private UnityAction _clickAction;
 
    void Start()
    {
        _button = GetComponent<Button>();
        _dialogs = FindObjectOfType<Dialogs>();
        _clickAction = new UnityAction(() => _dialogs.ChoiceButtonActions(index));
        _button.onClick.AddListener(_clickAction);
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2024, 22:17

Как максимально оптимизировать построение сцен для "2,5D" игр?
Доброго времени суток. Делаю свою первую игру на Unity, пиксельная игра в трехмерном пространстве. Столкнулся с проблемой собственно...

Как работает нелинейный резонансный усилитель?
Объясните пожалуйста как работает нелинейный резонансный усилитель и модулятор базовым смещением.

Изменение скрипта для разных сцен
Всем привет! Ситуация следующая: есть где-то 20 скриптов, из них 19 одинаковы для всех сцен (движение персонажа, скрипт джойстика, вывод...

Средства VB для организации динамических сцен
Доброго времени суток. Столкнулся сегодня с вопросом &quot;Организация динамических сцен средствами VB&quot; на вступительном экзамене. Не...

Программа для создания моделей и сцен
Доброго времени суток! Ситуация такая - изучаю программирование на С++ + читаю книгу Таненбаума о архитектуре ЭВМ и изучаю попутно прочую...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru