Create, Compete & Win at Redbrick Connect 2024! ๐ŸŽ‰

Object3D

์ด API๋Š” Scene๊ณผ Sprite๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ์ฒด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์†Œ๋“œ

.go()

.go(dx, dy, dz)

๊ฐ์ฒด๊ฐ€ ์ฆ‰์‹œ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  • dx : x ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

  • dy : y ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

  • dz : z ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

.move()

.move(dx, dy, dz, duration)

๊ฐ์ฒด๊ฐ€ ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ TWEEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • dx : x ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

  • dy : y ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

  • dz : z ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ.

duration : ์ด๋™ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„. ๋‹จ์œ„๋Š” ์ดˆ(sec)์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.

.rotate()

.rotate(dx, dy, dz)

๊ฐ์ฒด๊ฐ€ ์ฆ‰์‹œ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค.

  • dx : x์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

  • dy : y์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

  • dz : z์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

.turn()

.turn(dx, dy, dz, duration)

๊ฐ์ฒด๊ฐ€ ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ TWEEN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • dx : x์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

  • dy : y์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

  • dz : z์ถ• ์ฃผ์œ„์˜ ํšŒ์ „ ๊ฐ๋„. ๋‹จ์œ„๋Š” ๋„(degrees).

duration : ํšŒ์ „ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„. ๋‹จ์œ„๋Š” ์ดˆ(sec)์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ž…๋‹ˆ๋‹ค.

.onCollide()

.onCollide(target, callback, trigger)

๊ฐ์ฒด๊ฐ€ ๋Œ€์ƒ ๊ฐ์ฒด์™€ ์ถฉ๋Œํ•  ๋•Œ ์ง€์ •๋œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด์™€ ๋Œ€์ƒ ๊ฐ์ฒด ๋ชจ๋‘ Physics Body๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • target : ์ถฉ๋Œํ•˜๋Š” ๊ฐ์ฒด ๋˜๋Š” ๊ทธ ์ œ๋ชฉ.

  • callback : ๋Œ€์ƒ ๊ฐ์ฒด์™€ ์ถฉ๋Œํ•  ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜. this ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

  • trigger : ์ถฉ๋Œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์กฐ๊ฑด. ๊ธฐ๋ณธ๊ฐ’์€ โ€œstartโ€.

    - โ€œstartโ€ : ์ถฉ๋Œ ์‹œ์ž‘ ์‹œ ํ•œ ๋ฒˆ ๋ฐœ์ƒ.

    - โ€œcollisionโ€ : ์ถฉ๋Œํ•˜๋Š” ๋™์•ˆ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒ.

    - โ€œendโ€ : ์ถฉ๋Œ ์ข…๋ฃŒ ์‹œ ํ•œ ๋ฒˆ ๋ฐœ์ƒ.

.setDynamic()

.setDynamic(boolean)

๊ฐ์ฒด์˜ ์›€์ง์ž„ ์ œ์–ด ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋™์ ์ด๋ฉด ๊ทธ ์›€์ง์ž„์€ ์ค‘๋ ฅ์„ ํฌํ•จํ•œ ํž˜์— ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฉฐ ๋ฌผ๋ฆฌ ์—”์ง„์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
๊ฐ์ฒด๊ฐ€ ์šด๋™ํ•™์ ์ด๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์œ„์น˜์™€ ํšŒ์ „์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ์ฒด๋Š” Physics Body๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • boolean : true์ด๋ฉด ๋™์ ์œผ๋กœ, false์ด๋ฉด ์šด๋™ํ•™์ ์œผ๋กœ ๋ณ€๊ฒฝ.

.applyForce()

.applyForce(x, y, z)

๊ฐ์ฒด์— ํž˜์„ ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” Physics Body๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  ๋™์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • x : x์ถ• ๋ฐฉํ–ฅ์˜ ํž˜์˜ ์–‘.

  • y : y์ถ• ๋ฐฉํ–ฅ์˜ ํž˜์˜ ์–‘.

  • z : z์ถ• ๋ฐฉํ–ฅ์˜ ํž˜์˜ ์–‘.

.kill()

๊ฐ์ฒด๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

.revive()

kill() ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ์ œ๊ฑฐ๋œ ๊ฐ์ฒด๋ฅผ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.

.onClick()

.onClick(callback)

๊ฐ์ฒด๋ฅผ ํด๋ฆญํ•  ๋•Œ ์‹คํ–‰ํ•  ์ง€์ •๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

callback : ํด๋ฆญํ•  ๋•Œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜. this ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

.getAudio()

๊ฐ์ฒด์˜ ์ž์‹๋“ค ์ค‘ ์ฒซ ๋ฒˆ์งธ ์˜ค๋””์˜ค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šด๋“œ ์—์…‹์„ ์ถ”๊ฐ€ํ•œ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์˜ค๋””์˜ค๋ฅผ ์žฌ์ƒ/์ •์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// Sound Assetโ€‹
this.getAudio().stop(); // stop audio
this.getAudio().play(); // play audio

Audio ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์„ค๋ช…์€ THREE-Audio ๋ถ€๋ถ„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

.cloneWithMethods()

ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ์˜ Behavior์™€ Physics ์†์„ฑ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ๋“ค์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ณต์ œ๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” THREE.Object3D์™€ ํ˜„์žฌ ํŽ˜์ด์ง€์— ๋‚˜์—ด๋œ ์†์„ฑ ๋ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋‹จ, Physics์†์„ฑ์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ .onCollide()๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

โš ๏ธ

๋ณต์ œํ•œ ์˜ค๋ธŒ์ ํŠธ๋Š” WORLD์— ์ž์‹์œผ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

EX
const obj = WORLD.getObject("obj");
const clone_obj = obj.cloneWithMethods();
WORLD.add(clone_obj);
clone_obj.position.set(10, 1, 10);