Commom(十五)—— ShakeCamera摇晃摄像机
目录为: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摇晃摄像机相关推荐
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引...
Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 原文:Introduction to 3 ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云( ...
- 第十五届全国大学生智能车竞赛华南赛区成绩与奖项
01华南赛区竞赛简介 第十五届全国大学生智能汽车竞赛华南赛区比赛采用了 线上(云)比赛的方式 .总共有 十三组高校组合 从8月15号到20号根据 线上比赛规范 完成了线上比赛. 华南赛区参赛共 ...
- 第十五届全国大学生智能汽车竞赛华南赛区成绩总结
■ 华南赛区简介 第十五届全国大学生智能汽车竞赛华南赛区比赛采用了 线上(云)比赛的方式 .总共有 十三组高校组合 从8月15号到20号根据 线上比赛规范 完成了线上比赛.下面给出了华南赛区学校队伍信 ...
- OpenCV学习笔记(十一)(十二)(十三)(十四)(十五)
OpenCV学习笔记(十一)--谈谈像素的类型和对Templates的限制使用 Templates是c++的一个很强大的特征,可以是数据结构更加安全高效.但也会增加编译时间和代码的长度,当函数被频繁调 ...
- OpenGL 图形库的使用(二十五)—— 高级OpenGL之帧缓冲Framebuffers
https://www.jianshu.com/p/d7066d6a02cc OpenGL 图形库的使用(二十五)-- 高级OpenGL之帧缓冲Framebuffers 刀客传奇 关注 0.2 20 ...
- 游戏设计的艺术:一本透镜的书——第二十五章 好的游戏是通过游戏测试做出来的
这是一本游戏设计方面的好书 转自天之虹的博客:http://blog.sina.com.cn/jackiechueng 感谢天之虹的无私奉献 Word版可到本人的资源中下载 第二十五章好的游戏是通过游 ...
最新文章
- 关于ORA-01950: no privileges on tablespace 的解决
- 02-导航实例-storyboard实现
- ​在电网工作,有多高大上?
- nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
- java中位操作_Java中使用位操作的几个小技巧
- python字节流分割_Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
- Oracle 密码过期问题
- 【NIPS 2018】循环World模型促进策略演变
- MSP430 PIN 操作寄存器
- sun java认证考试大纲_SUN认证JAVA程序员考试大纲
- 梅科尔工作室-第五次网页前端培训笔记(Javascript)
- Win10 打开MSDTC
- Eplan创建符号详细解说
- k8s pod 一直重启 code 137 排查记录
- html5 span 点击选择,设置span标签不可点击技术分享
- Jquery写的幸运大转盘抽奖实例,用asp.net处理的服务器逻辑,附源码下载
- ❤️ 万字Python MySQL从入门到精通详细教程❤️ 再也不用担心学不会数据库了❤️
- MATLAB画双纵轴曲线。
- 图像处理之几何变换(python实现)
- python3 安装urllib3