Страница 1 из 1

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

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

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

СообщениеДобавлено: 04 апр 2021, 09:38
1max1
TargetPos это должно быть дельтой позиций, то бишь (TargetPos - startPosition).

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

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

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

СообщениеДобавлено: 04 апр 2021, 09:49
waruiyume
Не идти вниз?

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

СообщениеДобавлено: 04 апр 2021, 09:51
DarkLight Games
Персонаж должен двигаться с одной скоростью вместо того чтобы замедляться

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

СообщениеДобавлено: 04 апр 2021, 10:20
waruiyume
Если 2 объекта находятся не на одной координате по оси Y(спойлер: это практически невозможно), то вектор движение будет под наклоном в землю/небо, и чем ближе пес к точке назначении и больше разница в высоте, тем сильнее будет заваливаться вектор движения.

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

СообщениеДобавлено: 04 апр 2021, 10:32
DarkLight Games
У меня уже были подобные мысли, спасибо за совет

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

СообщениеДобавлено: 04 апр 2021, 10:40
DarkLight Games
А тогда ещё один вопрос: как сделать чтобы этот персонаж смотрел на игрока и разворачивался плавно, а не мгновенно?

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

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

Второй вопрос гуглится изи https://forum.unity.com/threads/smooth-look-at.26141/

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

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

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

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

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

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

СообщениеДобавлено: 04 апр 2021, 14:34
DarkLight Games
Синтаксис:
Используется 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);
        }
    }
}
 

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

СообщениеДобавлено: 04 апр 2021, 15:23
Alkos26Rus
Синтаксис:
Используется 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) и вторую часть кода которая недоделана а просто протесть вот эту часть кода, скорость возможно нужно уменьшить если сильно быстро поворачивается. Потом уже добавляй свои условия когда сам поворот будет работать, мало ли может у тебя условие не срабатывает