Как исправиьть замедление персонажа

Общие вопросы о Unity3D

Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 07:16

Здравствуйте, у меня такой вопрос
Есть строчка кода rb.MovePosition(transform.position + TargetPos.normalized * Speed);
Она должна обеспечивать равномерное движение персонажа, но по приближении к игроку он замедляется. Я не могу понять в Чём ошибка.
До этого пробовал так transform.Translate(TargetPos.normalised * Speed), результат почти тот же.
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение 1max1 04 апр 2021, 09:38

TargetPos это должно быть дельтой позиций, то бишь (TargetPos - startPosition).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 09:47

У меня TargetPos равен позиция игрока - позиция этого персонажа. Двигается он в нужную сторону, проблемма в том, что чем ближе персонаж к игроку, тем медленнее он двигается, и я не знаю как это исправить.
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение waruiyume 04 апр 2021, 09:49

Не идти вниз?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 09:51

Персонаж должен двигаться с одной скоростью вместо того чтобы замедляться
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение waruiyume 04 апр 2021, 10:20

Если 2 объекта находятся не на одной координате по оси Y(спойлер: это практически невозможно), то вектор движение будет под наклоном в землю/небо, и чем ближе пес к точке назначении и больше разница в высоте, тем сильнее будет заваливаться вектор движения.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 10:32

У меня уже были подобные мысли, спасибо за совет
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 10:40

А тогда ещё один вопрос: как сделать чтобы этот персонаж смотрел на игрока и разворачивался плавно, а не мгновенно?
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение 1max1 04 апр 2021, 10:53

Твой код должен быть таким:
Синтаксис:
Используется csharp
rb.MovePosition(transform.position + (TargetPos - transform.position).normalized * Speed);

Второй вопрос гуглится изи https://forum.unity.com/threads/smooth-look-at.26141/
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 13:39

Попробовал через Slerp, он просто разворачивается на какой-то градус и так и остаётся, хотя угол вращения пересчитывается каждое обновление метода FixedUpdate
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение Alkos26Rus 04 апр 2021, 14:17

DarkLight Games писал(а):Попробовал через Slerp, он просто разворачивается на какой-то градус и так и остаётся, хотя угол вращения пересчитывается каждое обновление метода FixedUpdate

Вставляй код как ты делаешь, а то ты заявляешь и мы должны верить на слово что якобы Slerp не работает, скорей всего ты просто не правильно его используешь
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как исправиьть замедление персонажа

Сообщение DarkLight Games 04 апр 2021, 14:34

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SturmVirusRotateScript : MonoBehaviour
{
    Vector3 StartPos;
    Vector3 CharacterPos;
    Vector3 TargetPos;
    Quaternion Rotation;
    float Angle;
    [SerializeField] float Offset;
    [SerializeField] float RotSpeed;
    GameObject character;


    private void Start()
    {
        character = GameObject.Find("Character");
        StartPos = this.transform.position;
        CharacterPos = character.transform.position;
        TargetPos = CharacterPos - StartPos;
    }

    private void FixedUpdate()
    {
        if (transform.position.y >= CharacterPos.y)
        {
            CharacterPos = character.transform.position;
            TargetPos = CharacterPos - transform.position;
            Angle = Mathf.Atan2(TargetPos.x, TargetPos.y) * Mathf.Rad2Deg;
            Rotation = new Quaternion(0, 0, -Angle - Offset, transform.rotation.w);
            transform.rotation = Quaternion.Slerp(transform.rotation, Rotation, RotSpeed);
        }
        if (transform.position.y < CharacterPos.y) // не доделано
        {
            CharacterPos = character.transform.position;
            TargetPos = CharacterPos - StartPos;
            Angle = Mathf.Atan2(TargetPos.x, TargetPos.y) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0, 0, -Angle - Offset);
        }
    }
}
 
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03

Re: Как исправиьть замедление персонажа

Сообщение Alkos26Rus 04 апр 2021, 15:23

Синтаксис:
Используется csharp
 private void FixedUpdate()
{
            CharacterPos = character.transform.position;
            TargetPos = CharacterPos - transform.position;
            Angle = Mathf.Atan2(TargetPos.x, TargetPos.y) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, -Angle - Offset), RotSpeed);
}
 

И убери пока условие if (transform.position.y >= CharacterPos.y) и вторую часть кода которая недоделана а просто протесть вот эту часть кода, скорость возможно нужно уменьшить если сильно быстро поворачивается. Потом уже добавляй свои условия когда сам поворот будет работать, мало ли может у тебя условие не срабатывает
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1640
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13


cron