unity实现浮动组件

53 阅读1分钟

前言

在unity中,要让一个物体变得让人感到轻飘飘的,就可以给一个物体添加上浮动组件。今天我们就来实现它。

方法

我们先来看一下sin\sin函数的曲线。

在这条曲线上,随着xx向右移动,yy也就能浮动着运动了,但是,由于内存限制,xx会溢出,就会导致循环不连贯。于是我们就选取曲线的一段循环节,找到循环节的最小xx值和最大xx值。

我们得到了循环节的最小xx值是π-\pi,最大xx值是π\pi,还有一个规律,就是如果你把xx值乘aa,那么最小xx值和最大xx值分别是πa-\frac{\pi}{a}πa\frac{\pi}{a}

至于高度的问题,只需要sin\sin函数的结果乘以最大高度而可。最终公式应该就是这样子:y=hsinaxy=h\sin ax

由此,现在打开unity,即可写浮动组件。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Float : MonoBehaviour
{
    public float speed = 1;
    public float high = 1;
    private float x;
    public float ox;//用于设定物体浮动时的x轴
    public float oy;//用于设定物体浮动时的y轴
    public float oz;//用于设定物体浮动时的z轴
    void Start()
    {
        x = -3.14f / speed;
        ox = transform.position.x;
        oy = transform.position.y;
        oz = transform.position.z;
    }

    void Update()
    {
        transform.position = new Vector3(ox, oy + Mathf.Sin(x * speed) * high, oz);
        x += 0.01f;
        if (x > 3.14f / speed)
        {
            x = -3.14f / speed;
        }
    }
}

之后,可以开始去看看效果了。

后言

在梦日记及其派生之中,需要用到循环地图,这时,浮动组件虽然有用,远不及循环地图组件有用,下篇博客中,我们就实现这个循环地图组件。

组件代码