目录
- 前言
- 方法
- 后言
- 组件代码
前言
在unity中,要让一个物体变得让人感到轻飘飘的,就可以给一个物体添加上浮动组件。今天我们就来实现它。
方法
我们先来看一下 sin \sin sin函数的曲线。
在这条曲线上,随着 x x x向右移动, y y y也就能浮动着运动了,但是,由于内存限制, x x x会溢出,就会导致循环不连贯。于是我们就选取曲线的一段循环节,找到循环节的最小 x x x值和最大 x x x值。
我们得到了循环节的最小 x x x值是 − π -\pi −π,最大 x x x值是 π \pi π,还有一个规律,就是如果你把 x x x值乘 a a a,那么最小 x x x值和最大 x x x值分别是 − π a -\frac{\pi}{a} −aπ和 π a \frac{\pi}{a} aπ。
至于高度的问题,只需要 sin \sin sin函数的结果乘以最大高度而可。最终公式应该就是这样子: y = h sin a x y=h\sin ax y=hsinax
由此,现在打开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;}}
}
之后,可以开始去看看效果了。
后言
在梦日记及其派生之中,需要用到循环地图,这时,浮动组件虽然有用,远不及循环地图组件有用,下篇博客中,我们就实现这个循环地图组件。