perlinnoise是unity中Mathf下的一个函数,需要两个float参数x和y进行采样,返回一个0-1的float型。

项目里经常要随机摇摆某些东西,比如摄像机,某个随机运动的目标等等,都可以用这个函数来搞定。

下面是代码,挂载到对象上即可使用,目前返回值是一个Vector2,需要的话可以在方法里可以多加一个返回V3

using UnityEngine;

public class wiggle : MonoBehaviour
{
[Range(, )]
public float amplitude = ; //摇摆的幅度
[Range(0.00001f, 0.99999f)]
public float frequency = 0.98f; //频率
[Range(, )]
public int octaves = ; //频程迭代次数
[Range(0.00001f, )]
public float hold = 0.2f; //保持(限制)效果 void Update()
{
transform.position = Shake2D(amplitude, frequency, octaves, hold, Time.time);
} public static Vector2 Shake2D(float amplitude, float frequency, int octaves, float holding, float time)
{
float valX = ;
float valY = ; float iAmplitude = ;
float iFrequency = frequency;
float maxAmplitude = ;
float lacunarity = ; for (int i = ; i < octaves; i++)
{
//计算频率
float noiseFrequency = time / ( - iFrequency) / ; //采样x和y的值
float perlinValueX = Mathf.PerlinNoise(noiseFrequency, 0.5f);
float perlinValueY = Mathf.PerlinNoise(0.5f, noiseFrequency); //*2 - 1 是为了保持参数范围是从 -1 到 1.
perlinValueX = perlinValueX * - ;
perlinValueY = perlinValueY * - ; valX += perlinValueX * iAmplitude;
valY += perlinValueY * iAmplitude; //振幅,计算最大振幅以便归一化
maxAmplitude += iAmplitude; iAmplitude *= holding;
iFrequency *= lacunarity;
} //归一化
valX /= maxAmplitude;
valY /= maxAmplitude; //扩大幅度
valX *= amplitude;
valY *= amplitude; return new Vector2(valX, valY);
}
}

Unity中利用柏林噪声(perlinnoise)制作摇摆效果的更多相关文章

  1. Unity中使用柏林噪声生成地图

    孙广东  2017.3.27 http://blog.csdn.NET/u010019717 主要是利用Unity的 Mathf.PerlinNoise   函数(柏林噪声)的不同寻常的功能. htt ...

  2. unity中利用纯物理工具制作角色移动跳跃功能

    using System.Collections;using System.Collections.Generic;using UnityEngine; public class Player : M ...

  3. Unity中利用委托与监听解耦合的思路

    这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...

  4. Unity中利用光线投射实现摄像机拉近追踪对象

    项目中要求实现摄像机跟踪人物移动,并且可以水平360°,上下接近180°的自由旋转.这些操作网上已近有很多版本的实现,在此不再赘述.我在此想说的是,当摄像机移动到场景边界,或者触碰到场景中的障碍物的时 ...

  5. 关于Unity中的旋涡特效的制作(捕鱼达人3技术)(专题八)

    Mesh--材质--Shader 1: Mesh 是网格,包括顶点,法线,纹理坐标,切线,三角形.在每一个3D模型节点里面,有一个Mesh Filter组件来提取模型里面的网格数据;2: Shader ...

  6. unity3d 柏林噪声 PerlinNoise 规律 算法

    测试 每个小数值取100次 print(0.1); LaTest3(0.1f, 0.1f); print("Max:" + La.Max() + "|Min:" ...

  7. Unity3D题目,Unity中利用GUI输出九九乘法表

    网上看到的这题,下面贴出源代码 using UnityEngine;using System.Collections; public class c99 : MonoBehaviour//C#脚本名: ...

  8. Android中利用Camera与Matrix实现3D效果详解

    本文行文目录: 一.Camera与Matrix初步认识 二.Camera与Matrix旋转效果拆分介绍 三.Camera与Matrix实现立体3D切换效果 [csdn地址:http://blog.cs ...

  9. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

随机推荐

  1. c++ explict

    explicit 用于一个参数的构造函数:防止隐式转换. 什么意思呢? myClass(int x); 这是个构造函数 我们可以使用 myClass a(4);  或 myClass a=4;来调用它 ...

  2. ACL2020 Contextual Embeddings When Are They Worth It 精读

    上下文嵌入(Bert词向量): 什么时候值得用? ACL 2018 预训练词向量 (上下文嵌入Bert,上下文无关嵌入Glove, 随机)详细分析文章 1 背景 图1 Bert 优点 效果显著 缺点 ...

  3. 如何打印完整的MYSQL带参数SQL日志信息

    在mysql的jdbc中开启sql分析,如下: jdbc.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=U ...

  4. C#/.Net集成RabbitMQ

    RabbitMQ简介 消息 (Message) 是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串. JSON 等,也可以很复杂,比如内嵌对象. 消息队列中间件 (Message Queu ...

  5. JS学习第七天

    从js-bom入门到放弃 window常用属性: document 返回该窗口内装载的HTML文档 location 返回该窗口装载的HTML文档的URL screen 返回当前浏览者屏幕对象 his ...

  6. C#LeetCode刷题之#191-位1的个数(Number of 1 Bits)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4052 访问. 编写一个函数,输入是一个无符号整数,返回其二进制表 ...

  7. C#算法设计排序篇之11-二叉树排序(附带动画演示程序)

    二叉树排序(Binary Tree Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/695 访问. 二叉树排序 ...

  8. vue.js中 v-for,v-on,v-model,结合应用案例---记事本

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Mybatis-09-缓存

    缓存 什么是缓存[Cache]? 存在内存中的临时数据 提高查询效率,解决高并发的性能问题 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率 什么样的数据能使用缓存? 经常查询且不 ...

  10. day8 文件

     添加中文  需要编码     f = open("123.txt",'w',encoding='utf-8')    字符串转化二进制编码  encode() 1.文件: 计算机 ...