Pointer Lock APIμ κΈ°λ₯, μ ν리μΌμ΄μ , λΈλΌμ°μ νΈνμ±, 보μ κ³ λ € μ¬ν λ° κ°λ°μμ© κ΅¬ν μμ μ λν μ¬μΈ΅ κ°μ΄λμ λλ€.
Pointer Lock API: λͺ°μ ν κ²½νμ μν κ³ κΈ λ§μ°μ€ 컀μ μ μ΄
Pointer Lock API(μ΄μ Mouse Lock API)λ μΉ μ ν리μΌμ΄μ μ΄ λ§μ°μ€ μμ§μμ λ μ§μ μ μΌλ‘ μ κ·Όν μ μκ² ν΄μ£Όλ κ°λ ₯ν μλ°μ€ν¬λ¦½νΈ APIμ λλ€. μ΄λ νΉν 1μΈμΉ κ²μ, 3D νκ²½, μΈν°λν°λΈ λμμΈ λꡬμ κ°μ΄ 컀μλ₯Ό μ¨κΈ°κ³ κ·Έ μμ§μμ μ§μ νλμΌλ‘ λ³νν΄μΌ νλ λͺ°μ ν κ²½νμ λ§λλ λ° μ μ©ν©λλ€. μ΄ APIλ₯Ό ν΅ν΄ κ°λ°μλ λ§μ°μ€ μμ§μμ μΊ‘μ²νκ³ μ»€μκ° λΈλΌμ°μ μ°½ κ°μ₯μ리μ λλ¬νλλΌλ μ§μμ μΌλ‘ λΈν(μμΉ λ³νλ)λ₯Ό μμ ν μ μμ΅λλ€. λ€μ μΉμ μμλ APIμ κΈ°λ₯, μ ν리μΌμ΄μ , 보μ μΈ‘λ©΄μ μμΈν μ΄ν΄λ³΄κ³ μ€μ μμ λ₯Ό μ 곡ν©λλ€.
Pointer Lock API μ΄ν΄νκΈ°
Pointer Lock APIλ₯Ό μ¬μ©νλ©΄ λ§μ°μ€ 컀μλ₯Ό λΈλΌμ°μ μ°½μ κ³ μ νμ¬ ν¨κ³Όμ μΌλ‘ μ¨κΈ°κ³ μλμ μΈ λ§μ°μ€ μμ§μ μ 보λ₯Ό μ 곡ν μ μμ΅λλ€. μ¦, μ ν리μΌμ΄μ μ 컀μμ μ λ μμΉ λμ λ§μ§λ§ νλ μ μ΄νμ X λ° Y μ’ν λ³νλμ μμ ν©λλ€. μ΄λ μΈν°λν°λΈνκ³ λͺ°μ κ° μλ μΉ μ ν리μΌμ΄μ μ λ§λ€κΈ° μν νλΆν κ°λ₯μ±μ μ΄μ΄μ€λλ€.
μ£Όμ κΈ°λ₯ λ° μ±λ₯
- 컀μ μ¨κΈ°κΈ°: APIλ μ¬μ©μμκ²μ λ§μ°μ€ 컀μλ₯Ό μ¨κ²¨ λ κΉλνκ³ λͺ°μ κ° μλ κ²½νμ μ 곡ν©λλ€.
- μλμ μμ§μ: μ λμ μΈ λ§μ°μ€ μ’ν λμ APIλ μλμ μΈ μμ§μ λ°μ΄ν°(λΈν)λ₯Ό μ 곡νμ¬ λΆλλ½κ³ μ§μμ μΈ μνΈμμ©μ κ°λ₯νκ² ν©λλ€.
- κ²½κ³ μ΄μ: 컀μκ° λ μ΄μ λΈλΌμ°μ μ°½ κ°μ₯μ리μμ λ©μΆμ§ μμΌλ©°, μμ§μμ΄ λκΉ μμ΄ κ³μλ©λλ€.
- νμΆ μ₯μΉ: μ¬μ©μλ μΌλ°μ μΌλ‘ Escape ν€λ₯Ό λλ¬ ν¬μΈν° μ κΈμ μ’ λ£νκ³ μ»€μ μ μ΄κΆμ λμ°Ύμ μ μμ΅λλ€. μ΄ κΈ°λ₯μ λΈλΌμ°μ μ λ°λΌ λ€λ₯΄λ―λ‘ μ μ μΌλ‘ μμ‘΄ν΄μλ μ λλ©°, μ κΈ ν΄μ λ₯Ό μν λ체 UI μμλ₯Ό μ 곡ν΄μΌ ν©λλ€.
Pointer Lock API μ¬μ© μμ
Pointer Lock APIλ λ€μκ³Ό κ°μ΄ μ§μ μ μ΄κ³ μ§μμ μΈ λ§μ°μ€ μ λ ₯μ΄ νμν μλ리μ€μμ κ°μ₯ μ μ©ν©λλ€:
- 1μΈμΉ κ²μ: 3D νκ²½μμ μΉ΄λ©λΌμ νλ μ΄μ΄ μμ§μμ μ μ΄ν©λλ€.
- 3D λͺ¨λΈλ§ λ° λμμΈ λꡬ: κ°μ²΄λ₯Ό μ‘°μνκ³ μ₯λ©΄μ νμν©λλ€.
- κ°μ νμ€(VR) κ²½ν: VR νκ²½ λ΄μμ μμ°μ€λ¬μ΄ μνΈμμ©μ μ 곡ν©λλ€.
- μ격 λ°μ€ν¬ν± μ ν리μΌμ΄μ : μ격 μ»΄ν¨ν°μμ λ§μ°μ€ μμ§μμ μ ννκ² λ³΅μ ν©λλ€.
- μΈν°λν°λΈ μ§λ: μ§λ λ·°λ₯Ό ν¨λνκ³ μ€ν©λλ€.
Pointer Lock API ꡬννκΈ°
Pointer Lock APIλ₯Ό ꡬννλ €λ©΄ μ κΈμ μμ²νκ³ , μμ§μ μ΄λ²€νΈλ₯Ό μ²λ¦¬νκ³ , νμν λ μ κΈμ ν΄μ ν΄μΌ ν©λλ€. λ€μμ λ¨κ³λ³ κ°μ΄λμ λλ€:
1. ν¬μΈν° μ κΈ μμ²νκΈ°
ν¬μΈν° μ κΈμ μμ²νλ €λ©΄ μμμμ requestPointerLock() λ©μλλ₯Ό νΈμΆν΄μΌ ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ λ²νΌ ν΄λ¦μ΄λ ν€ λλ¦κ³Ό κ°μ μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ μνλ©λλ€. λΈλΌμ°μ 보μ μ μ±
μ μ€μνλ €λ©΄ μμ²μ΄ μ¬μ©μ μ μ€μ²μ μν΄ νΈλ¦¬κ±°λλλ‘ νλ κ²μ΄ μ€μν©λλ€. requestPointerLock()μ νΈμΆνλ μμκ° *λμ* μμμ
λλ€. λ§μ°μ€ μ΄λ²€νΈλ μ΄ μμλ₯Ό κΈ°μ€μΌλ‘ μλμ μΌλ‘ λ°μν©λλ€.
μμ :
const element = document.getElementById('myCanvas');
element.addEventListener('click', () => {
element.requestPointerLock = element.requestPointerLock ||
element.mozRequestPointerLock ||
element.webkitRequestPointerLock;
// Ask the browser to lock the pointer
element.requestPointerLock();
});
ν¬λ‘μ€ λΈλΌμ°μ νΈνμ±: μ½λ μ€λν«μ μ΄μ λΈλΌμ°μ λ₯Ό μν΄ μ λμ¬λ₯Ό μ¬μ©ν©λλ€. λΈλΌμ°μ μ§μμ λ°λΌ `element.requestPointerLock`μ μ¬λ°λ₯Έ 곡κΈμ 체 μ λμ¬κ° λΆμ ν¨μλ₯Ό ν λΉν©λλ€. μ΅μ λΈλΌμ°μ λ μΌλ°μ μΌλ‘ μ λμ¬κ° νμνμ§ μμ΅λλ€.
2. ν¬μΈν° μ κΈ λ³κ²½ κ°μ§νκΈ°
ν¬μΈν° μ κΈμ΄ μ±κ³΅μ μΌλ‘ νλλκ±°λ μμ€λμμ λλ₯Ό μκΈ° μν΄ pointerlockchange μ΄λ²€νΈλ₯Ό μμ ν΄μΌ ν©λλ€. μ΄ μ΄λ²€νΈλ document κ°μ²΄μμ λ°μν©λλ€.
μμ :
document.addEventListener('pointerlockchange', lockChangeAlert, false);
document.addEventListener('mozpointerlockchange', lockChangeAlert, false);
document.addEventListener('webkitpointerlockchange', lockChangeAlert, false);
function lockChangeAlert() {
if (document.pointerLockElement === element ||
document.mozPointerLockElement === element ||
document.webkitPointerLockElement === element) {
console.log('The pointer lock is now locked.');
document.addEventListener("mousemove", moveCallback, false);
} else {
console.log('The pointer lock is now unlocked.');
document.removeEventListener("mousemove", moveCallback, false);
}
}
μ΄ μ½λλ documentμ pointerlockchange(λ° μ λμ¬κ° λΆμ λ²μ )μ λν μ΄λ²€νΈ 리μ€λλ₯Ό μ€μ ν©λλ€. `lockChangeAlert` ν¨μλ ν¬μΈν°κ° λμ μμμ μ 겨 μλμ§ νμΈν©λλ€. μ 겨 μμΌλ©΄ `mousemove` μ΄λ²€νΈ 리μ€λλ₯Ό μΆκ°νκ³ , μ κΈ ν΄μ λλ©΄ 리μ€λλ₯Ό μ κ±°ν©λλ€. μ΄λ κ² νλ©΄ ν¬μΈν°κ° μ 겨 μμ λλ§ λ§μ°μ€ μμ§μμ΄ μΆμ λ©λλ€.
3. λ§μ°μ€ μμ§μ μ²λ¦¬νκΈ°
ν¬μΈν°κ° μ 겨 μμ λ MouseEvent κ°μ²΄μ movementX λ° movementY μμ±μ ν΅ν΄ μλμ μΈ λ§μ°μ€ μμ§μ λ°μ΄ν°μ μ κ·Όν μ μμ΅λλ€. μ΄ μμ±λ€μ λ§μ§λ§ μ΄λ²€νΈ μ΄νμ λ§μ°μ€ μμΉ λ³νλ₯Ό λνλ
λλ€.
μμ :
function moveCallback(e) {
var movementX = e.movementX ||
e.mozMovementX ||
e.webkitMovementX ||
0;
var movementY = e.movementY ||
e.mozMovementY ||
e.webkitMovementY ||
0;
// Update the position of the box accordingly
box.style.top = parseInt(box.style.top) + movementY + 'px';
box.style.left = parseInt(box.style.left) + movementX + 'px';
}
μ΄ μ½λλ λ§μ°μ€κ° μμ§μΌ λλ§λ€ νΈμΆλλ `moveCallback` ν¨μλ₯Ό μ μν©λλ€. (μ΄μ λΈλΌμ°μ λ₯Ό μν΄ λ€μ μ λμ¬λ₯Ό μ¬μ©νμ¬) `MouseEvent` κ°μ²΄μμ `movementX` λ° `movementY` μμ±μ μΆμΆν©λλ€. κ·Έλ° λ€μ μ΄λ¬ν μμ§μ κ°μ κΈ°λ°μΌλ‘ `box` μμμ μμΉλ₯Ό μ λ°μ΄νΈν©λλ€.
4. ν¬μΈν° μ κΈ ν΄μ νκΈ°
ν¬μΈν° μ κΈμ ν΄μ νλ €λ©΄ document κ°μ²΄μμ exitPointerLock() λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€. μΌλ°μ μΌλ‘ λ²νΌμ΄λ ν€ λλ¦(μ: Escape ν€)μ ν΅ν΄ μ¬μ©μκ° ν¬μΈν° μ κΈμ μ’
λ£ν μ μλ λ°©λ²μ μ 곡νλ κ²μ΄ μ€μν©λλ€.
μμ :
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
document.exitPointerLock = document.exitPointerLock ||
document.mozExitPointerLock ||
document.webkitExitPointerLock;
document.exitPointerLock();
}
});
μ΄ μ½λλ 'Escape' ν€ λλ¦μ κ°μ§ν©λλ€. κ°μ§λλ©΄ `document.exitPointerLock()`μ νΈμΆνμ¬ ν¬μΈν° μ κΈμ ν΄μ νκ³ μ¬μ©μκ° λ§μ°μ€ 컀μμ μ μ΄κΆμ λμ°Ύμ μ μλλ‘ ν©λλ€. μ΄κ²μ ν¬μΈν° μ κΈ μλ리μ€μμ μ¬μ©μκ° κΈ°λνλ μΌλ°μ μΈ λμμ λλ€.
λΈλΌμ°μ νΈνμ±
Pointer Lock APIλ Chrome, Firefox, Safari, Edgeλ₯Ό ν¬ν¨ν μ΅μ λΈλΌμ°μ μμ λ리 μ§μλ©λλ€. κ·Έλ¬λ APIλ₯Ό μ¬μ©νκΈ° μ μ νμ λΈλΌμ°μ νΈνμ±μ νμΈνλ κ²μ΄ μ’μ΅λλ€.
μμμ requestPointerLock λ©μλκ° μλμ§ νμΈνμ¬ νΈνμ±μ νμΈν μ μμ΅λλ€:
if ('requestPointerLock' in element) {
// Pointer Lock API is supported
} else {
// Pointer Lock API is not supported
console.log('Pointer Lock API is not supported in this browser.');
}
보μ κ³ λ € μ¬ν
Pointer Lock APIλ μΉ μ ν리μΌμ΄μ μ΄ λ§μ°μ€ 컀μλ₯Ό μ μ΄νκ³ λͺ μμ μΈ λμ μμ΄ μ¬μ©μ μ λ ₯μ μΊ‘μ²ν μ μλ κ°λ₯μ±μ΄ μμΌλ―λ‘ λ³΄μμ μν₯μ λ―ΈμΉ©λλ€. λΈλΌμ°μ λ μ΄λ¬ν μνμ μννκΈ° μν΄ λͺ κ°μ§ 보μ μ‘°μΉλ₯Ό ꡬνν©λλ€:
- μ¬μ©μ μ μ€μ² μꡬ μ¬ν: μ
μμ μΈ μΉμ¬μ΄νΈκ° μλμΌλ‘ ν¬μΈν°λ₯Ό μ κ·Έλ κ²μ λ°©μ§νκΈ° μν΄
requestPointerLock()λ©μλλ μ¬μ©μ μ μ€μ²(μ: λ²νΌ ν΄λ¦)μ λν μλ΅μΌλ‘ νΈμΆλμ΄μΌ ν©λλ€. - νμΆ μ₯μΉ: μ¬μ©μλ μΌλ°μ μΌλ‘ Escape ν€λ₯Ό λλ¬ ν¬μΈν° μ κΈμ μ’ λ£ν μ μμ΅λλ€.
- ν¬μ»€μ€ μꡬ μ¬ν: Pointer Lock APIκ° μλνλ €λ©΄ λΈλΌμ°μ μ°½μ ν¬μ»€μ€κ° μμ΄μΌ ν©λλ€.
- κΆν API: μΌλΆ λΈλΌμ°μ λ ν¬μΈν° μ κΈ μ‘μΈμ€λ₯Ό νμ©νκΈ° μ μ λͺ μμ μΈ μ¬μ©μ κΆνμ μꡬν μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘: μ¬μ©μλ₯Ό νΌλμ€λ½κ² νκ±°λ μ’μ μν€μ§ μλλ‘ κ°λ ₯ν μ’ λ£ μ λ΅μ ꡬννκ³ ν¬μΈν° μ κΈμ΄ νμ±νλ μμ μ λͺ ννκ² νμνλ κ²μ΄ μ€μν©λλ€.
μ κ·Όμ± κ³ λ € μ¬ν
Pointer Lock APIλ λͺ°μ ν κ²½νμ ν₯μμν¬ μ μμ§λ§, μ₯μ κ° μλ μ¬μ©μμκ²λ μ κ·Όμ± λ¬Έμ λ₯Ό μΌκΈ°ν μλ μμ΅λλ€. λ€μμ κ³ λ €νμμμ€:
- λ체 μ λ ₯ λ°©λ²: λ§μ°μ€λ₯Ό μ¬μ©ν μ μλ μ¬μ©μλ₯Ό μν΄ λ체 μ λ ₯ λ°©λ²(μ: ν€λ³΄λ 컨νΈλ‘€)μ μ 곡νμμμ€.
- μκ°μ λ¨μ: νΉν 컀μκ° μ¨κ²¨μ Έ μμ λ 컀μμ μμΉλ μ΄μ μ λνλ΄λ λͺ νν μκ°μ λ¨μλ₯Ό μ 곡νμμμ€.
- μ¬μ©μ μ§μ κ°λ: μ¬μ©μκ° κ°μΈμ νμμ λ§κ² λ§μ°μ€ μμ§μμ κ°λλ₯Ό μ‘°μ ν μ μλλ‘ νμμμ€.
- λͺ νν μ’ λ£ μ λ΅: μΌλΆ μ¬μ©μμκ²λ λ°©ν₯ κ°κ°μ μκ² ν μ μμΌλ―λ‘ μ¬μ©μκ° ν¬μΈν° μ κΈ λͺ¨λλ₯Ό μ½κ² μ’ λ£ν μ μλλ‘ νμμμ€.
μμ λ° μ¬μ© μ¬λ‘
1μΈμΉ μν (FPS) κ²μ
Pointer Lock APIλ λΈλΌμ°μ μμ λͺ°μ ν FPS κ²μμ λ§λλ λ° νμμ μ λλ€. μ΄λ₯Ό ν΅ν΄ νλ μ΄μ΄λ μ λ°ν λ§μ°μ€ μμ§μμΌλ‘ μΉ΄λ©λΌλ₯Ό μ μ΄νκ³ λ¬΄κΈ°λ₯Ό μ‘°μ€ν μ μμ΅λλ€. μλμ μΈ λ§μ°μ€ μμ§μ λ°μ΄ν°λ μΉ΄λ©λΌμ λ°©ν₯μ μ λ°μ΄νΈνλ λ° μ¬μ©λμ΄ λΆλλ½κ³ λ°μμ±μ΄ λ°μ΄λ μ‘°μ€ κ²½νμ μ 곡ν©λλ€.
μμ : νλ μ΄μ΄κ° 3D νκ²½μ νμνκ³ μλ‘λ₯Ό μλ μΉ κΈ°λ° λ©ν°νλ μ΄μ΄ FPS κ²μμ μμν΄ λ³΄μμμ€. Pointer Lock APIλ λ§μ°μ€ μμ§μμ΄ μ§μ μΉ΄λ©λΌ νμ μΌλ‘ λ³νλλλ‘ λ³΄μ₯νμ¬ κ²½μλ ₯ μκ³ λ§€λ ₯μ μΈ κ²μ νλ μ΄ κ²½νμ μ 곡ν©λλ€. μ λ λ§μ°μ€ μμΉμ μμ‘΄νλ λμμ ν¬λ°νκ³ νλ μ΄ν μ μμ κ²μ λλ€.
3D λͺ¨λΈλ§ λꡬ
3D λͺ¨λΈλ§ λꡬμμ Pointer Lock APIλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μ‘°μνκ³ μ₯λ©΄μ νμν μ μμ΅λλ€. μ¬μ©μλ μ§κ΄μ μΈ λ§μ°μ€ μ μ€μ²λ₯Ό μ¬μ©νμ¬ λ·°λ₯Ό νμ , νλ/μΆμ λ° ν¨λν μ μμ΅λλ€. APIλ 3D νκ²½κ³Ό μνΈ μμ©νλ μμ°μ€λ½κ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€.
μμ : κ°κ΅¬ λμμΈμ μν μΉ μ ν리μΌμ΄μ μ μκ°ν΄ 보μμμ€. μ¬μ©μλ μμμ 3D λͺ¨λΈμ λ€λ₯Έ κ°λμμ 보기 μν΄ νμ ν΄μΌ ν©λλ€. ν¬μΈν° μ κΈμ μ¬μ©νλ©΄ μμλ₯Ό ν΄λ¦νκ³ λλκ·Έν μ μμΌλ©°, λ§μ°μ€ μμ§μμ΄ μ§μ νμ μ μ μ΄νμ¬ λ²νΌμ΄λ μ¬λΌμ΄λλ₯Ό μ¬μ©νλ κ²λ³΄λ€ λμμΈ νλ‘μΈμ€κ° λ μ μ°νκ³ μ§κ΄μ μ λλ€.
κ°μ νμ€(VR) νκ²½
Pointer Lock APIλ κ°μ μΈκ³μ μνΈ μμ©νλ λ μμ°μ€λ¬μ΄ λ°©λ²μ μ 곡νμ¬ λΈλΌμ°μ μμ VR κ²½νμ ν₯μμν¬ μ μμ΅λλ€. μ¬μ©μλ λ§μ°μ€λ₯Ό μ¬μ©νμ¬ VR νκ²½ λ΄μμ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ³ , μ ννκ³ , μ‘°μν μ μμ΅λλ€. WebXRκ³Ό κ²°ν©λ ν¬μΈν° μ κΈμ λ§€μ° λͺ°μ κ° μκ³ μΈν°λν°λΈν VR μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.
μμ : κ°μ λ°λ¬Όκ΄ ν¬μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ 3D νκ²½μμ μμ¬μ μ λ¬Όμ νμν μ μμ΅λλ€. ν¬μΈν° μ κΈμ μ¬μ©νμ¬ λ§μ°μ€λ‘ κ°μ κ°μ²΄μ "μμ λ»μ΄" μνΈ μμ©νκ³ , μΈλΆ μ 보λ₯Ό 보기 μν΄ νλνκ±°λ μ 체 보기λ₯Ό μν΄ νμ νμ¬ μλμ μΌλ‘ λΉλμ€λ₯Ό 보λ κ²λ³΄λ€ λ λ§€λ ₯μ μ΄κ³ κ΅μ‘μ μΈ κ²½νμ μ 곡ν μ μμ΅λλ€.
κ³ κΈ κΈ°μ
κ²μν¨λμ κ²°ν©νκΈ°
Pointer Lock APIλ₯Ό κ²μν¨λ μ λ ₯κ³Ό κ²°ν©νμ¬ νμ΄λΈλ¦¬λ μ μ΄ λ°©μμ λ§λ€ μ μμ΅λλ€. μλ₯Ό λ€μ΄, νλ μ΄μ΄ μ΄λμλ κ²μν¨λλ₯Ό μ¬μ©νκ³ μ‘°μ€μλ λ§μ°μ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ€λ¬΄λ© λ° νν°λ§ ꡬννκΈ°
λ§μ°μ€ μμ§μμ λΆλλ¬μμ κ°μ νκΈ° μν΄ μ€λ¬΄λ© λ° νν°λ§ κΈ°μ μ ꡬνν μ μμ΅λλ€. μ΄λ μ§ν°λ₯Ό μ€μ΄κ³ λ μμ μ μ΄κ³ λ°μμ±μ΄ λ°μ΄λ κ²½νμ λ§λλ λ° λμμ΄ λ μ μμ΅λλ€.
μ¬μ©μ μ§μ 컀μ ꡬννκΈ°
Pointer Lock APIλ μμ€ν 컀μλ₯Ό μ¨κΈ°μ§λ§, μ ν리μΌμ΄μ λ΄μμ μ¬μ©μ μ§μ 컀μλ₯Ό ꡬννμ¬ μ¬μ©μμκ² μκ°μ νΌλλ°±μ μ 곡ν μ μμ΅λλ€. μ΄λ VR νκ²½μ΄λ λ νΉν μκ°μ μ€νμΌμ μ 곡νκ³ μ ν λ νΉν μ μ©ν μ μμ΅λλ€.
μΌλ°μ μΈ λ¬Έμ ν΄κ²°
ν¬μΈν° μ κΈμ΄ μλνμ§ μμ λ
Pointer Lock APIκ° μλνμ§ μλ κ²½μ° λ€μμ νμΈνμμμ€:
- μ¬μ©μ μ μ€μ²:
requestPointerLock()λ©μλκ° μ¬μ©μ μ μ€μ²μ λν μλ΅μΌλ‘ νΈμΆλλμ§ νμΈνμμμ€. - λΈλΌμ°μ ν¬μ»€μ€: λΈλΌμ°μ μ°½μ ν¬μ»€μ€κ° μλμ§ νμΈνμμμ€.
- κΆν: λΈλΌμ°μ κ° ν¬μΈν° μ κΈ μ‘μΈμ€μ λν΄ λͺ μμ μΈ μ¬μ©μ κΆνμ μꡬνλμ§ νμΈνμμμ€.
- CORS: μ ν리μΌμ΄μ μ΄ κ΅μ°¨ μΆμ² 컨ν μ€νΈμμ μ€ν μ€μΈ κ²½μ° νμν CORS ν€λκ° κ΅¬μ±λμλμ§ νμΈνμμμ€.
λ§μ°μ€ μμ§μμ΄ μ ννμ§ μμ λ
λ§μ°μ€ μμ§μ λ°μ΄ν°κ° μ ννμ§ μμ κ²½μ° λ€μμ κ³ λ €νμμμ€:
- μ€λ¬΄λ© λ° νν°λ§: μ§ν°λ₯Ό μ€μ΄κΈ° μν΄ μ€λ¬΄λ© λ° νν°λ§ κΈ°μ μ ꡬννμμμ€.
- μ€μΌμΌλ§: μ ν리μΌμ΄μ μ μꡬμ λ§κ² λ§μ°μ€ μμ§μ λ°μ΄ν°μ μ€μΌμΌλ§ ν©ν°λ₯Ό μ‘°μ νμμμ€.
- νλ μλ₯ : μ ν리μΌμ΄μ μ΄ μμ μ μΈ νλ μλ₯ λ‘ μ€νλκ³ μλμ§ νμΈνμμμ€.
κ²°λ‘
Pointer Lock APIλ λͺ°μ κ° μκ³ μΈν°λν°λΈν μΉ μ ν리μΌμ΄μ μ λ§λλ λ° μ μ©ν λꡬμ λλ€. κ°λ°μλ μ΄ APIμ κΈ°λ₯, 보μ κ³ λ € μ¬ν λ° μ κ·Όμ± μν₯μ μ΄ν΄ν¨μΌλ‘μ¨ λ€μν νλ«νΌκ³Ό μ₯μΉμμ λ§€λ ₯μ μΈ κ²½νμ μ 곡ν μ μμ΅λλ€. κ²μμμ λμμΈ, κ°μ νμ€μ μ΄λ₯΄κΈ°κΉμ§ Pointer Lock APIλ μ λ°νκ³ μ§κ΄μ μΈ λ§μ°μ€ 컀μ μ μ΄λ₯Ό μν κΈ°λ°μ μ 곡νμ¬ μΉ κΈ°λ° μνΈ μμ©μ μλ‘μ΄ κ°λ₯μ±μ μ΄μ΄μ€λλ€.
μΉ κΈ°μ μ΄ κ³μ λ°μ ν¨μ λ°λΌ Pointer Lock APIλ μμ¬ν μ¬μ§ μμ΄ λͺ°μ ν μΉ κ²½νμ λ―Έλλ₯Ό νμ±νλ λ° μ μ λ μ€μν μν μ ν κ²μ λλ€. κ°λ°μλ μ΅μ μ 보λ₯Ό μ μ§νκ³ κ·Έ κΈ°λ₯μ μ€νν¨μΌλ‘μ¨ κ°λ₯ν κ²μ κ²½κ³λ₯Ό λνκ³ μ μΈκ³ μ¬μ©μλ₯Ό μν μ§μ μΌλ‘ νμ μ μ΄κ³ λ§€λ ₯μ μΈ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.