2016-10-11 32 views
0

当我按下左箭头时我想缩小精灵并且当我按右箭头时我想放大精灵。我制作了这个代码,它的工作原理非常快速。如果我按下按钮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); 
} 
+0

您是否能够找到解决问题的方法?如果给出的答案不能提供您所需的答案,请在此处添加评论或编辑您的问题以进行澄清。谢谢! – Serlite

回答

1

这里的问题是,你的缩放代码不线性改变精灵的localScale - 它实际上指数!考虑以下几点:

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

翻译为:

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

这意味着每帧,你不加入scalingSpeed一个矢量相等价值localScale - 要添加的差异之间的localScalescalingSpeedlocalScale,这要大得多(几乎翻倍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; 
} 

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