• Слоты и как в них генерировать предметы?

    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();
            }
        }
    }


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

    K0TlK
    @K0TlK
    Achievement[] ArrayAchievements = new Achievement[10]; Ты здесь создаешь локальный массив и добавляешь туда элементы. Убери Achievement[].
  • Как задать перемещение игроку при помощи свайпов?

    K0TlK
    @K0TlK
    Artem Brjinski, Если вектор изначально не нормализован, то да. При движении умножаешь этот вектор на желаемую скорость и присваиваешь ее свойству velocity компонента rigidbody либо двигаешь как там тебе надо.
  • Как задать перемещение игроку при помощи свайпов?

    K0TlK
    @K0TlK
    Вынести нормализованное направление движения в отдельное поле, постоянно двигать в этом направлении объект, при свайпе менять направление.
  • Ошибка в Юнити, связанная с массивом GameObject, как ее решить?

    K0TlK
    @K0TlK
    у вас boba - массив объектов, у массива нет свойства gameObject. Вам нужно взять конкретный объект из массива (boba[index]) и у него уже брать gameObject. Надеюсь, вы не программист на вашем проекте.
  • Не знаю почему выдает ошибку cs1585? Строка(32,9)?

    K0TlK
    @K0TlK
    Что это за ужас, вы где ЭТО взяли? Зачем оно вам надо?
  • Как реализовать путь для противника?

    K0TlK
    @K0TlK
    В чем проблема то? Как механика должна работать? Для чего несколько дорог? Почему сразу не написать что как должно работать, чтобы люди не задавали уточняющие вопросы? Сделай у контрольной точки возможность иметь несколько ответвлений, которые будут хранить следующую контрольную точку.