Ответы пользователя по тегу Unity
  • Происходит Destroy нескольких врагов вместо одного?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Сработал OnCollisionEnter, нанёс первому персонажу урон. Ушёл от первого персонажа, но у него hitByPlayer == true как был, так и остался. Ты атакуешь второго персонажа. Урон наносится сразу обоим игрокам.

    Видимо, надо в OnCollisionExit вызывать
    hitByPlayer = false;
    Ответ написан
    1 комментарий
  • Не понимаю в чем проблема?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Вот так работает. Проверил.

    Вместо типа Image лучше укажи тип Graphic, если этот скрипт будет только менять цвет. Ну и переменную в таком случае назови _graphics, а не _image.

    using System;
    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    
    namespace Assets.Scripts
    {
        public class BuildManager : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
        {
            private Image _image;
    
            void Start()
            {
                _image = GetComponent<Image>();
    
                if (_image is null)
                {
                    throw new NullReferenceException(
                        $"The component of the type \"{nameof(Image)}\" not found.");
                }
            }
    
            void Update()
            {
            }
    
            public void OnPointerEnter(PointerEventData eventData)
            {
                _image.color = Color.green;
            }
    
            public void OnPointerExit(PointerEventData eventData)
            {
                _image.color = Color.white;
            }
        }
    }
    Ответ написан
    Комментировать
  • Как мне это реализовать в List?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Только вот использовать LINQ нужно с осторожностью. Лично я бы вообще не использовал его в том же Update или любом другом месте, где часто вызывается код.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using UnityEngine;
    
    [System.Serializable]
    public class TestEvent
    {
        [SerializeField] private int _b;
    
        public int B => _b;
    }
    
    public class TestScript : MonoBehaviour
    {
        [SerializeField] private List<TestEvent> _testEvents;
    
        private int a = 3;
    
        void Start()
        {
            var events = _testEvents
                .Where(item => item.B == a)
                .ToArray();
        }
    }


    Тоже самое, но без LINQ. Чисто показать принцип, так как это элементарная задача, а ты этого не сделал, значит нужно учиться. Если кол-во элементов в List _testEvents небольшое всегда, я бы ещё создавал var results = new List(); с указанием capacity равному _testEvents.Count. То есть так var results = new List(_testEvents.Count);
    public class TestScript : MonoBehaviour
    {
        [SerializeField] private List<TestEvent> _testEvents;
    
        private int a = 3;
    
        void Start()
        {
            var events = GetEvents(_testEvents, item => item.B == a);
        }
    
        private static List<TestEvent> GetEvents(
            IEnumerable<TestEvent> testEvents, Func<TestEvent, bool> predicate)
        {
            var results = new List<TestEvent>();
            foreach (var item in testEvents)
            {
                if (predicate(item))
                {
                    results.Add(item);
                }
            }
            return results;
        }
    }


    Продублирую решение из комментариев:
    public class TestScript : MonoBehaviour
    {
        [SerializeField] private List<TestEvent> _testEvents;
    
        private int a = 3;
    
        void Start()
        {
            var element = GetFirstOrDefault(_testEvents, item => item.B == a);
            if (element is not null)
            {
                c = element.c;
                r = element.r;
                u = element.u;
            }
        }
    
        // Если совпадение не найдено, то вернуть значение по умолчанию.
        private static T GetFirstOrDefault<T>(IEnumerable<T> items, Func<T, bool> predicate)
        {
            foreach (var item in items)
            {
                if (predicate(item))
                {
                    return item;
                }
            }
    
            return default;
        }
    }
    Ответ написан
  • Как шифровать и расшифровывать строки(с посылом и получением строки)?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Можно использовать библиотеку или подсмотреть реализацию:
    https://github.com/2Toad/Rijndael256
    https://www.nuget.org/packages/Rijndael256.Core/3.2.5

    Почитай главу 3 в книге: Advanced ASP.NET Core 3 Security. Understanding Hacks, Attacks, and Vulnerabilities to Secure Your Website. Узнаешь о проблемах шифрования текста, к примеру и вообще увидишь исходники примеров, как надо. Книгу можно купить на Amazon для приложения для Windows, которое называется Kindle.

    string password = "sKzvYk#1Pn33!YN";  // The password to encrypt the data with
    string plaintext = "Top secret data"; // The string to encrypt
    
    // Encrypt the string
    string ciphertext = Rijndael.Encrypt(plaintext, password, KeySize.Aes256);
    
    // Decrypt the string
    plaintext = Rijndael.Decrypt(ciphertext, password, KeySize.Aes256);
    Ответ написан
    Комментировать
  • Дайте совет где учить Unity и C#?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Лучше книг нет ничего. Это в первую очередь, а в дополнение уже можно использовать и другие ресурсы, вроде видеокурсов. В книгах больше всего полезной и важной информации.

    Книги C#:
    Язык программирования C# 7 и платформы .NET и .NET Core | Троелсен Эндрю, Джепикс Филипп

    Видеокурсы по C#:
    Поиск курсов по C# на Stepik
    Нашёл такой видеокурс
    И ещё один, более старый, но я его смотрел и помню, что он качественный.
    Смотреть исходники .NET Core (строка поиска слева сверху)

    Какие посоветуете книги по C# и смежным технологиям для начинающего?

    Книга по Unity:
    Unity в действии | Хокинг Джозеф

    Видеокурсы по Unity:
    Поиск курсов по Unity на Udemy
    Ответ написан
    Комментировать