• Почему деньги не вычитаются при покупке из переменной?

    K0TlK
    @K0TlK
    ArasI, И? В чем проблема? Тебе одну строчку нужно добавить.
  • Почему деньги не вычитаются при покупке из переменной?

    K0TlK
    @K0TlK
    ArasI, Ты сейчас серьезно? Ты за 12 дней не смог разобраться в таком элементарном вопросе? Я тебе дважды написал что надо сделать:
    Ты НЕ ИЗМЕНЯЕШЬ ShopAssist.money. У тебя в ShopAssist есть метод TryRemoveMoney используй его, чтобы отнять деньги. В твоем случае это будет script1.TryRemoveMoney(количество).

    Ты хоть читал мой ответ? Пытался сделать что-либо сам?
  • Как сделать линию загрузки при зажатии кнопки в Unity?

    K0TlK
    @K0TlK
    readrain, Подписать на событие нажатия кнопки старт корутины, в которой будет заполняться линия, когда эта линия заполнится, вызывать еще одно событие, на которое подписать нужный метод.
  • Как сделать линию загрузки при зажатии кнопки в Unity?

    K0TlK
    @K0TlK
    В чем вопрос то? После нажатия кнопки пускать линию, после линии совершать ход.
  • Как задать камеру в скрипте из другого скрипта?

    K0TlK
    @K0TlK
    EnGold, SC_FPSController - компонент, sC_FPSController - поле, содержащее ссылку на компонент, оно может быть пустым. GetComponent там и не нужен. Зачем вообще удалять компонент и снова добавлять его, если можно просто блокировать движение в скрипте передвижения? Зачем изобретать костыли?
  • Как задать камеру в скрипте из другого скрипта?

    K0TlK
    @K0TlK
    1.sC_FPSController пустое поле?
    2.camera пустое поле?
    3.camera.GetComponent() зачем? У тебя итак там компонент камеры. Ты у компонента камеры пытаешься получить компонент камера.
  • UNITY Как сделать вид у персонажа сверху?

    K0TlK
    @K0TlK
    Реализуй сначала что-нибудь простое. Если ты не знаешь элементарных вещей, то на что-то сложное не стоит замахиваться. Пройди хотя бы Юнитивские курсы, где ты узнаешь основы, потом уже что-то делай.
  • Слоты и как в них генерировать предметы?

    K0TlK
    @K0TlK
    CatNorrius, Отлично, а теперь код прикладывай, чтобы люди понимали как тебе помочь, потому что на твой абстрактный вопрос сложно дать конкретный ответ, который подойдет именно тебе
  • Почему деньги не вычитаются при покупке из переменной?

    K0TlK
    @K0TlK
    ArasI, Я же тебе буквально написал что не так. Ты НЕ ИЗМЕНЯЕШЬ ShopAssist.money. У тебя в ShopAssist есть метод TryRemoveMoney используй его, чтобы отнять деньги. В твоем случае это будет script1.TryRemoveMoney(количество). Но единственное правильное решение в твоем случае - удалить этот проект, который ты с божьей помощью накопипастил из гайдов и делать что-нибудь простое, клон flappy bird и подобные ПРОСТЫЕ проекты. Пройди по ссылке выше на курсы по юнити и c# и пройди их, там все разжевывается. Не надо начинать их с середины или с конца, начинай с самого начала.
  • Почему деньги не вычитаются при покупке из переменной?

    K0TlK
    @K0TlK
    ArasI, ты изменяешь data.money, но не ShopAssist.money. Ты думаешь, что, когда в апдейте ты приравниваешь data.money к ShopAssist.money, то ShopAssist.money будет изменяться при изменении data.money? Нет не будет. int - это не ссылочный тип, поэтому в апдейте полю data.money ты присваиваешь значение ShopAssist.money, но от этого ShopAssist.money не изменится. Ты даже не понимаешь разницы между ссылочными типами и типами значения, поэтому тебе по ссылкам, которые я скинул выше. Изучи сначала основы.
  • Почему деньги не вычитаются при покупке из переменной?

    K0TlK
    @K0TlK
    ArasI, В чем она другая? Абсолютно идентичный код, абсолютно идентичный вопрос. Скопировал из гайдов код и не можешь в нем разобраться. Твоя проблема в том, что у тебя даже начальных знаний языка нет и ты не понимаешь, что делаешь.
    Ты в этой строчке деньги отнимаешь?
    data.money = data.money - AllCharacters[i].GetComponent<Item>().priceCharacter;
  • Не могу зайти в проект и выскакивает ошибка. Вроде пишет что какой-то файл не распаковался. Что делать?

    K0TlK
    @K0TlK
    У меня палец болит. Вроде на правой руке. Что делать? Где ошибка? Где хоть что-либо, чтобы понять что у тебя за проблема, здесь нет экстрасенсов.
  • Где вторая сцена в Unity?

    K0TlK
    @K0TlK
    Так перенеси ее из Scenes в Build Settings
  • Как получить ссылку на Inventory (находится на префабе игрока) из InventoryGUI (висит на сцене в UI panel в Canvas)?

    K0TlK
    @K0TlK
    Vlad-1234567890, Их надо передавать не игроку, а контроллеру, а контроллер уже передавать игроку. У меня в примере все через игрока, чтобы не генерировать еще больше текста.
    public class GameCore : MonoBehaviour
    {
        [SerializeField] private ViewOne _view1;
        [SerializeField] private ViewTwo _view2;
        [SerializeField] private Player _playerPrefab;
    
        private Controller _controller;
    
        private void Awake()
        {
            InitializeUI();
            InitializePlayer(_controller);
        }
    
        private void InitializePlayer(Controller controller)
        {
            var player = Instantiate(_playerPrefab);
            player.Initialize(controller);
        }
    
        private void InitializeUI()
        {
            _controller = new Controller(_view1, _view2);
        }
    }


    Компонент GameCore - точка входа, она инициализируется самой первой на сцене, поэтому у нее метод Awake, а не старт. Благодаря тому, что она инициализируется самой первой, мы можем контролировать порядок инициализации других модулей и прокидывать им зависимости. Допустим, здесь инициализируется игрок, но т.к. он зависит от контроллера, то контроллер инициализируется первым. У игрока, соответственно, должен быть метод Initialize который принимает зависимости в качестве параметров.

    Пример с моделью, контроллером и представлением - это дефолтный MVC паттерн, можешь погуглить это семейство паттернов, помотреть на другие и выбрать тот, что удобнее тебе.
  • Как работать с элементами списка по отдельности?

    K0TlK
    @K0TlK
    freeExec, А. Да. Даже не смотрел в апдейт, думал он там в цикле проходится по списку. Зря.
  • Как работать с элементами списка по отдельности?

    K0TlK
    @K0TlK
    Nik Titor, Что ты хочешь сделать? Чтобы после смерти они переспавнивались?
  • Как работать с элементами списка по отдельности?

    K0TlK
    @K0TlK
    Nik Titor, Ты же понимаешь, что в старте ты взял ОДИН компонент хп у ОДНОГО врага и на основании ОДНОГО врага активируешь/деактивируешь всех врагов?
  • Как работать с элементами списка по отдельности?

    K0TlK
    @K0TlK
    Приложи полностью код класса, чтобы понимать весь масштаб. "На определенного врага из списка" на какого врага? Какое условие должно выполниться чтобы выбрать этого врага?
  • Как получить ссылку на Inventory (находится на префабе игрока) из InventoryGUI (висит на сцене в UI panel в Canvas)?

    K0TlK
    @K0TlK
    Vlad-1234567890, Я не понимаю логики. Почему объект SpawnPlayers работает с UI игрока? Что он с этим ui делает? Этот класс не должен взаимодействовать с представлением инвентаря вообще никак. Никто об этом ui вообще знать не должен, кроме класса, который связывает модель инвентаря и сам ui. Взаимодействие происходит через этого посредника, он принимает команды, говорит модели сделать то что надо, модель обновляется, вызывает ивент, и представление обновляется. Что-то типа этого:
    using System;
    using System.Collections.Generic;
    
    public class Model
    {
        public event Action<int[]> ModelUpdated;
    
        private List<int> _integers = new List<int>();
    
        public void Add(int integer)
        {
            _integers.Add(integer);
            ModelUpdated?.Invoke(_integers.ToArray());
        }
    
        public void RemoveRandom()
        {
            var random = new Random();
            RemoveAt(random.Next(0, _integers.Count));
        }
        private void RemoveAt(int integer)
        {
            _integers.RemoveAt(integer);
            ModelUpdated?.Invoke(_integers.ToArray());
        }
    }


    Есть модель, которая ни от кого не зависит. Хранит в себе список цифр. Может добавлять или удалять цифру из этого списка.

    public interface IIntegersView
    {
        void UpdateView(int[] integers);
    }

    Есть контракт представления, чтобы можно было сделать несколько ui для этой модели.

    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Text))]
    public class ViewOne : MonoBehaviour, IIntegersView
    {
        private Text _text;
    
        private void Start()
        {
            _text = GetComponent<Text>();
        }
    
        public void UpdateView(int[] integers)
        {
            var text = " ";
            foreach (var i in integers)
            {
                text += $"{i}, ";
            }
            _text.text = text;
        }
    }

    Есть одно представление, которое обязуется исполнить контракт. Представление - MonoBehaviour. Данное представление вешается на ui у которого есть компонент Text. Оно будет выводить на экран все цифры, когда модель обновляется.

    using System.Linq;
    using UnityEngine;
    using UnityEngine.UI;
    
    [RequireComponent(typeof(Text))]
    public class ViewTwo : MonoBehaviour, IIntegersView
    {
        private Text _text;
    
        private void Start()
        {
            _text = GetComponent<Text>();
        }
    
        public void UpdateView(int[] integers)
        {
            var group = integers.Where(x => x % 3 == 0).ToArray();
            var text = " ";
            foreach(var i in group)
            {
                text += $"{i}, ";
            }
            _text.text = text;
        }
    }


    Есть вторая вьюшка, которая выводит на экран цифры, которые делятся без остатка на 3.

    public class Controller
    {
        private Model _model;
        private IIntegersView _view1;
        private IIntegersView _view2;
    
        public Controller(IIntegersView view1, IIntegersView view2)
        {
            _view1 = view1;
            _view2 = view2;
            _model = new Model();
            _model.ModelUpdated += _view1.UpdateView;
            _model.ModelUpdated += _view2.UpdateView;
        }
    
        public void AddInteger(int integer) => _model.Add(integer);
    
        public void RemoveInteger() => _model.RemoveRandom();
    }


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

    using UnityEngine;
    using Random = UnityEngine.Random;
    
    public class Player : MonoBehaviour
    {
        [SerializeField] private ViewOne _view1;
        [SerializeField] private ViewTwo _view2;
    
        private Controller _controller;
    
        private void Start()
        {
            _controller = new Controller(_view1, _view2);
        }
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                _controller.AddInteger(Random.Range(1, 100));
            }
    
            if (Input.GetKeyDown(KeyCode.LeftShift))
            {
                _controller.RemoveInteger();
            }
        }
    }


    И, собственно, игрок, которому нужно закинуть вьюшки в инспекторе. Инициализирует контроллер. Если нажать пробел, то цифра добавится, если нажать левый шифт, то удалится.
    Как все это выглядит в игре