Почему Slerp разворачивает персонажа не на те координаты

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Почему Slerp разворачивает персонажа не на те координаты

Сообщение DarkLight Games 05 апр 2021, 22:05

Здравствуйте
Есть код
Синтаксис:
Используется 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;
            Angle = Mathf.Atan2(CharacterPos.x, CharacterPos.y) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, -Angle - Offset), RotSpeed);
        }
        if (transform.position.y < CharacterPos.y)
        {
            CharacterPos = character.transform.position;
            TargetPos = transform.position;
            TargetPos.y -= 10;
            Angle = Mathf.Atan2(TargetPos.x, TargetPos.y) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(0, 0, -Angle - Offset), RotSpeed);
        }
    }
}
 

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

Re: Почему Slerp разворачивает персонажа не на те координаты

Сообщение seaman 05 апр 2021, 23:36

Видимо потому что Offset
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Почему Slerp разворачивает персонажа не на те координаты

Сообщение Alkos26Rus 06 апр 2021, 00:22

И видимо из за этого TargetPos.y -= 10;
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Почему Slerp разворачивает персонажа не на те координаты

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

seaman писал(а):Видимо потому что Offset

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

Re: Почему Slerp разворачивает персонажа не на те координаты

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

Alkos26Rus писал(а):И видимо из за этого TargetPos.y -= 10;

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

Re: Почему Slerp разворачивает персонажа не на те координаты

Сообщение TeslaGan 06 апр 2021, 10:11

вы поворачиваетесь не на персонажа, а на точку, где бы он находился, будь ваш объект в нулевых координатах. потому координаты надо смещать простым
CharacterPos - transform.position
p.s. разве нельзя обойтись без тангенса чем-то подобным?(все эти компоненты из mathf были ужасно оптимизированы)
Синтаксис:
Используется csharp
        Vector3 CharacterPos = character.position - transform.position;
        CharacterPos.y = 0;
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(CharacterPos), RotSpeed);
TeslaGan
UNITрон
 
Сообщения: 315
Зарегистрирован: 01 авг 2015, 18:00

Re: Почему Slerp разворачивает персонажа не на те координаты

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

Я уже всё исправил, ошибка была в Atan2
DarkLight Games
UNец
 
Сообщения: 26
Зарегистрирован: 15 фев 2021, 09:03


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 26