Unity 实战案例全解析 实现时间停止效果+世界变灰

画面里运动的那个小玩意这么写

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Partol : MonoBehaviour
{
    public Transform pos1;
    public Transform pos2;
    public float speed;

    private Transform target;

    void Start() {
        target = pos2; // 初始目标位置
    }

    void Update() {
        // 移动对象到目标位置
        transform.position = Vector2.MoveTowards(transform.position, target.position, Time.deltaTime * speed);

        // 检查是否接近目标位置
        if (Vector2.Distance(transform.position, target.position) < 0.1f) {
            // 切换目标位置
            target = target == pos1 ? pos2 : pos1;
        }
    }


}

世界变灰用到了后处理包

相当于给 摄像机加了一层蒙版 灰色的蒙版

Getting started with post-processing | Post Processing | 3.0.3 (unity3d.com)  

首先创建一个 后处理文件,选择为颜色处理,相当于 创建蒙版样式

之后给摄像机挂上后处理层组件,相当于 选择添加蒙版的目标

最后为一个场景上的空物体挂上后处理体积组件,是 调整多个蒙版之间的管理组件

时间停止和后处理代码控制

 一个自锁变量用来使一个按钮切换两种不同的状态 

time.scale用来暂停世界上的所有物品

 public PostProcessVolume postProcessVolume;用来接受蒙版对象,这一步就是实例化蒙版

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class TimeStopEffect : MonoBehaviour {

    public PostProcessVolume postProcessVolume;
    private bool timeIsStopped = false;

    private void Start() {
        postProcessVolume.enabled = false;
    }

    public void ToggleTimeStop() {
        if (!timeIsStopped) {
            Time.timeScale = 0;
            postProcessVolume.enabled = true;
            timeIsStopped = true;
        }
        else {
            Time.timeScale = 1;
            postProcessVolume.enabled = false;
            timeIsStopped = false;
        }
    }
}

如果想暂停一定范围内的物品动作可以这么做

仅作参考,因为还可能有动画,这个方法只会影响到有Mono的脚本的物品

using UnityEngine;

public class PauseTrigger : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Pauseable"))
        {
            PauseObject(other.gameObject);
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Pauseable"))
        {
            ResumeObject(other.gameObject);
        }
    }

    private void PauseObject(GameObject obj)
    {
        // 停止物体的动作,例如禁用其Update方法
        obj.GetComponent<MonoBehaviour>().enabled = false;
    }

    private void ResumeObject(GameObject obj)
    {
        // 恢复物体的动作
        obj.GetComponent<MonoBehaviour>().enabled = true;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哈基咩咩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值