Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class playerOnPlanet : MonoBehaviour
{
public GameObject planet;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
void FixedUpdate()
{
Vector3 p = transform.position;
Vector3 pl = planet.transform.position;
if((p-pl).magnitude<planet.transform.localScale.x*0.5f+20)
{
Quaternion q = Quaternion.FromToRotation(Vector3.up,(p-pl));
Quaternion newq = q*Quaternion.AngleAxis(transform.rotation.eulerAngles.y,Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation,newq,0.5f);
}
}
}
using System.Collections;
public class playerOnPlanet : MonoBehaviour
{
public GameObject planet;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
void FixedUpdate()
{
Vector3 p = transform.position;
Vector3 pl = planet.transform.position;
if((p-pl).magnitude<planet.transform.localScale.x*0.5f+20)
{
Quaternion q = Quaternion.FromToRotation(Vector3.up,(p-pl));
Quaternion newq = q*Quaternion.AngleAxis(transform.rotation.eulerAngles.y,Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation,newq,0.5f);
}
}
}
При движении по прямой от полюса начинает разворачивать на 90 градусов, ориентируя вдоль экватора.
Как это можно исправить?
[РЕШЕНО ДЛЯ СФЕР БОЛЬШОГО РАДИУСА, ~500 И БОЛЕЕ]