如何平滑变换位置?

时间:2019-04-25 17:18:52

标签: c# unity3d

我正在寻找解决方案以平滑对象的变换位置。

要移动到新位置,我正在使用该代码

transform.position + = Vector3.left * Time.deltaTime * 100f;

移动的效果是快速,所以我想使其更加平滑。是否可以更改此代码以获得更好的效果?就像本视频中的小砖块一样,当球摧毁了大砖块

https://youtu.be/mqj7eYna3Ds

4 个答案:

答案 0 :(得分:0)

您还可以使用此:

transform.Translate(Vector3.left * Time.deltaTime * 100f);

这应该使它更平滑。只要记住是否要对物体施加速度,Transform.Translate效果不好! 如果您想要更多类似浮子的运动,则可以给附加的刚体添加一个Addforce。

rigidbody.AddForce(transform.left * 10, Forcemode.Impulse);

注意:如果使用“翻译”,则不会有任何加速!

答案 1 :(得分:0)

Rigidbody.AddExplosionForce可以解决您的问题,但是您不能将碰撞点作为原点。您可能必须将爆炸的起点移动到比碰撞点低一点的位置。让我知道它是否解决了问题。

https://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html

答案 2 :(得分:0)

如果要平滑移动,最好使用AddForce或在Rigidbody上操纵速度变量。

但是,如果您的对象没有刚体,则可以使用Transform类提供的功能(例如:Rotate()Translate(),{{1} })

答案 3 :(得分:0)

您可以使用这段代码来平滑玩家的移动

           public Transform player;
           public Vector3 targetPosition;
           public float smoothFactor = 2;
           void Update()
           {
                 player.transform.position = Vector3.Lerp(player.transform.position, targetPosition, Time.deltaTime * smoothFactor);
           }