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