我正在制作一个 3D 星球漫游游戏。行星本身是 3D 的,但场景中的每个对象都是 2D 的。当玩家在地球上行走时,他们相对于北方的旋转会发生变化,因此,如果对象静态放置在场景中,有时对象会出现倒置。我基本上希望每个对象都与球体相切,同时仍保持其“直立性”。
Vector3 pos = transform.position;
Vector3 planetPos = Planet.transform.position;
Vector3 direction = (planetPos - pos).normalized; // Calculate Tangent
transform.rotation = Quaternion.Euler(direction);
transform.Rotate(new Vector3(90, 0, 0));
这里的代码使物体相对于行星旋转,但它不保持相对于玩家的方向。 我怎样才能让其他物体不出现颠倒? Spherical Billboarding
答案 0 :(得分:0)
你可以找到物体相对于世界的方向,并让物体看着那个方向。
public GameObject[] objs;
public Vector3 worldPos;
void Update()
{
foreach (GameObject obj in objs)
{
obj.transform.rotation = Quaternion.LookRotation(obj.transform.position - worldPos);
}
}
这会禁用物理,因此您可以添加更多:
public GameObject[] objs;
public Vector3 worldPos;
public gravityForce;
Vector3 gravity;
Quaternion look;
void Update()
{
foreach (GameObject obj in objs)
{
look = Quaternion.LookRotation(obj.transform.position - worldPos);
ChangeGravity(look, obj);
}
}
Rigidbody rb;
void ChangeGravity(Quaternion looking, GameObject obj)
{
gravity = new Vector3(looking.x, looking.y, looking.z);
gravity.Normalize();
gravity *= -gravityForce;
rb = obj.GetComponent<Rigidbody>();
rb.useGravity = false;
rb.AddForce(gravity);
}
这些未经测试,但第一个更有可能奏效。