为啥我的角色没有使用此代码移动?

Posted

技术标签:

【中文标题】为啥我的角色没有使用此代码移动?【英文标题】: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 编辑值 【参考方案1】:

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

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

【讨论】:

以上是关于为啥我的角色没有使用此代码移动?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的左右移动动画不起作用?

我的角色 Sprite Node 移动时抖动,为啥?

为啥此页面与移动浏览器不兼容?

为啥按钮向左移动?

如何使用 C# 创建一个对象以统一在两个位置之间移动,为啥我的代码不起作用?

为啥我的 jQuery Mobile 代码不起作用?