unity3d - 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));
这里的代码相对于行星旋转对象,但它不保持相对于玩家的方向。我怎样才能让其他物体不倒置? 球形广告牌
解决方案
您可以找到对象相对于世界的方向,并让对象看着那个方向。
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);
}
这些未经测试,但第一个更有可能起作用。
推荐阅读
- python - 以 0 到 26 之间的整数计算“九”、“三”和“一”的个数
- javascript - 你好。如何在页面上显示 100 个结果 https://steamcommunity.com/market/search?appid=730
- spartacus-storefront - 3.x 版本中的 SSR 问题
- gradient - boosting回归中如何增加观察权重
- google-tag-manager - 在同一页面上的多个标签管理器容器上使用同意触发器
- python - 比“查询”更方便的方法是选择多索引行,通过索引级别的名称指定部分标签?
- c++ - 有没有办法在 Dev C++ 中启用 UNICODE 格式
- python-telegram-bot - 使用 python 使用电报机器人创建内联菜单
- r - 用 fable 包中的新训练数据重新拟合 arima 模型
- javascript - 使用 DevTools 进行高级跟踪和调试 JavaScript