You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 3D制作类模拟游戏可交互电脑屏幕的技术求助

Unity 可交互游戏电脑屏幕实现方案

一、先解决Canvas文字反转问题

别直接把Canvas挂在3D屏幕模型子节点做面向相机设置,改用Render Texture方案彻底解决:

  1. 创建Render Texture资源(右键>Rendering>Render Texture),设置匹配游戏需求的分辨率(比如1920x1080)。
  2. 将这个Render Texture拖到电脑屏幕3D模型材质的_MainTex属性上。
  3. 创建独立UI Canvas,设置Render Mode为Screen Space - Camera,指定专门的UI渲染相机(或用主相机但调整层级),再把Canvas的Target Texture设为刚才创建的Render Texture。
  4. 这样Canvas内容会实时渲染到Render Texture,3D屏幕显示的就是正向内容,不会出现反转。

二、核心交互系统搭建

1. 屏幕触发检测系统

  • 在电脑屏幕模型上添加Box Collider(勾选Is Trigger),用于检测玩家靠近状态。
  • 编写触发交互脚本:
    public class ScreenInteractTrigger : MonoBehaviour
    {
        public GameObject computerUI;
        private bool isPlayerNear = false;
    
        void OnTriggerEnter(Collider other)
        {
            if(other.CompareTag("Player")) isPlayerNear = true;
        }
    
        void OnTriggerExit(Collider other)
        {
            if(other.CompareTag("Player"))
            {
                isPlayerNear = false;
                CloseComputer();
            }
        }
    
        void Update()
        {
            if(isPlayerNear && Input.GetKeyDown(KeyCode.E))
            {
                computerUI.SetActive(!computerUI.activeSelf);
                Time.timeScale = computerUI.activeSelf ? 0 : 1;
            }
        }
    
        void CloseComputer()
        {
            computerUI.SetActive(false);
            Time.timeScale = 1;
        }
    }
    

2. 电脑UI模拟系统

模仿真实电脑层级搭建:

  • 桌面层:背景图、带Button组件的快捷方式图标,点击触发对应程序窗口。
  • 窗口层:制作可拖动、最小化、关闭的窗口预制体,用RectTransform实现拖动逻辑:
    public class DraggableWindow : MonoBehaviour
    {
        private Vector2 offset;
        private bool isDragging = false;
    
        public void OnMouseDown()
        {
            offset = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition) - (Vector2)transform.position;
            isDragging = true;
            transform.SetAsLastSibling();
        }
    
        void Update()
        {
            if(isDragging)
            {
                Vector2 targetPos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition) - offset;
                transform.position = targetPos;
            }
        }
    
        public void OnMouseUp()
        {
            isDragging = false;
        }
    }
    
  • 程序模拟:为浏览器、游戏、聊天软件等制作对应窗口内容,点击快捷方式时实例化或显示隐藏窗口。

3. 电脑状态管理系统

给电脑设置关机/待机/开机三种状态,对应不同屏幕显示:

public class ComputerStateManager : MonoBehaviour
{
    public static ComputerStateManager Instance;
    public enum ComputerState { Off, Standby, On }
    public ComputerState currentState;

    void Awake()
    {
        Instance = this;
        currentState = ComputerState.Off;
    }

    public void TogglePower()
    {
        if(currentState == ComputerState.Off)
        {
            currentState = ComputerState.On;
            // 切换开机画面、加载桌面UI
        }
        else if(currentState == ComputerState.On)
        {
            currentState = ComputerState.Off;
            // 切换黑屏、关闭所有窗口
        }
    }
}

三、优化显示效果

  • 给屏幕模型材质添加Emission通道,开机时调高发光强度,关机时调低,模拟屏幕发光效果。
  • 在Render Texture Inspector中设置Anti Aliasing为2x/4x,减少UI边缘锯齿。
  • 叠加半透明反光纹理或用Shader实现菲涅尔效果,模拟屏幕反光质感。

内容的提问来源于stack exchange,提问作者Yusf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:45:43