【问题标题】:Unity C# Moving Platform Offset at RunntimeUnity C# 在运行时移动平台偏移
【发布时间】:2017-03-10 19:20:46
【问题描述】:

所以我为我的游戏制作了一些非常简单的移动平台。

public float speedX;
public float speedY;
public float length;
public float pause;

float timer;
Vector3 move;

void Start () {
    timer = 0;
}

void Update()
{
    if (timer == 0)
    {
        speedX *= -1;
        speedY *= -1;
        timer = length;
    } else
    {
        timer--;
    }
    if (timer > pause)
    {
        move = new Vector3(speedX, speedY, 0);
        transform.Translate(move * Time.smoothDeltaTime);
    }
}

当我播放场景时,我将它们放入其中,它们运行得很好。但是当我玩完游戏并到达那个场景时,平台在它们移动的任何方向上都会有一点偏移。 有人对我如何让平台在不同的游戏会话中保持一致有任何想法吗?

【问题讨论】:

  • 他们在到达那个场景之前就被摧毁了吗?

标签: c# unity3d offset translate


【解决方案1】:

Time.smoothDeltaTime 不是恒定速率,因此您的平台移动的距离会发生变化。这些微小的差异会加起来并取代原来的位置。

我会定义起点和终点,然后在它们之间移动。查看这些方便的方法以获得一些想法:Vector3.MoveTowards & Vector3.Lerp

【讨论】:

    【解决方案2】:

    最好使用补间引擎,例如http://dotween.demigiant.com/

    如果你安装了 Dotween 那么你可以简单地使用

    transform.DOMove(new vector3(1 ,0 , 1) , duration);
    

    您还可以为补间设置轻松。或使用 Oncomplete 函数;

    transform.DOMove(new vector3(1 ,0 , 1) , duration)
        .SetEase(Ease.OutCubic)
        .OnCompelete(() => { shouldClose = true; }); 
    

    您还可以为补间.SetLoops(-1) 设置循环。

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多