README
@n3p6/react-three-yuka
useful helpers for yuka
to make your life easier.
Usage
Install
# npm npm install @n3p6/react-three-yuka # yarn yarn add @n3p6/react-three-yuka # pnpm pnpm install @n3p6/react-three-yuka # bun bun install @n3p6/react-three-yuka # deno deno install @n3p6/react-three-yuka
Example
EntityManager
import { EntityManager } from '@n3p6/react-three-yuka' import { Outlet } from 'react-router' export const Layout = () => ( <EntityManager> <Outlet /> </EntityManager> )
useEntityManager
import { useEntityManager } from '@n3p6/react-three-yuka' import { useEffect } from 'react' import { GameEntity, SeekBehavior, Vehicle } from 'yuka' export const Behavior = () => { const entityManager = useEntityManager() useEffect(() => { const player = entityManager.entities.find(item => item instanceof GameEntity) const vehicle = entityManager.entities.find(item => item instanceof Vehicle) vehicle.steering.add(new SeekBehavior(player.position)) }) return null }
useGameEntity
import { useGameEntity } from '@n3p6/react-three-yuka' import { useEffect } from 'react' import { GameEntity } from 'yuka' export const Cube = () => { const [ref, entity] = useGameEntity(GameEntity) const inner = useRef() useEffect(() => { entity.steering.add(/* behavior */) return () => { entity.steering.remove(/* behavior */) } }, [entity]) useFrame(() => (inner.current.rotation.x = inner.current.rotation.y += 0.01)) return ( <group ref={ref}> <mesh ref={inner}> <cubeBufferGeometry /> <meshPhysicalMaterial color="hotpink" roughness={0.6} thickness={1} transmission={1} /> </mesh> </group> ) }