【unity3d】复刻死亡之书自动设置摄像机景深

复刻死亡之书自动设置摄像机景深

git地址:https://gitee.com/asiworld/NoteBook_unity.git

bilibili视频地址:https://space.bilibili.com/15766978

CSDN主页:https://blog.csdn.net/JianShengShuaiest

简述

unity 官方发布了一个demo叫做<死亡之书>,场景是一个森林,里面有一个特别酷的效果,叫做自动对焦,意思就是当我很近的观察一个物体的时候会造成很浅的景深,也就是背景虚化很大,只有对焦的位置上的物体才是清晰的,
在这里插入图片描述

我也做了一个类似的效果,其中主要用到的插件就是官方提供的PostProcessing,现在看一下我复刻的这个功能的效果
在这里插入图片描述

可以看到场景中只有一个红色的cube是实景,其他的都是虚化的,

死亡之书导入说明

导入死亡之书的时候会报错,解决方法是吧[Min]修改一个[UnityEngine.Min]

复刻步骤

添加基本脚本并设置

  1. 引入PostProcessing

  2. .摄像机修改layer为PostProcessing

  3. 在摄像机上面加入PostProcessLayer

  4. 抗锯齿改为TAA

  5. PostProcessVolume

  6. 在这里插入图片描述

  7. new 一个profile

  8. 添加一个效果 Add Effect Depth of Field

  9. Depth of Field的所有效果都勾选上

  10. 添加一个Collider 到 PostProcessVolume的相同的gameobject或者 勾选PostProcessVolume 的 Is Global选项

  11. 修改上面四个值就能得到如图效果

自动对焦物体

  1. 思路

    我想的是在一个环境中 有很多竖条状的模型,我们相机在其中旋转,屏幕中间为聚焦模型,摄像机在中间旋转,可以看到聚焦的效果

  2. 摆放场景

    按照喜欢加入一点灯光会有自己的效果

    在这里插入图片描述

  3. 加入脚本
    using DG.Tweening;
    
    using UnityEngine;
    using UnityEngine.Rendering.PostProcessing;
    
    public class SetFocusDistance : MonoBehaviour
    {
        private Ray ray;
        private RaycastHit hit;
        private Camera m_camera;
        private PostProcessVolume m_PostProcessVolume;
        public DepthOfField m_DepthOfField;
        public Vector3 m_v3Rotation;
        public float smooth = 5.0F;
        public MeshRenderer m_meshRenderer;
    
        // Start is called before the first frame update
        void Start()
        {
            m_camera = GetComponent<Camera>();
            m_PostProcessVolume = GetComponent<PostProcessVolume>();
            m_DepthOfField = m_PostProcessVolume.profile.GetSetting<DepthOfField>();
            transform.DORotate(m_v3Rotation, 1.0f).SetLoops(-1, LoopType.Incremental).SetEase(Ease.Linear);
        }
    
        // Update is called once per frame
        void Update()
        {
    
            ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2));
            if (Physics.Raycast(ray, out hit))//射线发出并碰撞到外壳,那么手臂就应该朝向碰撞点
            {
                m_DepthOfField.aperture.value = Mathf.Lerp(
                    m_DepthOfField.focusDistance.value,
                    1.5f,
                    Time.deltaTime * smooth);
    
                Debug.DrawLine(transform.position, hit.point);
                m_DepthOfField.focusDistance.value = Mathf.Lerp(
                    m_DepthOfField.focusDistance.value,
                    hit.distance + m_camera.nearClipPlane,
                    Time.deltaTime * smooth);
    
                m_meshRenderer = hit.transform.GetComponent<MeshRenderer>();
                if (!DOTween.IsTweening(m_meshRenderer.material))
                {
                    m_meshRenderer.material.DOColor(Color.red, 1.0f).SetLoops(2, LoopType.Yoyo);
                }
            }
            else
            {
                m_DepthOfField.aperture.value = Mathf.Lerp(
                    m_DepthOfField.focusDistance.value, 20,
                    Time.deltaTime * smooth);
                m_DepthOfField.focusDistance.value = Mathf.Lerp(
                    m_DepthOfField.focusDistance.value,
                    20.0f,
                    Time.deltaTime * smooth);
            }
        }
    }
    
    
    修改参数

    在这里插入图片描述

    就可以得到一个很炫酷的效果了

扩展

原理就是相机的一些光圈,对焦,像距等知识,其实可以扩展成一个拍照软件,或者加入到游戏中的关注敌人的概念,下面我就自己做了一个关于拍照的效果.

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
复刻Unity游戏"元气骑士"("Kuso Knight")的话,你需要遵循以下步骤: 1. 游戏机制和规则: - 确定游戏的基本机制和规则。例如,玩家是一个骑士角色,需要通过关卡,击败敌人并收集物品。 - 确定敌人的行为和攻击方式,以及玩家的移动和攻击方式。 - 设计关卡,并考虑难度级别的平衡。 2. 角色和动画: - 创建骑士角色的模型和动画。可以使用3D建模软件(如Blender)创建角色模型,并使用动画软件(如Unity的Animator)为其添加动画。 - 为角色实现移动、攻击和其他动作的控制。 3. 关卡设计: - 使用Unity的关卡编辑器创建关卡布局。可以使用不同的地形、平台和障碍物来增加关卡的多样性。 - 在关卡中放置敌人、物品和其他互动元素。 4. 游戏界面: - 设计游戏界面,包括生命值、分数、计时器等UI元素。 - 添加游戏菜单、暂停和结束界面。 5. 声音效果: - 添加背景音乐、音效和角色的音效。可以使用音频编辑工具(如Audacity)创建和编辑音频文件。 6. 游戏逻辑和脚本: - 使用C#编写游戏逻辑和脚本。例如,处理玩家输入、碰撞检测、敌人AI等。 - 实现游戏的胜利和失败条件,以及分数计算和游戏进度的管理。 7. 测试和调试: - 在开发过程中进行测试和调试,确保游戏的各个方面都能正常运行。 - 修复bug和优化游戏性能。 8. 发布和发布: - 准备游戏的发布版本,并将其打包为可执行文件或移动设备上的应用程序。 - 发布游戏,可以通过游戏平台(如Steam、App Store等)或自己的网站进行发布。 请注意,复刻游戏需要遵守版权法律。确保你有合法的许可或权利来复制和发布该游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢斯

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值