c# - 为什么我的角色没有随着这个代码移动?

标签 c# unity3d

我将我的角色粘贴到一个空对象上并将刚体应用到该空对象的脚本(以更改枢轴);然而,这个角色并没有随着这个代码移动:

public class main_character : MonoBehaviour
{
    public float speed;

    private float max_vel = 4f;
    private bool grounded = true;
    private bool flip = true;
    private Rigidbody2D main_vel;

    private void Awake()
    {
        main_vel = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
        float now_vel = Mathf.Abs(main_vel.velocity.x);

        if (Input.GetKey("d") && flip)
        {
            flip_side();
            if (now_vel < max_vel)
            {
                main_vel.AddForce(new Vector2(speed, 0f) * Time.deltaTime);
            }
        }
        if(Input.GetKey("a") && !flip)
        {
            !flip_side();
            if (now_vel < max_vel)
            {
                main_vel.AddForce(new Vector2(-speed, 0f) * Time.deltaTime);
            }
        }
    }


    void flip_side()
    {
        flip = !flip;
        transform.Rotate(0f, 180f, 0f);
    }
}

最佳答案

你要么需要在类的顶部添加一个速度值,要么动态生成它。我还会在速度设置为零时按下按钮时捕获异常或调试。 如果速度加快,您将需要构建它或在更新中调用它,并根据增量时间给它一个初始速度+速度。我也会将它限制在最大速度,因为它可以防止游戏引擎跟踪大值。

--关于空父的情况,如果没有物理组件,子应该保留其父的运动。话虽这么说,你必须有一个刚体来增加力量。您看起来可能正在使用 2d,所以我对这些刚体的经验较少,但我想它必须不是运动学的才能像您一样接受力。检查之后,我可能会添加一些调试,从你的 max_vel 检查中发布你的 vector2 和速度。

关于c# - 为什么我的角色没有随着这个代码移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68052205/

相关文章:

audio - 时间流逝的声音交替

c# - 使用 WWW 类加载多个外部纹理

c# - 如何在lambda表达式的select方法中编写多个语句

c# - System.DateTime 客户端依赖吗?

opencv - Unity3D——OCR数字识别

c# - Unity 中的相机 Controller

android - 每次构建都将痛苦的 Unity 项目导出到 Android(我做错了什么)

c# - Streamreader readline阻塞tcp许多客户端c#

c# - 在 WPF 应用程序中的浏览器中打开 HTML 文件

c# - 嵌套 For 循环 - 在 Unity 中生成卡坦风格的六角网格