nuxt-unity-webgl
v0.0.3
Published
Vue Composables introducing unity webgl containers
Downloads
427
Readme
nuxt-unity-webgl
nuxt-unity-webgl introduces component and utilities for unity WebGL container.
Features
- ⛰ Add the unity canvas to your site easily
Quick Setup
- Add
nuxt-unity-webgl
dependency to your project
# Using pnpm
pnpm add -D nuxt-unity-webgl
# Using yarn
yarn add --dev nuxt-unity-webgl
# Using npm
npm install --save-dev nuxt-unity-webgl
- Add
nuxt-unity-webgl
to themodules
section ofnuxt.config.ts
export default defineNuxtConfig({
modules: ['nuxt-unity-webgl'],
})
That's it! You can now use NuxtUnityWebGL in your Nuxt app ✨
Basic usage
You can get NuxtUnity
by calling useNuxtUnityOrThrow()
or useNuxtUnity()
composables.
<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('nuxt-unity:ready').on(({ providerId, unityInstance }) => {
// eslint-disable-next-line no-console
console.log(providerId, unityInstance)
})
</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>
And you can send messages to the unity game object with SendMessage()
.
// HelloController.cs
using System;
using UnityEngine;
using System.Runtime.InteropServices;
public class HelloController : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void JSLibFunction();
[Serializable]
public class HelloProps
{
public string message;
}
public void hello(string json)
{
HelloProps props = JsonUtility.FromJson<HelloProps>(json);
Debug.Log(props.message);
JSLibFunction();
}
}
emit
or handle
some events via $nuxtUnityEvent
in .jslib
.
// Sample.jslib
mergeInto(LibraryManager.library, {
JSLibFunction: function () {
$nuxtUnityEvent.emit({ event: 'hello', data: { message: 'Hello from unity jslib' } })
},
})
Composables
useProvideNuxtUnity(initialValue, callback)
Injects unity store.
// initialValue: unity instance
// callback : (unityInstance) => void
useProvideNuxtUnity(undefined, (unity) => {
console.log(unity) // The unity instance
})
useNuxtUnity()
Return the store, it is nullable. We uses createInjectionState
of VueUse
, so see VueUse Documents in more details.
NuxtUnity
- NuxtUnity vue componentunity
- Unity instance initialized bycreateUnityInstance()
loading
- Loading state of the unity instanceloaded
- Loaded state of the unity instancequitted
- Quitted state of the unity instancequit
- Function to quit unityerror
- Error if unity loading failsSendMessage
- Utility function to send the unity game object
useNuxtUnityOrThrow()
Return the store. If the store is null, error thrown.
Unity Component Attributes
width
- Type:
string
- Required:
true
Canvas width px
.
height
- Type:
string
- Required:
true
Canvas height px
.
unityLoader
- Type:
string
- Required:
true
Unity loader script.
config
- Type:
Object
- Required:
true
Configuration passed to an utity instance.
onProgress
- Type:
Function
- Required:
false
- Default:
;(progress: number) => {
console.log(`unity loading... ${progress * 100}%`)
}
Callback function called in loading.
resizable
- Type:
Boolean
- Required:
false
Enable auto resizing canvas when window resizing. true
is enable.
refreshDelayTime
- Type:
Number
- Required:
false
- Default:
200
Delay millseconds time to resize canvas after window resized.
onQuit
- Type:
Boolean
- Required:
false
- Default:
;() => {
console.log('quit unity')
}
Callback function called on onBeforeUnmount
lifecycle hook.
Plugin
You can use $nuxtUnityEvent
plugin in your components or unity .jslib
scripts.
const { $nuxtUnityEvent } = useNuxtApp()
$nuxtUnityEvent('eventName').on(({ event }) => console.log(event))
$nuxtUnityEvent('eventName').emit({ event: 'hello', data: { message: 'message' } })
$nuxtUnityEvent
- eventmit objectnuxt-unity:ready
- Hook called when unity instance creatednuxt-unity:quit
- Hook called when unity instance quitted
Development
# Install dependencies
npm install
# Generate type stubs
npm run dev:prepare
# Develop with the playground
npm run dev
# Build the playground
npm run dev:build
# Run ESLint
npm run lint
# Run Vitest
npm run test
npm run test:watch
# Release new version
npm run release