c# - 对象在成为游戏对象的子对象时变形
问题描述
我正在尝试制作一款游戏,您可以在其中控制移动平台并且必须抓住坠落的物体。为了让物体在你抓住它后随平台移动,我将这些物体设置为平台的子对象。问题是当对象成为平台的子对象后旋转时,它会变形。 在图像中,您可以看到对象已成为平台的子项。并且它在z轴上的旋转导致它变形。
解决方案
这是因为 的水平缩放platform也适用于 的所有后代platform。
由于平台没有祖先,您可以使用的一种解决方案是将每个对象包装到一个容器中,该容器取消由platform.
这是你如何做到的:
- 当一个对象与 碰撞时platform,创建一个我们可以调用的新游戏对象container。
- 使container有 a
localScale
是 of 的localScale
倒数platform。 - 做container一个孩子platform。
- 使对象成为 的子对象container。
以下是代码中的样子,附加到platform:
private void OnCollisionEnter2D(Collision2d collision)
{
// collision verification here...
// 1
GameObject container = new GameObject("container");
// 2
Vector3 myScale = transform.localScale;
container.transform.localScale = new Vector3(1f/myScale.x, 1f/myScale.y,
1f/myScale.z);
// 3
// use worldPositionStays=false to keep container's local position zero
// & no local rotation
container.transform.SetParent(transform, false);
// 4
collision.transform.SetParent(container);
// disable rigidbody on the object, etc. ...
}
这很简单,但是如果您更改了 的比例platform,则需要相应地更新localScale
every的container。
推荐阅读
- dart - 如何在 Flutter 中制作一个小圆角矩形
- google-chrome - Chrome 扩展:网络面板 - 需要禁用默认问号触发帮助行为
- r - 如何使用列表列(要映射)和 R 中的 id 映射数据框
- gnat - GprBuild 可以与 GNAT 一起使用来制作非 GPL 软件吗?
- python - TensorFlow 对象检测 API 和 utils 模块
- git - git add 修改的更改,不要忽略未跟踪的文件
- javascript - 这两种 JavaScript OOP Syntax 的用法有什么区别?
- typescript - TypeScript 在 for...of 中拒绝 Iterator
- python - 如何以合理的缓冲区大小有效地执行 read(),但在短读时提前返回
- c# - SQL / Visual Studio 搜索栏显示使用通配符