为啥我的角色没有使用此代码移动?
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 和速度。
【讨论】:
以上是关于为啥我的角色没有使用此代码移动?的主要内容,如果未能解决你的问题,请参考以下文章