首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“统一”中的“球体广告牌”

“统一”中的“球体广告牌”
EN

Stack Overflow用户
提问于 2021-06-16 15:25:55
回答 1查看 23关注 0票数 0

我正在制作一个三维星球漫游游戏。这个星球本身是三维的,但是场景中的每一个物体都是二维的。当玩家在地球上行走时,他们的自转相对北移,因此,如果物体被静态地放置在场景中,有时物体会出现倒转。基本上,我希望每一个物体都切入球体,同时保持它的“直立性”。

代码语言:javascript
运行
复制
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));

这里的代码相对于行星旋转物体,但它不保持相对于玩家的是方向。如何才能使其他对象不被颠倒显示?球形标牌

EN

回答 1

Stack Overflow用户

发布于 2021-06-16 16:36:03

你可以找到物体相对于世界的方向,然后让物体去观察它。

代码语言:javascript
运行
复制
public GameObject[] objs;
public Vector3 worldPos;

void Update()
{
    foreach (GameObject obj in objs)
    {
        obj.transform.rotation = Quaternion.LookRotation(obj.transform.position - worldPos);
    }
}

这将禁用物理功能,因此可以添加更多内容:

代码语言:javascript
运行
复制
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);
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68005683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档