Unity 中的“球形广告牌”

时间:2021-06-16 15:25:55

标签: unity3d

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

1 个答案:

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

这些未经测试,但第一个更有可能奏效。

相关问题