Задать вопрос
  • Как включать/отключать коллайдеры в определённом радиусе?

    Zefirot
    @Zefirot Автор вопроса
    из-за мешей была проблема, нашел способ их слияния с помощью CombineMeshes, с фпсом теперь проблем нет, осталось найти нечто подобное но для коллайдеров....
  • Как включать/отключать коллайдеры в определённом радиусе?

    Zefirot
    @Zefirot Автор вопроса
    посчитал сколько у меня сейчас коллайдеров, всего-то 6 домов стоит и это уже 7000 кирпичей (префабов коллайдеров)
  • Как включать/отключать коллайдеры в определённом радиусе?

    Zefirot
    @Zefirot Автор вопроса
    GavriKos,
    А потом уже распиливать
    ну то есть мне нужно сначала склеить как-то мелкие коллайдеры в один большой (стену), а потом при попадании у как-то распилить...
    как это сделать?
    Здается мне в ассетсторе можно найти плагин под это дело.

    не припомните как он примерно называется?
  • Как включать/отключать коллайдеры в определённом радиусе?

    Zefirot
    @Zefirot Автор вопроса
    проверил просто отключить все коллайдеры на сцене... тормозит так же...

    Объект с которым надо взаимодействовать один?

    допустим кирпичные дома, иногда в них кидается шар которых их разрушает, вот и получается что так коллайдеры не нужны а только когда в них летит шар (может шары, но не суть)

    но тут есть бескрайнее поле для оптимизации.

    например? посоветуйте в какою сторону копать?

    Ну и может ECS чем поможет.

    с этим не сталкивался но посмотрев поверхностно пока не сильно понял сути, контейнеры для групп объектов или что-то такое... (почитаю конечно если это то что мне нужно)
  • Как создавать построение и разрушение?

    Zefirot
    @Zefirot Автор вопроса
    Хотел провести тест с разрушением стены и столкнулся с такой проблемой - стена из кирпичей не стоит...
    https://www.youtube.com/watch?v=BJavpsfIuYI
    Кирпичи все установлены ровно, в теории должны лежать друг на друге, а они вот падают, почему? как их сделать чтобы они лежали под тяжестью?
  • Как создавать построение и разрушение?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, а если в области много таких таких объектов и лучше (как я думаю) отключать коллайдеры и rigidbody если нет на сцене объектов которые могли бы привести их в движение, то как лучше это сделать? при появлении такого объекта (например кто-то выстрелил ядром) включать в допустимом радиусе элементы, или рассчитывать на возможно поражаемые, или сами кирпичики как префабы чтобы в апдейте проверяли не приближается что-то к ним?

    Я думаю если все объекты будут с коллайдерами и с телами то это будет очень накладно, да и при том что разрушения не так часто будут...
  • Что делать чтобы персонаж не зависал на краю?

    Zefirot
    @Zefirot Автор вопроса
    Касательно параметров я смотрел что каждый означает, так же их крутил, изменения Slope Limit ничего не даёт, это же возможный угол по которому можно подыматься...
    Кубический тригер возможно поможет(как в марио)

    не понял каким образом, я пробовал радиус уменьшить у контроллера и это помогало нормально падать, но тогда я проваливался в стены, дабы не проваливаться я пробовал дополнительно коллайдер прикрепить, но это не помогало...
  • Где найти такой скрипт контроллер top down?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, лучше один раз показать, вот один из тестов моих
    https://www.youtube.com/watch?v=7sR9CYvmgTk
  • Где найти такой скрипт контроллер top down?

    Zefirot
    @Zefirot Автор вопроса
    KraGen, потому что нужно, задумка такая...
    Касательно лёгкого - если без управления мышкой а только стрелками то всё получается, а вот с мышкой у меня всё путается, по сути я не могу понять как должна вообще выглядеть схема дерева анимаций и какие анимации там должны использоваться...
    в уроках видел что у одного использовалось 3 анимации, у другого 5 анимаций, на одном из форумов там один показал схему 8ю, но у всех либо не доделано, либо катаются как на льду, и никак не могу определиться как оно должно выстраиваться, а то что я с мышкой делаю получается катание на льду...
  • Как откалибровать направление модели?

    Zefirot
    @Zefirot Автор вопроса
    касательно луча то он у меня реализован через LineRenderer, точки А это конец самого прицела и В это та же точка только Y + 80, то есть от него идёт прямая линия на уровне глаз, то есть мне нужно чтобы прицел целился не в пол а в сам луч? подскажите как?
  • Как сделать плавнее повороты при движении объекта?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, вот полный метод движения на данный момент
    void Update(){
            BotMove();
            }
        float BotSpeed = 3f;
        float JumpHeight = 7f;
        float Gravity = 20f;
        Vector3 MoveDirection = Vector3.zero;
        GameObject BotObject;
        Animator BotAnimator;
        CharacterController BotController;
        float InputGetAxisVertical{ get { return Input.GetAxis("Vertical"); }}
        float InputGetAxisHorizontal{ get { return Input.GetAxis("Horizontal"); }}
        void BotMove(){
            BotAnimator.SetBool("Grounded", BotController.isGrounded);
            MoveDirection = new Vector3(InputGetAxisHorizontal, 0.0f, InputGetAxisVertical) * BotSpeed;
            if(BotController.isGrounded){
                if(InputGetAxisVertical == 0f && InputGetAxisHorizontal == 0f){ BotSpeed = 0f; }
                    else{
                        if(Input.GetKey(KeyCode.LeftShift)){ BotSpeed = 6f; }else{ BotSpeed = 3f; }
                        Quaternion BotTargetAngle = Quaternion.LookRotation(MoveDirection);
                        BotObject.transform.rotation = Quaternion.Slerp(BotObject.transform.rotation, BotTargetAngle, 2f);
                        }
                BotAnimator.SetBool("Jump", false);
                BotAnimator.SetBool("FreeFall", false);
                if(Input.GetButton("Jump")){
                    MoveDirection.y = JumpHeight;
                    BotAnimator.SetBool("Jump", true);
                    }
                }else if(MoveDirection.y < - 5f){ BotAnimator.SetBool("FreeFall", true); }
            MoveDirection.y -= Gravity * Time.deltaTime;
            BotController.Move(MoveDirection * Time.deltaTime);
            BotAnimator.SetFloat("Speed", BotSpeed);
            BotAnimator.SetFloat("MotionSpeed", 1f);
            }
  • Как сделать плавнее повороты при движении объекта?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, сделал лерпом и по сути убил друг зайцев, уже плавно поворачивается и как раз из-за плавности невидно скольжения, в общем то что нужно, но есть одна маленькая проблемка - если идти наискось то после остановки поворачивается в одну из сторон, то есть иду вверх и влево а при остановке поворачивается вверх, либо иду вниз и направо а при остановке смотрит вправо, подскажите как подправить?
    Vector3 direction = new Vector3(InputGetAxisHorizontal, 0.0f, InputGetAxisVertical) * BotSpeed;
    Quaternion rotGoal = Quaternion.LookRotation(direction);
    PlayerObject.transform.rotation = Quaternion.Slerp(PlayerObject.transform.rotation, rotGoal, 2f);
  • Как сделать плавнее повороты при движении объекта?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, как будто на льду при повороте заносит, то есть не сразу вверх бежит а еще немного в сторону...
  • Почему персонаж подымается по стене при прыжке?

    Zefirot
    @Zefirot Автор вопроса
    изменил логику проверки
    private void OnCollisionEnter(Collision collision){ if(collision.gameObject.tag == "Ground"){ Grounded = true; }}
    private void OnCollisionExit(Collision collision){ if(collision.gameObject.tag == "Ground"){ Grounded = false; }}

    прилипания нет теперь, но если упираться в стену и прыгать то происходит микро-прыжок, если прыгать возле стены то отталкивает от стены.
    Но даже так такой подход в моём случае не подходит, у меня могут разрушаться дома, а то есть любое строение может быть полом в итоге....
  • От чего не переключается анимация?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, хм а вот докопался и всё же нашел что нужно
    https://docs.unity3d.com/ru/530/Manual/class-Avata...
    можно отключить части тела в той же анимации всё же, работает...
  • От чего не переключается анимация?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, кстати так между делом - а можно как-то "отрезать" по частям анимацию, ну например чтобы всё работало а вот голову не задевало, либо вообще анимация работала только на ноги?
  • От чего не переключается анимация?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, всё дошло как это работает, сделал, спасибо.
  • От чего не переключается анимация?

    Zefirot
    @Zefirot Автор вопроса
    freeExec, а это где смотреть?
    я еще не совсем ориентируюсь где что, у меня вот такая схема, ну а скрипт выше
    62a0cf2b31396086919718.jpeg
  • Как правильно сделать управление по типу шутеров?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, заменил
    PlayerModel.transform.Rotate(0, MoveHeadX * Time.deltaTime, 0);
    // на
    PlayerModel.transform.localRotation = Quaternion.Euler(0, MoveHeadX, 0);

    оно, спасибо.
  • Как правильно сделать управление по типу шутеров?

    Zefirot
    @Zefirot Автор вопроса
    Eugene, получается вперёд/назад он у меня правильно ходил, влево/вправо он у меня поворачивался, а нужно было чтобы именно шаг влево/вправо делал, это я подправил, заменил
    private void MoveCamera(){
            PlayerModel.transform.Translate(0, 0, InputGetAxisVertical * Time.deltaTime);
            PlayerModel.transform.Rotate(0, InputGetAxisHorizontal * Time.deltaTime, 0);
            }
    // на
    private void MoveCamera(){
            PlayerModel.transform.Translate(0, 0, InputGetAxisVertical * Time.deltaTime);
            PlayerModel.transform.Translate(InputGetAxisHorizontal * Time.deltaTime, 0, 0);
            }

    то есть с кнопками WASD разобрался, теперь мышка, вверх/вниз она у меня правильно работает, а вот влево/вправо она должна поворачивать направление персонажа, я заменил
    private void AimCamera(){
            if(Input.GetMouseButton(0)){
                MoveHeadY -= InputGetAxisMouseY;
                MoveHeadY = Mathf.Clamp(MoveHeadY, -40f, 40f); 
                MoveHeadX += InputGetAxisMouseX;
                MoveHeadX = Mathf.Clamp(MoveHeadX, -75f, 75f); 
                PlayerHeadCharacterController.transform.localRotation = Quaternion.Euler(MoveHeadY, MoveHeadX, 0f);
                }
            }
    // на
    private void AimCamera(){
            if(Input.GetMouseButton(0)){
                MoveHeadY -= InputGetAxisMouseY;
                MoveHeadY = Mathf.Clamp(MoveHeadY, -40f, 40f); 
                MoveHeadX += InputGetAxisMouseX;
                PlayerModel.transform.Rotate(0, MoveHeadX * Time.deltaTime, 0);
                PlayerHeadCharacterController.transform.localRotation = Quaternion.Euler(MoveHeadY, 0, 0f);
                }
            }

    Почти то но не то, а именно должно быть так - мышь двинул влево и пока её двигаешь и двигается камера и с той же скоростью а при остановке мыши останавливается и камера, а у меня получилось что мышь двинул и остановил а камера плывёт дальше, вот тут пока что загвоздка...