如何平稳地在x轴上移动对象?

时间:2019-06-17 23:07:47

标签: c# unity3d game-development

我想问一下如何在x轴上左右平滑移动对象? 我只想在X轴上完全移动,而z和y轴将保持与移动前相同。 我尝试使用代码:

  

rb.Transform.Translate(Vector3.right * Time.deltatime * 130);

但是那会传送我想要移动的球员快到我想要多少。 我只想在x轴上添加例如对象是否在

0->X
0->Y
0->Z

我想向右移动,则x轴需要= 4,当对象向右移动且其在坐标(4,0,0)时我想向左移动时,我想回到(0, 0,0),然后按键离开。当我想再剩下一个字段时,坐标必须是(-4,0,0) 我希望有人能得到我想要实现的目标。

编辑:

蓝星是处于位置的玩家,我只想在YZ保持不变的x轴上左右平滑移动,图片上是我想移动的方式,并且我只希望平滑移动而不会移动

enter image description here

蓝色是玩家在​​哪里,黄色和绿色的星星在哪里,当玩家需要再次走到右边时,谢谢……

2 个答案:

答案 0 :(得分:1)

尝试使用Vector3.Lerp

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    // Transforms to act as start and end markers for the journey.
    public Transform startMarker;
    public Transform endMarker;

    // Movement speed in units/sec.
    public float speed = 1.0F;

    // Time when the movement started.
    private float startTime;

    // Total distance between the markers.
    private float journeyLength;

    void Start()
    {
        // Keep a note of the time the movement started.
        startTime = Time.time;

        // Calculate the journey length.
        journeyLength = Vector3.Distance(startMarker.position, endMarker.position);
    }

    // Follows the target position like with a spring
    void Update()
    {
        // Distance moved = time * speed.
        float distCovered = (Time.time - startTime) * speed;

        // Fraction of journey completed = current distance divided by total distance.
        float fracJourney = distCovered / journeyLength;

        // Set our position as a fraction of the distance between the markers.
        transform.position = Vector3.Lerp(startMarker.position, endMarker.position, fracJourney);
    }
}

来源:https://docs.unity3d.com/ScriptReference/Vector3.Lerp.html

答案 1 :(得分:0)

在每个帧中,您都可以使用原始对象z和y创建一个新的Vector3,然后根据时间逻辑更新x。然后将此向量分配给对象变换。这是最简单的方法。