【问题标题】:Why my character didn't move with this code?为什么我的角色没有使用此代码移动?
【发布时间】:2021-09-04 04:44:13
【问题描述】:

我将我的角色粘贴到一个空对象上,然后将 Rigidbody、脚本应用于该空对象(更改轴心)。

使用 System.Collections; System.Collections.Generic;统一引擎;

公共类 main_character : MonoBehaviour { 公共浮动速度;

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);
}

}

【问题讨论】:

  • 您似乎从未设置过速度值。您只需声明变量,这意味着它将具有默认值 0。
  • @HumanWrites 因为它是公开的,所以它是序列化的,您可以通过 Unity 中的 Inspector 编辑值

标签: c# unity3d


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多