问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity开发实战:实现玩家被攻击后的相机晃动效果

创作时间:
作者:
@小白创作中心

Unity开发实战:实现玩家被攻击后的相机晃动效果

引用
CSDN
1.
https://blog.csdn.net/weixin_43908355/article/details/139088094

在Unity游戏中实现玩家被攻击后的晃动效果,不仅能增强游戏的沉浸感,还能提升玩家的游戏体验。本文将详细介绍如何通过调整相机位置来实现这一效果,包括具体的代码实现和应用场景说明。

方法说明

本文的技术分享来源于siki学院的Unity项目《捕鱼达人》。通过调整相机的移动,可以实现玩家被Boss攻击时的震动效果。具体应用场景包括:

  1. 当玩家被Boss攻击时,画面会显示红色(通过Canvas下的红色贴图实现)。
  2. 在3D场景中,当Boss与虚拟枪位发生碰撞时(例如下图中的蓝色大鱼位置),触发被攻击事件。

  1. 被攻击后的震动效果脚本(Shake)直接挂在MainCamera上,主要实现以下两个功能:
  • 显示Canvas下被攻击时的贴图,表示玩家正处于被攻击状态。
  • 调整3D场景中MainCamera的位置,给玩家带来震动的感官体验。

相关方法代码

相机震动的核心代码

使用效果较好的振幅随机数设置公式为:Random.Range(0f, 振动系数) - 振动系数 * 0.5f

// 镜头x方向抖动
transform.position = new Vector3((Random.Range(0f, cameraShake)) - cameraShake * 0.5f, transform.position.y, transform.position.z);

// 镜头z方向抖动
transform.position = new Vector3(transform.position.x, transform.position.y, (Random.Range(0f, cameraShake)) - cameraShake * 0.5f);

完整代码实现

using UnityEngine;

/// <summary>
/// 被攻击时,玩家产生的震动方法
/// </summary>
public class Shake : MonoBehaviour
{
    private float cameraShake = 5; // 震动系数
    public GameObject UI; // 被攻击时显示的红色贴图

    void Update()
    {
        ShakeCamera(); // 时时检测是否有被攻击。
    }

    /// <summary>
    /// 被撞击效果
    /// 除了Update里时时检测,
    /// 还可以在检测是否攻击玩家的脚本,或Boss脚本里执行攻击操作时
    /// 使用委托调用:Invoke("ShakeCamera");
    /// </summary>
    private void ShakeCamera()
    {
        // Gun.Instance:包含判断虚拟枪/玩家是否被攻击的方法的脚本Gun
        if (Gun.Instance.bossAttack) // 相关的脚本里设置的:Boss是否攻击玩家的bool变量
        {
            UI.SetActive(true); // 被攻击时的特效图显示
            transform.position = new Vector3((Random.Range(0f, cameraShake)) - cameraShake * 0.5f, transform.position.y, transform.position.z); // 镜头x方向移动
            transform.position = new Vector3(transform.position.x, transform.position.y, (Random.Range(0f, cameraShake)) - cameraShake * 0.5f); // 镜头z方向移动
            cameraShake = cameraShake / 1.05f; // 减小振幅

            if (cameraShake < 0.05f) // 当振幅过小时,停止被撞击效果
            {
                cameraShake = 0; // 振幅系数置0
                UI.SetActive(false); // 关闭被攻击时的特效图
                Gun.Instance.bossAttack = false; // 禁止震动
            }
        }
        else
        {
            cameraShake = 5; // 不需要震动时,把震动系数还原
        }
    }
}

通过以上代码,可以实现玩家被攻击时的相机震动效果。这个效果不仅增强了游戏的视觉体验,还能帮助玩家更好地感知游戏状态。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号