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

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

СообщениеДобавлено: 05 апр 2021, 22:05
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;
            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 персонаж долежн разворачиваться на координаты игрока, но часто он смотрит мимо. Почему и как это исправить?

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

СообщениеДобавлено: 05 апр 2021, 23:36
seaman
Видимо потому что Offset

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

СообщениеДобавлено: 06 апр 2021, 00:22
Alkos26Rus
И видимо из за этого TargetPos.y -= 10;

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

СообщениеДобавлено: 06 апр 2021, 07:11
DarkLight Games
seaman писал(а):Видимо потому что Offset

Так Offset нужен для правильного доворота, без него смотрит вообще не туда

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

СообщениеДобавлено: 06 апр 2021, 07:13
DarkLight Games
Alkos26Rus писал(а):И видимо из за этого TargetPos.y -= 10;

Это используется когда надо смотреть тупо вниз, если Y игрока больше Y этого персонажа

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

СообщениеДобавлено: 06 апр 2021, 10:11
TeslaGan
вы поворачиваетесь не на персонажа, а на точку, где бы он находился, будь ваш объект в нулевых координатах. потому координаты надо смещать простым
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);

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

СообщениеДобавлено: 06 апр 2021, 10:44
DarkLight Games
Я уже всё исправил, ошибка была в Atan2