unity3d橡皮筋或弹簧效果的实现?

发布于 2022-09-02 08:42:59 字数 1067 浏览 17 评论 0

  1. 描述你的问题
    如图的蓝色cube,我想实现按KeycodeA或D使它从起点向左或向右一段距离后再松开A或D能使它平滑加速回到起点,如同在起点有一个橡皮筋把它往回拉的效果,我用插值lerp却无法实现,求各位大神解惑。

  2. 贴上相关代码
    以下的我的代码:

public class PlayerMove : MonoBehaviour {

public float moveSpeed=0.5f;
public Vector3 startPos;
public float smooth=0.5f;
void Start () {
    startPos =transform.position;
}
void Update () {
    if (Input.GetKey(KeyCode.A)) {
        transform.Translate (Vector3.left*moveSpeed*Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.D)) {
        transform.Translate (Vector3.right*moveSpeed*Time.deltaTime);
    }
    if (Input.GetKeyUp (KeyCode.A) || Input.GetKeyUp (KeyCode.D)) {
        transform.position = Vector3.Lerp(transform.position,startPos,smooth*Time.deltaTime); 
    }
 }

}

  1. 贴上报错信息
    代码无报错信息

  2. 贴上相关截图
    图片描述

  3. 已经尝试过哪些方法仍然没解决(附上相关链接)
    用过什么mathf.SmoothDamp,传统的translate都不好使唉,快晕了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

阳光下慵懒的猫 2022-09-09 08:42:59

是逻辑写错了

    transform.position = Vector3.Lerp(transform.position, startPos, smooth * Time.deltaTime);

去掉这个if就行了。GetKeyUp只会在按键结束的时候执行一次,想运动的话要反复执行这一句才可以。

    if (Input.GetKey(KeyCode.A)) {
        transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
    }else if (Input.GetKey(KeyCode.D)) {
        transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
    }else{
        transform.position = Vector3.Lerp(transform.position, startPos, smooth * Time.deltaTime);
    }

写成这样就不会在按键的时候调用lerp了,如果想要和上一种差不多的效果可以按距离减少moveSpeed。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文