Ответы пользователя по тегу Unity
  • Как повернуть объект в сторону его движения?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    transform.right = moveSpots[randomSpot].position - transform.position;
    Ответ написан
    Комментировать
  • Как перемещать gameObject по тегу?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Я бы избавился от тега. Даже если префабы разные, но сущность одна, нужно создать абстракцию, и искать по ней

    public abstract class Player : MonoBehaviour
            {
                
            }
            
            public class PlayerA : Player
            {
                
            }
            
            public class PlayerB : Player
            {
                
            }


    Но даже такой подход плох. Лучше создать отдельный класс который будет знать и о карте и о игроке, и давать карте игрока когда тот существует, и говорить карте не отображать игрока когда его убили.
    Ответ написан
    Комментировать
  • Как переделать Task в UniTask?

    PragmaGames
    @PragmaGames Автор вопроса
    Увлекаюсь Unity.
    private async UniTask PlayAsyncUniTask()
    {
         var token = new CancellationTokenSource();
    
         Play(() =>
         {
                token.Cancel();
                token.Dispose();
         });
                
         await UniTask.WaitUntilCanceled(token.Token);
    }
    Ответ написан
    Комментировать
  • Как я могу создать несколько рэйкастов для одного объекта?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Ты можешь использовать Physics.OverlapSphere. Дальность рейкаста будет дальностью видимости персонажа в твоем случае. После из всех полученных объектов найдешь тех которые попадают в поле видимости.

    private bool IsVisibleTarget(Vector3 target)
    {
           directionToTarget = (target - myTransform.position).normalized;
           return Vector3.Angle(entityTransform.forward, directionToTarget) < _viewAngle / 2;
    }


    _viewAngle угол обзора твоего персонажа.

    Я думаю такой метод самый оптимальный.

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

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Ты можешь посмотреть сетку в режиме Wireframe. Можешь попробовать использовать стандартные функции оптимизации меша Mesh.Optimize(). В ProBuilder это хорошо реализовано.
    Ответ написан
    Комментировать
  • Как определит сторону на которую упал 3d объект?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    private void OnCollisionEnter(Collision other)
        {
            var normal = other.GetContact(0).normal;
        
            var collisionTransform = other.transform;
        
            if (normal == collisionTransform.up)
            {
                Debug.Log("Top");
            }
            
            if (normal == -collisionTransform.up)
            {
                Debug.Log("Down");
            }
            
            if (normal == collisionTransform.right)
            {
                Debug.Log("Right");
            }
            
            if (normal == -collisionTransform.right)
            {
                Debug.Log("Left");
            }
            
            if (normal == collisionTransform.forward)
            {
                Debug.Log("forward");
            }
    
            if (normal == -collisionTransform.forward)
            {
                Debug.Log("back");
            }
        }
    Ответ написан
    Комментировать
  • Почему не стартует корутина?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Ты каждый FixedUpdate() стартуешь карутину, не делай так.
    Ответ написан
    5 комментариев
  • Почему Rigidbody вращается по замороженным осям?

    PragmaGames
    @PragmaGames Автор вопроса
    Увлекаюсь Unity.
    При присоединении коллайдера пересчитывается Rigidbody.inertiaTensor, поэтому его стоит выставить вручную, если необходим кастомный поворот.
    Ответ написан
    Комментировать
  • Как заставить отработать событие OnTriggerExit?

    PragmaGames
    @PragmaGames Автор вопроса
    Увлекаюсь Unity.
    Перед отключение объекта нужно сделать Rigidbody.detectCollisions = false, при включении true.
    Ответ написан
    Комментировать
  • Передвижение игрока через анимацию?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Движение через анимацию гораздо более тяжеловесное, налагает кучу ограничений и тд. Особенно когда дело дойдет до смешивания анимаций и применении масок. Самая банальная проблема что кодом ты можешь двигать персонажа в любую точку пространства. А анимация постоянно фиксированная и что бы сдвинуть персонажа например на 1/2 от полного цикла анимации придеться просчитывать время и останавливать анимацию в нужный момент что само собой сломает само отображение анимации
    Ответ написан
    Комментировать
  • Как лучше делать массовый апдейт?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Второй способ лучше.
    Ответ написан
    Комментировать
  • О чего могут быть критические фризы?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Так как на одних устройствах все работает хорошо, а на других замечены провисания могу предположить что дело в графических API. И провисание идет из-за Device.pressent или Semaphore.WaitForSignal.

    Edit > Project Settings > Player
    Посмотри стоит ли галка на Auto Graphics API
    Если не стоит поставь
    Ответ написан
    1 комментарий
  • Как записать движения персонажа в unity2D?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Самый наивный вариант это сделать очередь из Transform и записывать каждое изменение позиции игрока в эту очередь. Потом когда нужно воспроизводить действие извлекаем элементы и передаем в вашу функцию движения. Данный вариант брошен навскидку и имеет ряд недостатков, один из них потребляемая память на хранения всех позиций. Улучшить его можно тем что мы будем сохранять ключевые позиции игрока, а промежуточные данные генерировать исходя от того откуда идем , куда идем и каким образом. Пример ключевых позиций : персонаж начал идти , потом перешел на бег, закончил бег, начало прыжка, пиковая позиция прыжка, приземление.

    Transform player;
    Queue<Transform> positions;
    
    private void Start()
    {
         player = GetComponent<Transform>();
         positions = new Queue<Transform>();
    }
    
    private void Update()
    {
        Move()
    }
    
    private void Move()
    {
         // move
        positions.Enqueue(player.transform);
    }
    Ответ написан
    4 комментария
  • Как сбросить Аниматор в дефолтное состояние?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    Спустя столько лет... )

    Аниматор .keepAnimatorControllerStateOnDisable = false;

    Но я думаю в вашем случае поможет как раз таки обратное

    .keepAnimatorControllerStateOnDisable = true;
    Ответ написан
    Комментировать
  • Почему после переактивации объекта, Animator стал работать некорректно?

    PragmaGames
    @PragmaGames Автор вопроса
    Увлекаюсь Unity.
    Я неожиданно нашел ответ. Решение заключается в том что бы сохранить параметры аниматора после его отключения, я не понимаю почему оно работает, но работает. Если кто-то понимает как это устроено буду рад услышать !

    private void Start()
    {
         _playerAnimator.keepAnimatorControllerStateOnDisable = true;
    }
    Ответ написан
    Комментировать
  • Мерцает спрайт персонажа когда попадает на другой спрайт?

    PragmaGames
    @PragmaGames
    Увлекаюсь Unity.
    В компоненте SpriteRenderer увеличьте параметр Order in Layer, так что бы он был больше чем у другого спрайта.
    Ответ написан
    2 комментария