我正在制作一个三维星球漫游游戏。这个星球本身是三维的,但是场景中的每一个物体都是二维的。当玩家在地球上行走时,他们的自转相对北移,因此,如果物体被静态地放置在场景中,有时物体会出现倒转。基本上,我希望每一个物体都切入球体,同时保持它的“直立性”。
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));
这里的代码相对于行星旋转物体,但它不保持相对于玩家的是方向。如何才能使其他对象不被颠倒显示?球形标牌
发布于 2021-06-16 16:36:03
你可以找到物体相对于世界的方向,然后让物体去观察它。
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);
}
这些都是未经测试的,但第一个更有可能奏效。
https://stackoverflow.com/questions/68005683
复制相似问题