You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDScript向量计算原理与输入方向数值问题咨询

GDScript 2D角色移动函数疑问解答

先贴出你用到的代码:

extends CharacterBody2D
 
@export var speed = 400
 
func get_input():
    var input_direction = Input.get_vector("left", "right", "up", "down")
    velocity = input_direction * speed
    print(input_direction)
    print(velocity)
 
func _physics_process(delta):
    get_input() 
    move_and_slide()

针对你的疑问逐一解答:

疑问1:get_vector()返回类型与向量标量乘法逻辑

  • Input.get_vector()在2D场景下返回的是Vector2类型,这是Godot专为2D空间设计的内置向量类型,自带标量乘法重载:当你用向量和一个数值(标量)相乘时,向量的x、y两个分量会分别和这个数值相乘,所以(-1,0)*400会得到(-400,0)。
  • 对于3D场景的Vector3类型,标量乘法逻辑完全一致:Vector3(0, 0, 2) * 2会让三个分量各自乘以2,最终得到Vector3(0, 0, 4)。

疑问2:斜向移动时的向量数值逻辑

  • 当你同时按下左和上方向键时,原始输入组合出的向量是(-1, 1),这个向量的长度是√[(-1)² + 1²] = √2 ≈1.4142。如果直接用这个向量乘以speed,斜向移动的速度会比单方向快约41%,导致移动速度不一致。
  • Input.get_vector()会自动对输入向量做归一化处理:把向量的每个分量除以它的长度,得到长度为1的单位向量。√2的倒数约为0.7071,所以归一化后的向量就是(-1/√2, 1/√2) ≈ (-0.707107, 0.707107)。
  • 之后乘以speed=400,每个分量的结果就是400*0.7071≈282.8427,这样斜向移动的速度大小依然是400,和单方向移动速度保持一致,避免了速度失衡的问题。

内容的提问来源于stack exchange,提问作者user3531149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:17:44