c# - 如何限制对象的 Z 旋转
问题描述
我正在开发 2D 游戏,我有一个可以跳的对象。在刚体 2D 中,我冻结了 x 和 y,但没有冻结 z,并且我将脚本中的 z 限制为:
private void FixedUpdate() {
Vector3 euler = transform.eulerAngles;
if (euler.z > 180) euler.z = euler.z - 360;
{
euler.z = Mathf.Clamp(euler.z, -35, 35);
transform.eulerAngles = euler;
}
}
当玩家跳上它时它可以限制 z 但 y 和 x 正在改变。它飞出屏幕你知道为什么它会在 x 和 y 上移动,而它们被选中冻结在检查器上。如果我解冻 y,它适用于 z 旋转但 y 掉下来。有什么想法吗?
解决方案
我之前是个盲人。
问题似乎出在您的代码结构中。看if
声明。
if (euler.z > 180) euler.z = euler.z - 360;
{
euler.z = Mathf.Clamp(euler.z, -35, 35);
transform.eulerAngles = euler;
}
这不是你想的那样。让我们用不同格式但完全相同的代码重写:
if (euler.z > 180)
euler.z = euler.z - 360;
{
euler.z = Mathf.Clamp(euler.z, -35, 35);
transform.eulerAngles = euler;
}
这里实际发生的情况是,由于 if 语句后面的行不在大括号内,因此代码被解释为:
if (euler.z > 180) {
euler.z = euler.z - 360;
}
euler.z = Mathf.Clamp(euler.z, -35, 35);
transform.eulerAngles = euler;
从技术上讲,最后两行在不同的范围内,但这在这里并不重要。
尝试使用预期的结构重新格式化您的代码,并希望这样做。
推荐阅读
- angular - 如何通过组件传递 CDK 列和行定义
- java - SoftKeyboard Listener 检查键盘何时打开/关闭且 ProgressBar 正确运行
- javascript - 不等的 div 高度
- javascript - 如何从具有相同元素 ID 的 SVG 序列创建动画
- java - Jackson 如何决定从数值创建什么类型的 NumericNode
- html - 打印中重复表头时缺少下标或上标标记的内容
- c# - 创建用于 Web 应用程序连接字符串的数据库登录名
- ios - 无法按升序对表格视图数据进行排序
- php - 如何查看哪个类(控制器、方法..)调用模型保存、更新、创建
- javascript - 撇号在 JSON 字符串数组中转义