在動(dòng)作類RPG游戲中侵状,為了體現(xiàn)角色的技能和增加動(dòng)作打擊感,我們常常會給相機(jī)添加抖動(dòng)效果來配合特效做一些技能效果正罢。
我在網(wǎng)上搜了一下阵漏,然后結(jié)合自己的項(xiàng)目總結(jié)一下,大概分兩種抖動(dòng)翻具,
按次數(shù)抖動(dòng)##
按次數(shù)抖動(dòng)履怯,就是讓相機(jī)抖動(dòng)固定的次數(shù)。但在實(shí)際項(xiàng)目中裆泳,我們?yōu)榱朔乐苟秳?dòng)效果過于生硬叹洲,一般會給一個(gè)次數(shù)的范圍,然后隨機(jī)生成抖動(dòng)的次數(shù)工禾,這樣玩家在玩的時(shí)候就不會感覺很重復(fù)疹味。
using UnityEngine;
using System.Collections;
public class ShakeCamera : MonoBehaviour {
public Camera curCamera;
bool isCanShake = false;
int shakeCount = 0;
Vector3 mCurPos;//相機(jī)的初始位置
float radio = 0.2f;
// Use this for initialization
void Start () {
//ShakeCameraWithCount ();
}
// Update is called once per frame
void Update () {
if(isCanShake)
{
}
ShakeWithCount();
}
void OnGUI()
{
if(GUI.Button(new Rect(0,0,100,40),"ShakeWithCount"))
{
ShakeCameraWithCount();
}
}
public void ShakeCameraWithCount()
{
mCurPos = curCamera.transform.position;
shakeCount = Random.Range (5,14);
}
void ShakeWithCount()
{
if(shakeCount>0)
{
shakeCount--;
float r = Random.Range(-radio,radio);//隨機(jī)的震動(dòng)幅度
if(shakeCount == 0)
{
//保證最終回歸到原始位置
curCamera.transform.position = mCurPos;
}
else
{
curCamera.transform.position = mCurPos + Vector3.one*r;
}
}
}
}
按時(shí)間抖動(dòng)
按時(shí)間抖動(dòng),顧名思義就是讓相機(jī)在給定時(shí)間內(nèi)一直持續(xù)做抖動(dòng)效果帜篇。按時(shí)間抖動(dòng)不僅可以用作技能效果糙捺,而且可以用來模擬地震,巨石落下等自然效果笙隙,這樣既可以節(jié)省美工的工作量洪灯,又能節(jié)省資源,而且效果還很真實(shí)竟痰。
全部代碼就不發(fā)了签钩,只發(fā)一部分核心代碼:
void ShakeCamera_Time()
{
if (shakeTime > 0)
{
mainCamera.transform.position = mCurPos + Random.insideUnitSphere * radio;
shakeTime -= Time.deltaTime * deFactor;
}
else
{
shakeTime = 0;
//mainCamera.transform.position = mCurPos;
}
}
只要放在Update里執(zhí)行,然后從外部傳入震動(dòng)的時(shí)間就可以看到效果啦坏快!
如果有更好的方法歡迎補(bǔ)充(⊙o⊙)嗯铅檩!