我需要的是 在Unity内的脚本我输入的时间秒为单位内 有一个三个轴向的方向振幅 这个振幅可以有一个1到-1的区间值随机 比如1秒内浮动1次 同时多个物体可以不一样的振幅一次 开始和结束为止归自身位置的0点
时间: 2024-02-24 12:55:41 浏览: 40
好的,那么我将为你提供一个在Unity内实现你所需效果的脚本。你可以将这个脚本附加到你想要振动的物体上,并在脚本的INSPECTOR面板中设置振动的参数。
```csharp
using UnityEngine;
public class Vibration : MonoBehaviour
{
public float time = 1f; // 振动的时间
public float frequency = 1f; // 振动的频率
public float amplitude = 1f; // 振动的幅度
public bool randomizeAmplitude; // 是否在每次振动时随机振幅
public bool loop; // 是否循环振动
private Vector3 originalPosition; // 物体的初始位置
private float timer = 0f; // 计时器
private Vector3 direction; // 振动的方向
private float currentAmplitude; // 当前的振幅
private void Start()
{
originalPosition = transform.position;
direction = Random.onUnitSphere; // 随机一个振动方向
currentAmplitude = amplitude; // 初始振幅为设定值
}
private void Update()
{
if (loop || timer < time)
{
timer += Time.deltaTime;
if (randomizeAmplitude)
{
currentAmplitude = Random.Range(-amplitude, amplitude); // 随机振幅
}
float offset = Mathf.Sin(timer * frequency * 2f * Mathf.PI);
Vector3 position = originalPosition + direction * offset * currentAmplitude;
transform.position = position;
if (timer >= time)
{
transform.position = originalPosition; // 振动结束,回到初始位置
timer = 0f;
}
}
}
}
```
这个脚本中,我为你提供了一些可配置的参数,包括振动的时间、频率、幅度、是否在每次振动时随机振幅、是否循环振动等。在“Start”函数中,我记录了物体的初始位置,并随机一个振动方向。在“Update”函数中,我使用计时器来控制振动的时间。我使用正弦函数来计算振动的偏移量,并将其应用到物体的位置上。如果振动结束,我将物体移回到其初始位置。
你可以在脚本的INSPECTOR面板中设置这些参数,以满足你的需求。如果你想要多个物体同时振动,你可以为每个物体附加一个这个脚本,然后为每个物体分配不同的振幅系数。
阅读全文