Ответы пользователя по тегу Unity
  • NullReferenceException: Object reference not set to an instance of an object?

    Kentavr16
    @Kentavr16
    long cold winter
    textMesh = GetComponent<TextMeshProUGUI>();
    Ответ написан
  • Как сделать смену обьекта при приближении?

    Kentavr16
    @Kentavr16
    long cold winter
    using UnityEngine;
    
    public class TransparencyController : MonoBehaviour
    {
        public Transform playerTransform; // Ссылка на трансформ игрока
        public Transform objectTransform; // Ссылка на трансформ объекта, прозрачность которого мы хотим контролировать
    
        public float maxDistance = 10f; // Максимальное расстояние, при котором объект полностью прозрачен
        public float minDistance = 2f; // Минимальное расстояние, при котором объект полностью непрозрачен
    
        private SpriteRenderer objectRenderer; // Ссылка на компонент SpriteRenderer объекта
    
        void Start()
        {
            // Получаем компонент SpriteRenderer объекта
            objectRenderer = objectTransform.GetComponent<SpriteRenderer>();
        }
    
        void Update()
        {
            // Рассчитываем вектор от игрока к объекту и нормализуем его
            Vector3 playerToObject = objectTransform.position - playerTransform.position;
            float distance = playerToObject.magnitude;
            float normalizedDistance = Mathf.Clamp01((distance - minDistance) / (maxDistance - minDistance));
    
            // Изменяем прозрачность объекта в зависимости от нормализованного расстояния
            Color objectColor = objectRenderer.color;
            objectColor.a = 1f - normalizedDistance; // Инвертируем значение прозрачности
            objectRenderer.color = objectColor;
        }
    }


    Можно создать пустой объект, к нему прикрепить скрипт и задать в полях ссылки на объекты.

    Что нужно поучить - базу игрового движка (здесь в частности использование трансформа игровых объектов), почитать про векторы в юнити. Почитать про нормализованные векторы и векторную математику - крайне удобная практика. Ну и практика, практика и еще раз практика.

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

    Kentavr16
    @Kentavr16
    long cold winter
    Для нетребовательных проектов:
    1) вполне подойдет и 5, при возможности на вырост можно смотреть старшие модели.
    2) современные встройки подойдут, если не планируешь работать со сложным 3Д, рендером его в катсцены и т.д. Если сомневаешься, предпочтительна дискретки. Для простых проектов встройки хватит.
    3) для простого проекта 16 за глаза. Оперативная память не станет узким местом проекта. Чисто для удобства работы я бы лучше взял быстрые 16 чем посредстсвенные 32.
    Ответ написан
    1 комментарий
  • Персонаж не прыгает в unity3D! Почему?

    Kentavr16
    @Kentavr16
    long cold winter
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    
    {
        public float speed = 10f;
        public CharacterController controller;
        public Transform groundcheck;
        public float gravity;
        public LayerMask groundMask;
        Vector3 velocity;
        public bool isgrounded;
        public float groundDistance = 0.4f;
        public float jumpHeight = 3f;
    
        void Update()
        {
            isgrounded = Physics.CheckSphere(groundcheck.position, groundDistance, groundMask);
            if (isgrounded && velocity.y < 0)
            {
                velocity.y = -2f;
            }
    
            float x = Input.GetAxis("Horizontal");
            float z = Input.GetAxis("Vertical");
    
            Vector3 move = transform.right * x + transform.forward * z;
            controller.Move(move * speed * Time.deltaTime);
    
            velocity.y += gravity * Time.deltaTime;
            controller.Move(velocity * Time.deltaTime);
    
            if (Input.GetButtonDown("Jump") && isgrounded)
            {
                velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
            }
    
        }
    }

    что я и говорил - ты переписывал велосити. В этой вариации гравитаця - отрицательная величина. Все работает.
    Ответ написан
  • Как в Unity указать обьект переменной из другого скрипта в инспекторе из кода?

    Kentavr16
    @Kentavr16
    long cold winter
    уважаемый Киану, хочу пожелать вам удачи в последующих съемках и спасибо за пожелания. По делу - если мне нужно получить ссылку на игровой объект в процедурно генерируемом экземпляре префаба, я создаю публичное поле в родителе(!) который генерирует префаб, и уже при генерации префаба передаю нужные данные. Вот наглядный пример -
    //ссылка на игровой обьект
     public GameObject DigUiPanel;
    **** остальной код***
    //генерирую экземпляр 
     GameObject Layer = Instantiate(LayerPrefab, LayersStartPos.transform.position + layerCreatingDirection * i * offset, Quaternion.identity);
     Layer.transform.rotation = Quaternion.Euler(0, 0, 45);
     DigUI DigUIScript = Layer.GetComponentInChildren<DigUI>();
    //задаю созданному экземпляру ссылку на реальный игровой объект
     DigUIScript.DigUIPanel = DigUiPanel;

    Надеюсь что я правильно понял суть твоего вопроса.
    П.С. - главное помнить что Instantiate возвращает ссылку на новосозданный объект, который ты можешь свободно менять.
    Ответ написан
    1 комментарий
  • Почему не удается навесить слушатель на клик?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Проблема была в том, что я с помощью команды Debug.unityLogger.logEnabled = true; в одном из скриптов глушил спам от Adaptive Performance модуля. Убрал строку - лог работает. Видимо эта команда отсеивает некоторые логи, такие как вызываемые в рантайме. Нужно читать доки.
    Ответ написан
    Комментировать
  • Как создать полностью черную сцену в юнити 3д?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Все дело в запеченном глобальном освещении. в window->rendering->lighting снять галочку с baked global illumination и нажать generate lighting.
    Ответ написан
    Комментировать
  • Какое движение в движке лучше использовать и почему?

    Kentavr16
    @Kentavr16
    long cold winter
    Если хочешь нормального отрабатывания столкновений и взаимодействия с текстурами, то только физика. При транслейт текстуры не учитываются, и получишь баги/проваливания и т.д. то есть если в игре есть физика - используешь физику, все логично
    Ответ написан
    Комментировать
  • Как найти Vector2 позицию за объектом?

    Kentavr16
    @Kentavr16
    long cold winter
    Ответ написан
    Комментировать
  • Почему игрока выталкивает из стены, но пройти сквозь неё он может?

    Kentavr16
    @Kentavr16
    long cold winter
    для движения персонажа используй addForce а не transform, и будет счастье. Если ты хочешь физического поведения, используй физику. Транслейт просто пихает по траектории. addforce к компоненту rigidbody
    Ответ написан
    5 комментариев
  • Как правильно построить изучение Unity для разработки симулятора?

    Kentavr16
    @Kentavr16
    long cold winter
    Я прошел обучение на сайте юнити. На английском правда, но оно того стОит. Много материалов самых разнообразных. Познакомишься с основными механиками и пр. Обучение ОЧЕНЬ хорошее и материал хорошо структурирован. Дальше, после прохождения ветки junior сможешь сам отределить куда копать дальше. Крайне рекомендую.
    Ответ написан
    5 комментариев