"use client"; import Image from "next/image"; import { useSearchParams } from "next/navigation"; import { Suspense, useCallback, useState } from "react"; import { Unity, UnityConfig, useUnityContext } from "react-unity-webgl"; const unityConfigBuilder: (path: string) => UnityConfig = (path) => ({ loaderUrl: `${path}.loader.js`, dataUrl: `${path}.data`, frameworkUrl: `${path}.framework.js`, codeUrl: `${path}.wasm`, streamingAssetsUrl: "StreamingAssets", companyName: "DTOL", productName: "3d-test", productVersion: "0.1", }); const option = [ { value: "/unity/3d-test/Build/3d-test", name: "3d-test", description: "마우스 오른쪽 키다운으로 카메라 각도 조절, WASD로 이동, Shift로 가속하는 것까지 구현되었습니다.", }, { value: "/unity/kartrider/Build/kartrider", name: "kartrider", description: "튜토리얼을 진행하며 만든 카트라이더 게임입니다.", }, { value: "/unity/test-project/build", name: "test-project", description: "처음 만든 프로젝트입니다.", }, ]; const objOption = [ { value: 0, label: "frame1", }, { value: 1, label: "frame2", }, ]; function UnityComponent() { const params = useSearchParams(); const p = params.get("p"); const [selectedIndex, setSelectedIndex] = useState(0); if (!p || isNaN(Number(p))) location.href = "/unity?p=0"; const { unityProvider, isLoaded, loadingProgression, initialisationError, UNSAFE__unityInstance, } = useUnityContext(unityConfigBuilder(option[Number(p)].value)); const loadingPercentage = Math.round(loadingProgression * 100); const handleSelectIndex = useCallback( (newValue: string) => { console.log(newValue); setSelectedIndex(Number(newValue)); UNSAFE__unityInstance?.SendMessage( "Cube", "HandleSelect", Number(newValue), ); }, [UNSAFE__unityInstance], ); return ( <>
Loading... ({loadingPercentage}%)