Skip to content

Commit 7b514fc

Browse files
committed
feat(app): following player
1 parent 25d34ed commit 7b514fc

File tree

3 files changed

+25
-23
lines changed

3 files changed

+25
-23
lines changed

app/src/components/vrm/hikari-yuka.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { useVRM } from '@n3p6/react-three-vrm'
22
import { useEntityManager, useYuka } from '@n3p6/react-three-yuka'
33
import { useFrame } from '@react-three/fiber'
44
import { useEffect } from 'react'
5-
import { ArriveBehavior, GameEntity, Vehicle } from 'yuka'
5+
import { Vector3 } from 'three'
6+
import { ArriveBehavior, GameEntity, Vehicle, Vector3 as YukaVector3 } from 'yuka'
67

78
const vrmUrl = import.meta.env.DEV
89
? '/models/Hikari_SummerDress.vrm'
@@ -15,8 +16,10 @@ export const HikariYuka = () => {
1516
const vrm = useVRM(vrmUrl)
1617
const entityManager = useEntityManager()
1718

18-
const [vehicleRef, vehicleEntity] = useYuka(Vehicle, { position: [0, 0, 0] })
19-
const [playerRef, playerEntity] = useYuka(GameEntity, { position: [5, 0, 5] })
19+
const [vehicleRef, vehicleEntity] = useYuka(Vehicle, {
20+
position: [0, 0, 0],
21+
})
22+
const [playerRef, playerEntity] = useYuka(GameEntity)
2023

2124
useEffect(() => {
2225
const arriveBehavior = new ArriveBehavior(playerEntity.position, 1.5, 0.1)
@@ -25,28 +28,28 @@ export const HikariYuka = () => {
2528
return () => {
2629
vehicleEntity.steering.remove(arriveBehavior)
2730
}
28-
}, [playerEntity, vehicleEntity])
31+
}, [vehicleEntity, playerEntity])
2932

30-
useFrame((_, delta) => {
33+
useFrame((state, delta) => {
3134
// vehicle.update(delta)
3235
entityManager.update(delta)
3336
vrm.update(delta)
37+
38+
const position = state.camera.getWorldPosition(new Vector3())
39+
playerEntity.position.copy(new YukaVector3(position.x, 0, position.z))
3440
})
3541

3642
return (
3743
<>
38-
<primitive
39-
object={vrm.scene}
40-
ref={vehicleRef}
41-
// position={[0, 0, 0]}
42-
rotation={[0, Math.PI, 0]}
43-
scale={1.05}
44-
/>
45-
<mesh ref={playerRef}>
46-
<boxGeometry args={[1, 1, 1]} />
47-
<meshPhysicalMaterial color="yellow" opacity={0.5} transparent />
48-
<pointLight distance={4} intensity={2} position={[0, 0, 0]} />
49-
</mesh>
44+
<group ref={vehicleRef}>
45+
<primitive
46+
object={vrm.scene}
47+
position={[0, 0, 0]}
48+
rotation={[0, Math.PI, 0]}
49+
scale={1.05}
50+
/>
51+
</group>
52+
<group ref={playerRef}></group>
5053
</>
5154
)
5255
}

app/src/components/xr/player.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ export const Player = () => {
99
useXRControllerLocomotion(originRef)
1010

1111
return (
12-
<XROrigin position={[0, 0, 1]} ref={originRef} />
12+
<XROrigin ref={originRef} />
1313
)
1414
}

packages/react-three-yuka/src/hooks/use-yuka.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import type { ThreeElement } from '@react-three/fiber'
2-
import type { Ref } from 'react'
3-
import type { Group, Quaternion, Vector3 } from 'three'
1+
import type { RefObject } from 'react'
2+
import type { Group, Object3DEventMap, Quaternion, Vector3 } from 'three'
43
import type { GameEntity } from 'yuka'
54

65
import { useEffect, useMemo, useRef } from 'react'
@@ -13,9 +12,9 @@ export interface UseYukaOptions {
1312

1413
export const useYuka = <T extends typeof GameEntity>(Entity: T, options: UseYukaOptions = {
1514
position: [0, 0, 0],
16-
}): [Ref<ThreeElement<typeof Group>>, InstanceType<T>] => {
15+
}): [RefObject<Group<Object3DEventMap> | null>, InstanceType<T>] => {
1716
const entityManager = useEntityManager()
18-
const ref = useRef<ThreeElement<typeof Group>>(null)
17+
const ref = useRef<Group>(null)
1918
const entity = useMemo(() => new Entity() as InstanceType<T>, [Entity])
2019

2120
useEffect(() => {

0 commit comments

Comments
 (0)