nuxt3でnuxt-unity-webglモジュールを作成

data codes through eyeglasses NuxtJS
Photo by Kevin Ku on Pexels.com
この記事は約3分で読めます。

nuxt3でunity webglを簡単に組み込みできるnpmモジュールを書いてみました。unityのwebglビルドを配置してコンポーネントを指定するだけです。windowのリサイズに合わせてcanvasタグのサイズも変わるようにしています。

GitHub - moritetu/nuxt-unity-webgl: Vue composable introduces component and utilities for unity WebGL container
Vue composable introduces component and utilities for unity WebGL container - moritetu/nuxt-unity-webgl

以下のような感じで組み込むことができます。

pnpm add -D nuxt-unity-webgl

app.vue

<script lang="ts" setup>
useProvideNuxtUnity(undefined, (unity) => {
  // eslint-disable-next-line no-console
  console.log(unity)
})
const { NuxtUnity, loaded, SendMessage } = useNuxtUnityOrThrow()
const callUnityFunction = () => {
  // scalar or json object are enable as argument
  SendMessage('GameObject', 'HelloMethod', { message: 'hello' })
}
const nuxtApp = useNuxtApp()

nuxtApp.$nuxtUnityEvent.on('nuxt-unity:ready', (providerId, unityInstance) => {
  // eslint-disable-next-line no-console
  console.log(providerId, unityInstance)
})

nuxtApp.$nuxtUnityEvent.on('hello', (message: string) => {
  // eslint-disable-next-line no-console
  console.log(message)
})
</script>

<template>
  <div class="container">
    <NuxtUnity
      width="500px"
      height="500px"
      unity-loader="/unity/Build.loader.js"
      :config="{
        dataUrl: '/unity/Build.data',
        frameworkUrl: '/unity/Build.framework.js',
        codeUrl: '/unity/Build.wasm',
      }"
      :resizable="true"
      :refresh-delay-time="100"
    ></NuxtUnity>
  </div>
  <button @click="callUnityFunction">SendMessage</button>
</template>

Unity側では、jslibファイルでWebの世界と連携すると思います。nuxt-unity-webglでは、モジュールイストールでjslibとnuxt間の連携のためのプラグインも一緒にインストールします。プラグインの実体はEventEmitterと同様なインターフェースのオブジェクト(EventEmitter3)でメッセージを送信とハンドリングができます。

// Sample.jslib
mergeInto(LibraryManager.library, {
  JSLibFunction: function () {
    $nuxtUnityEvent.emit('hello', 'Hello from unity jslib')
  },
})

参考リンク

コメント

タイトルとURLをコピーしました