当前位置:   article > 正文

Unity3D —— 爆炸交互(震屏效果)_unity3d 震屏类

unity3d 震屏类

前言:

在我们进行游戏战斗场景开发时,常常为了加强临场感,会在有爆炸或者撞击的时候加入震屏的效果,原理其实很简单,就是对场景主相机进行坐标和角度的变化。


设计

在开始进行代码实操之前,我们先考虑一下大致的思路,主要操作的参数有震动的幅度(Transform的各项参数,通常只改变localPosition和localRotation,必要的时候也可以操作localScale),还有震动的时间,假设无需规则震动,可以考虑通过在振幅范围内取随机数的方法来实现。


实现:

1.创建类,带参数构造方法:
    /// <summary>
    /// 创建振动器
    /// </summary>
    /// <param name="timer">震动时间</param>
    /// <param name="force">震动幅度</param>
    /// <param name="delay">延迟多久震动</param>
    public CameraShaker(float timer, float force,float delay = 0){
       Timer = timer;
       Force = force;
       delayTime = delay;
       Reset();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Rest()方法是用来恢复一些状态和数据信息,以便于通过CameraShaker类创建单个振动器可以反复使用。

2.获得相机的起始位置,方便震动结束之后恢复相机状态:
    m_initialPosition = Camera.main.transform.position;
    m_initialRotation = Camera.main.transform.localRotation;
  • 1
  • 2
3.相机震动操作:

这里我直接通过while循环来实现了,当然在MonoBehavior中也可以在Update方法中实现这样的操作,这里为了封装,所以抽离了一些MonoBehavior的特性。

    while (duration > 0)
    {
        Transform objectToMove = Camera.main.transform;
        Vector3 newOffset = new Vector3(UnityEngine.Random.Range(-Force, Force),UnityEngine.Random.Range(-Force, Force),0);
        float newRotationOffset = UnityEngine.Random.Range(-RotationAngle, RotationAngle);
        objectToMove.position = objectToMove.position - m_oldOffset + newOffset;
        objectToMove.Rotate(0, 0, -m_oldRotationOffset);
        objectToMove.Rotate(0, 0, newRotationOffset);
        m_oldOffset = newOffset;
        m_oldRotationOffset = newRotationOffset;
        duration -= Time.deltaTime;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

duration为震动时长,而Force为震动的幅度。

4.震动结束后恢复相机参数:
    Camera.main.transform.position = m_initialPosition;
    Camera.main.transform.localRotation = m_initialRotation;
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/125390
推荐阅读
相关标签
  

闽ICP备14008679号