为啥我的脚本(旨在在游戏开始时消除重力)不起作用?

Posted

技术标签:

【中文标题】为啥我的脚本(旨在在游戏开始时消除重力)不起作用?【英文标题】:Why does my script, which aims to remove gravity when the game starts, not work?为什么我的脚本(旨在在游戏开始时消除重力)不起作用? 【发布时间】:2019-07-04 16:47:24 【问题描述】:

我正在尝试在 Unity 中创建一个脚本,其中当游戏开始时重力将归零。问题是,我启动游戏后重力还在。

这是针对 Unity3D 游戏的。我已经尝试更改变量名称,添加 using System; 并将我的脚本移动到 Rigidbody 组件的顶部,但这些都不起作用。

public class PlayerGrav : MonoBehaviour

    public Rigidbody rb;
    void Start()
    
        rb.useGravity = false;
    

    void Update()
    

    

本以为游戏启动时重力会被移除,但实际输出中重力仍然存在,立方体仍然向下坠落。

【问题讨论】:

这很奇怪,您确定将正确的对象拖到公共字段吗? “将我的脚本移动到刚体组件的顶部”是什么意思?也许您的脚本通过刚体附加到游戏对象?如果是这样,您应该从游戏对象访问刚体: gameObject.GetComponent().useGravity = false; 它可能会在调用之前获得一个速度......你可以尝试另外设置rb.velocity = Vector3.zero;你也可以使用Physics.gravity = Vector3.zero;(docs.unity3d.com/ScriptReference/Physics-gravity.html)设置全局重力 【参考方案1】:

我知道这是一个老问题,但我一直在寻找答案。我是 Unity 新手,所以我花了很长时间才弄清楚,但我使用的是 Rigidbody 2d,所以这对我有用

gameObject.GetComponent<Rigidbody2D>().gravityScale = 0;

【讨论】:

【参考方案2】:
    创建一个新场景 创建一个new cube 在您的 PlayerGrav 脚本中将 rb = this.GetComponent&lt;Rigidbody&gt;() 添加到您的启动函数中 将您的 PlayerGrav 脚本附加到 new cube 点击播放,查看new cube 的检查器窗口中的“使用重力”属性(确保检查器未锁定到其他游戏对象)

如果上述试运行成功,那么您需要检查原始场景中的其他代码/对象。如果您的原始场景中有大量其他对象,那么我建议先禁用其他对象,然后逐组重新启用它们,以查看导致问题的对象/单一对象。

【讨论】:

以上是关于为啥我的脚本(旨在在游戏开始时消除重力)不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的简单 if 语句不起作用?

为啥我的带有“$(this).next”的 JavaScript/jQuery 脚本不起作用?

为啥 button.click() 在我的脚本中不起作用?

为啥即使包含所有脚本引用,我的 jQuery-UI 对话框也不起作用?

为啥我的 Google Maps API 请求在服务器上运行时不起作用

为啥 libnds 中的 keysDownRepeat() 在多次调用时似乎不起作用?