通过按键快速缩放精灵

本文关键字:缩放 精灵 | 更新日期: 2023-09-27 18:12:34

当我按左箭头时,我想缩小一个精灵,当我按右箭头时,我想扩大这个精灵。我编写了这段代码,它可以工作,但它运行得非常快。如果我按下按钮1秒,它会放大到100万倍。我做错了什么?scalingSpeed就像0.0001一样,但它仍然非常快。

if(Input.GetKey (KeyCode.LeftArrow)) {
    this.transform.localScale -= new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0);
} else if (Input.GetKey (KeyCode.RightArrow)) {
    this.transform.localScale += new Vector3 (this.transform.localScale.x - scalingSpeed, this.transform.localScale.y - scalingSpeed, 0);
}

通过按键快速缩放精灵

这里的问题是你的缩放代码并不能线性地改变精灵的localScale——它实际上是指数级的!考虑以下内容:

localScale += new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0);

翻译:

localScale = localScale + new Vector3 (localScale.x - scalingSpeed, localScale.y - scalingSpeed, 0);

这意味着每一帧,你不是在向localScale添加一个矢量等价的scalingSpeed值——你是在向localScale添加localScalescalingSpeed之间的,这要大得多(几乎每一帧localScale翻倍)。

同时使用+=和改变localScale的每个组件是多余的。我的建议吗?不要从localScale的每个组成部分减去scalingSpeed -相反,将其与Vector3.one相乘并加减:

if(Input.GetKey (KeyCode.LeftArrow)) {
    this.transform.localScale -= Vector3.one * scalingSpeed;
} else if (Input.GetKey (KeyCode.RightArrow)) {
    this.transform.localScale += Vector3.one * scalingSpeed;
}

希望这对你有帮助!如果您有任何问题,请告诉我。

看起来它会在每个GetKey事件上触发。按下一个键不止一次,就像医生说的"想想自动开火"您需要将其限制为每次按键一次。

查看输入。GetKeyDown