目录为:Assets/Scripts/Common/
ShakeCamera.cs
挂到一个canmera上面就能用了
using UnityEngine;
using System.Collections;public class ShakeCamera: MonoBehaviour
{public enum ShakeOrient{horizontal,     //水平vertical,       //垂直forward,        //正朝向}//周期public float mPeriod = 2;//偏移周期public float mOffPeriod = 0;public ShakeOrient mShakeOrient = ShakeOrient.horizontal;//振动时间public float mShakeTime = 10.0f;//最大波峰public float mMaxWave = 5;//最小波峰public float mMinWave = 1;//总共经过时间private float mCurTime = 0;//是否shake状态public bool mIsShake = false;//初始位置public Vector3 mDefaultPos;//振动方向public Vector3 mShakeDir;public Transform mCamerTrans;//获取Transformpublic Transform GetTransform(){if (mCamerTrans == null){mCamerTrans = gameObject.transform;}return mCamerTrans;}//振屏public void ShakeScreen(ShakeOrient shakeOrient, float period, float shakeTime, float maxWave, float minWave, float offPeriod = 0){//不在振动状态if (!mIsShake){//确保Transform有效if (GetTransform() == null){return;}mShakeOrient = shakeOrient;mPeriod = period;mShakeTime = shakeTime;mMaxWave = maxWave;mMinWave = minWave;mOffPeriod = offPeriod;//保存默认位置mDefaultPos = transform.localPosition;//垂直方向if (shakeOrient == ShakeOrient.vertical){mShakeDir = new Vector3 (0, 1, 0);}else if (shakeOrient == ShakeOrient.forward){mShakeDir = mCamerTrans.forward;}else if (shakeOrient == ShakeOrient.horizontal){Vector3 v1 = new Vector3 (0, 1, 0);Vector3 v2 = mCamerTrans.forward;//叉乘,得到同时垂直于v1,v2的向量mShakeDir = Vector3.Cross (v1, v2);mShakeDir.Normalize ();}mIsShake = true;}}public void Update(){if (mIsShake){//已用过的时间/总的shake时间float factor = mCurTime / mShakeTime;//总周期//2PIfloat totalPeriod = mPeriod * Mathf.PI;//当前时刻值float maxValue = mMaxWave - (mMaxWave - mMinWave) * factor;//当前弧度值//mOffPeriod为0时,//radValue就是根据时间来算角度,,,时间流逝,rad增大float radValue = mOffPeriod * Mathf.PI + factor * totalPeriod;//这样子的感觉: value = ASin(rad)//A不断减小,rad从0到2PI不断增大//按正弦函数,振幅不断减小,最后减小为0float value = maxValue * Mathf.Sin (radValue);//垂直振动,只固定y方向if (mShakeOrient == ShakeOrient.vertical){transform.localPosition =new Vector3 (transform.localPosition.x, mDefaultPos.y, transform.localPosition.z)+ mShakeDir * value;}else{transform.localPosition = mDefaultPos + mShakeDir * value;}mCurTime += Time.deltaTime;//结束振屏状态上if (mCurTime > mShakeTime){mIsShake = false;mCurTime = 0;}}}void OnGUI(){if (GUI.Button(new Rect(10, 10, 150, 100), "Shake!")){ShakeScreen (mShakeOrient, mPeriod, mShakeTime, mMaxWave, mMinWave, mOffPeriod);mIsShake = true;//保存默认位置mDefaultPos = transform.localPosition;}}}

Commom(十五)—— ShakeCamera摇晃摄像机相关推荐

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...

    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...

  2. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  3. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...

  4. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云( ...

  5. 第十五届全国大学生智能车竞赛华南赛区成绩与奖项

    01华南赛区竞赛简介   第十五届全国大学生智能汽车竞赛华南赛区比赛采用了 线上(云)比赛的方式 .总共有 十三组高校组合 从8月15号到20号根据 线上比赛规范 完成了线上比赛.   华南赛区参赛共 ...

  6. 第十五届全国大学生智能汽车竞赛华南赛区成绩总结

    ■ 华南赛区简介 第十五届全国大学生智能汽车竞赛华南赛区比赛采用了 线上(云)比赛的方式 .总共有 十三组高校组合 从8月15号到20号根据 线上比赛规范 完成了线上比赛.下面给出了华南赛区学校队伍信 ...

  7. OpenCV学习笔记(十一)(十二)(十三)(十四)(十五)

    OpenCV学习笔记(十一)--谈谈像素的类型和对Templates的限制使用 Templates是c++的一个很强大的特征,可以是数据结构更加安全高效.但也会增加编译时间和代码的长度,当函数被频繁调 ...

  8. OpenGL 图形库的使用(二十五)—— 高级OpenGL之帧缓冲Framebuffers

    https://www.jianshu.com/p/d7066d6a02cc OpenGL 图形库的使用(二十五)-- 高级OpenGL之帧缓冲Framebuffers  刀客传奇 关注 0.2 20 ...

  9. 游戏设计的艺术:一本透镜的书——第二十五章 好的游戏是通过游戏测试做出来的

    这是一本游戏设计方面的好书 转自天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第二十五章好的游戏是通过游 ...

最新文章

  1. 关于ORA-01950: no privileges on tablespace 的解决
  2. 02-导航实例-storyboard实现
  3. ​在电网工作,有多高大上?
  4. nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
  5. java中位操作_Java中使用位操作的几个小技巧
  6. python字节流分割_Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
  7. Oracle 密码过期问题
  8. 【NIPS 2018】循环World模型促进策略演变
  9. MSP430 PIN 操作寄存器
  10. sun java认证考试大纲_SUN认证JAVA程序员考试大纲
  11. 梅科尔工作室-第五次网页前端培训笔记(Javascript)
  12. Win10 打开MSDTC
  13. Eplan创建符号详细解说
  14. k8s pod 一直重启 code 137 排查记录
  15. html5 span 点击选择,设置span标签不可点击技术分享
  16. Jquery写的幸运大转盘抽奖实例,用asp.net处理的服务器逻辑,附源码下载
  17. ❤️ 万字Python MySQL从入门到精通详细教程❤️ 再也不用担心学不会数据库了❤️
  18. MATLAB画双纵轴曲线。
  19. 图像处理之几何变换(python实现)
  20. python3 安装urllib3

热门文章

  1. 基于51单片机的电子秒表设计
  2. 国外整理的一套在线渗透测试资源合集
  3. Cocos Creator加载网络图片
  4. android缅甸语,Android键盘输入语言设置默认打开myanmar缅甸语的步骤
  5. 文件改名:如何将文件夹进行批量翻译重命名
  6. 2023年最新版初级商业数字营销师直通车题库
  7. 判断年月日是该年第多少天
  8. 23 - x的平方根,快速幂,超级次方
  9. linux练习2021-11-2硬链接与软链接计划任务
  10. 每日一题:贪心算法解救生艇问题