当我按左箭头时,我想缩小一个精灵,当我按右箭头时,我想扩大这个精灵。我编写了这段代码,它可以工作,但它运行得非常快。如果我按下按钮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
添加localScale
和scalingSpeed
之间的差,这要大得多(几乎每一帧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