首页 > 解决方案 > Unity 中的“球形广告牌”

问题描述

我正在制作一个 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));

这里的代码相对于行星旋转对象,但它不保持相对于玩家的方向。我怎样才能让其他物体不倒置? 球形广告牌

标签: unity3d

解决方案


您可以找到对象相对于世界的方向,并让对象看着那个方向。

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);
}

这些未经测试,但第一个更有可能起作用。


推荐阅读