简单的物体漂浮算法

简单的物体漂浮的算法,使用正弦函数和余弦函数去控制物体的偏移量,这样就能实现物体绕着原点漂浮的感觉

首先我们需要设置一个最大偏移量offset和振动频率frequency。

?
 

public Vector3 offset;
public float frequency;

然后我们还需要记录物体的原始坐标即原点originPosition,用于计算当前时间量的tick值(可以理解成函数坐标轴的x值),物体的振幅(根据我们设定的frequency计算)和用于控制物体漂浮动画的animate值。
[C#]   纯文本查看   复制代码
?
 
1
2
3
private Vector3 originPosition;
private float tick;
private float amplitude;
private bool animate;


在Awake方法中对各个属性进行赋值,然后在FixedUpdate方法中进行计算:
[C#]   纯文本查看   复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void Awake()
{
     // 如果没有设置频率或者设置的频率为0则自动记录成1
     if (Mathf.Approximately(frequency, 0))
         frequency = 1f;
 
     originPosition = transform.localPosition;
     tick = Random.Range(0f, 2f * Mathf.PI);
     // 计算振幅
     amplitude = 2 * Mathf.PI / frequency;
     animate = false ;
}
 
void FixedUpdate()
{
     if (animate)
     {
         // 计算下一个时间量
         tick = tick + Time.fixedDeltaTime * amplitude;
         // 计算下一个偏移量
         var amp = new Vector3(Mathf.Cos(tick) * offset.x, Mathf.Sin(tick) * offset.y, 0);
         // 更新坐标
         transform.localPosition = originPosition + amp;
     }
}


由于需求是针对UI的,所以Z轴上不需要做位移,这里可以根据需求进行修改。我们还可以设置一个是否自动播放的变量,并在Awake方法中将其赋值给animate:
[C#]   纯文本查看   复制代码
?
 
1
2
3
4
5
public bool playAwake;
 
void Awake()
{
     animate = playAwake;
}




最后写两个简单的播放和停止的方法:
[C#]   纯文本查看   复制代码
?
 
01
02
03
04
05
06
07
08
09
10
public void Play()
{
     transform.localPosition = originPosition;
     animate = true ;
}
 
public void Stop()
{
     transform.localPosition = originPosition;
     animate = false ;
}


这里直接在停止时将物体移动到原点,如果需要更顺畅的动画的话,我们可以在停止时在停止的位置点和原点之间做一个插值动画来让物体慢慢飘回原点。


将脚本挂载到物体上后进行编辑: 

设置不同的合适的偏移量和频率还可以达到远近景的效果。


运行效果: 


完整代码: 
FloatingObj.cs:

using UnityEngine;
 
public class FloatingObj : MonoBehaviour
{
    public Vector3 offset;
    public float frequency;
    public bool playAwake;
 
    private Vector3 originPosition;
    private float tick;
    private float amplitude;
    private bool animate;
 
    void Awake()
    {
        // 如果没有设置频率或者设置的频率为0则自动记录成1
        if (Mathf.Approximately(frequency, 0))
            frequency = 1f;
 
        originPosition = transform.localPosition;
        tick = Random.Range(0f, 2f * Mathf.PI);
        // 计算振幅
        amplitude = 2 * Mathf.PI / frequency;
        animate = playAwake;
    }
 
    public void Play()
    {
        transform.localPosition = originPosition;
        animate = true;
    }
 
    public void Stop()
    {
        transform.localPosition = originPosition;
        animate = false;
    }
 
    void FixedUpdate()
    {
        if (animate)
        {
            // 计算下一个时间量
            tick = tick + Time.fixedDeltaTime * amplitude;
            // 计算下一个偏移量
            var amp = new Vector3(Mathf.Cos(tick) * offset.x, Mathf.Sin(tick) * offset.y, 0);
            // 更新坐标
            transform.localPosition = originPosition + amp;
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python漂浮物识别是一种基于Python语言开发的图像处理技术,主要用于识别和分类图像中的漂浮物体。 该技术基于深度学习模型,使用卷积神经网络(CNN)进行图像特征提取和分类。首先,需要使用Python编写代码,加载训练好的模型和相关库。然后,将待识别的图像输入到模型中,通过卷积和池化层提取特征,并通过全连接层进行分类。 在训练模型时,需要准备大量的包含不同种类漂浮物体的图像数据集。这些图像数据集可以通过网络爬虫收集,或者由人工标注的数据集。将数据集划分为训练集和测试集,并对图像进行预处理,如缩放、旋转和裁剪等操作。 训练模型时,可以使用Python中常用的深度学习库,如TensorFlow、PyTorch或Keras来构建和训练模型。通过迭代训练,不断调优模型的参数,直到达到较高的准确率和泛化能力。 漂浮物识别的应用广泛,比如海洋监测、环境保护和水域管理等方面。通过Python漂浮物识别技术,可以自动化地对大量的海洋图像进行分析,有效识别并分类不同类型的漂浮物体,提供给相关部门进行决策和措施。此外,还可以结合其他技术,如目标追踪和语义分割,提高漂浮物识别的效果和性能。 总的来说,Python漂浮物识别技术依赖于深度学习模型和图像处理算法,可以辅助人们进行漂浮物体的自动识别和分类,为相关领域的研究和实践提供有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值