> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-ko/sdk7/interactivity/deprecated-functions.md).

# 사용 중단된 함수

레거시 함수

다음 함수들은 모두 레거시이므로 사용하지 않는 것이 좋습니다. 아직은 작동하지만, 앞으로는 지원이 중단될 수도 있습니다. 아래의 모든 예시에는 동일한 정보를 얻거나 같은 결과를 달성하는 대체 방법으로 연결되는 링크가 포함되어 있습니다.

## 플레이어가 씬에 들어오거나 나감

{% hint style="warning" %}
**📔 참고**:  `onEnterSceneObservable` 및 `onLeaveSceneObservable` 이벤트는 SDK 7.x에서 더 이상 사용되지 않습니다. 대신 `onEnterScene` 를 사용하세요. 자세한 내용은 [플레이어가 씬에 들어오거나 나감](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-enters-or-leaves-scene).
{% endhint %}

아바타가 씬을 구성하는 토지 구획 안으로 들어가거나 밖으로 나갈 때, 또는 순간이동으로 들어오거나 나갈 때마다, 이를 들을 수 있는 이벤트가 생성됩니다. 이 이벤트는 플레이어를 포함한 모든 아바타에 의해 트리거됩니다.

```ts
import {
	onEnterSceneObservable,
	onLeaveSceneObservable,
} from '@dcl/sdk/observables'

onEnterSceneObservable.add((player) => {
	console.log('플레이어가 씬에 들어옴: ', player.userId)
})

onLeaveSceneObservable.add((player) => {
	console.log('플레이어가 씬에서 나감: ', player.userId)
})
```

{% hint style="warning" %}
**📔 참고**: 이 이벤트는 현재 로컬에서 렌더링되고 있는 플레이어에만 반응합니다. 씬 크기가 시각적 범위를 초과하는 큰 씬에서는 반대편 구석으로 들어오는 플레이어가 등록되지 않을 수 있습니다. 해당 지역의 플레이어 수가 Decentraland 서버의 섬 처리 한계를 넘는 경우, 같은 섬을 공유하지 않는 플레이어는 보이지 않으며 이 이벤트로도 추적되지 않습니다.
{% endhint %}

observable `onEnterScene` 및 `onLeaveScene` 가져온 `'@dcl/sdk/observables'` 도 더 이상 사용되지 않습니다. 올바른 함수는 이름은 같지만 `에서 가져옵니다.` 아래 예시에서는 사용 중단된 버전과 올바른 버전을 각각 볼 수 있습니다.

```ts
// 사용 중단됨 - observables에서 가져옴
import { onEnterScene, onLeaveScene } from '@dcl/sdk/observables'

onEnterScene.add((player) => {
	console.log('플레이어가 씬에 들어옴: ', player.userId)
})

onLeaveScene.add((player) => {
	console.log('플레이어가 씬에서 나감: ', player.userId)
})

// 현재 버전 - 플레이어 함수로 가져옴
import { onEnterScene, onLeaveScene } from '@dcl/sdk/src/players'

export function main() {
	onEnterScene((player) => {
		if (!player) return
		console.log('씬에 들어옴', player)
	})

	onLeaveScene((userId) => {
		if (!userId) return
		console.log('씬을 나감', userId)
	})
}
```

## 플레이어가 연결되거나 연결 해제됨

{% hint style="warning" %}
**📔 참고**:  `getConnectedPlayers` 함수와 `onPlayerConnectedObservable` 및 `onPlayerDisconnectedObservable` 이벤트는 SDK 7.x에서 더 이상 사용되지 않습니다. 대신 `onEnterScene` 를 사용하세요. 자세한 내용은 [플레이어가 씬에 들어오거나 나감](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-enters-or-leaves-scene). 이제 각 씬은 별도의 통신 섬이므로, 연결된 상태와 같은 씬에 있는 상태는 동일하게 취급됩니다.
{% endhint %}

현재 연결된 플레이어의 전체 목록을 `getConnectedPlayers`.

```ts
import { getConnectedPlayers } from '~system/Players'

executeTask(async () => {
	let connectedPlayers = await getConnectedPlayers({})
	connectedPlayers.players.forEach((player) => {
		console.log('플레이어가 이미 여기에 있었습니다: ', player.userId)
	})
})
```

다른 플레이어가 로컬 엔진에 의해 렌더링되기 시작하거나 중지될 때마다, 이를 들을 수 있는 이벤트가 생성됩니다. 플레이어는 당신과 같은 씬에 있을 수도 있고 아닐 수도 있지만, 시각적 범위 안에는 있어야 합니다(반드시 보이는 것은 아님). `onPlayerConnectedObservable` 는 플레이어가 근처에 새로 연결되었거나 시각적 범위 안으로 충분히 가까워졌을 때를 감지하고, 마찬가지로 `onPlayerDisconnectedObservable` 는 플레이어가 세션을 종료하거나 멀리 걸어갔을 때를 감지합니다.

```ts
import {
	onPlayerConnectedObservable,
	onPlayerDisconnectedObservable,
} from '@dcl/sdk/observables'

onPlayerConnectedObservable.add((player) => {
	console.log('플레이어가 들어옴: ', player.userId)
})

onPlayerDisconnectedObservable.add((player) => {
	console.log('플레이어가 나감: ', player.userId)
})
```

다른 플레이어가 플레이어가 씬을 불러오기 전에 이미 주변에서 렌더링되고 있었다면, 이 이벤트는 새로 로드된 씬에 이미 존재하던 플레이어를 알리지 않습니다. 현재 모든 플레이어를 추적해야 한다면 씬 로드 시 기존 플레이어를 조회한 다음, 업데이트를 위해 이 이벤트를 들으면 됩니다.

## 씬의 모든 플레이어 조회

{% hint style="warning" %}
**📔 참고**:  `getPlayersInScene` 함수는 SDK 7.x에서 더 이상 사용되지 않습니다. 대신 `PlayerIdentityData` 컴포넌트를 사용하여 모든 플레이어를 순회하세요. 자세한 내용은 [모든 플레이어 가져오기](/creator/content-creator-ko/sdk7/interactivity/user-data.md#fetch-all-players).
{% endhint %}

현재 씬에 있고 렌더링 중인 플레이어의 전체 목록은 `getPlayersInScene()`.

```ts
import { getPlayersInScene } from '~system/Players'

executeTask(async () => {
	let connectedPlayers = await getPlayersInScene({})
	connectedPlayers.players.forEach((player) => {
		console.log('플레이어가 이미 여기에 있었습니다: ', player.userId)
	})
})
```

## 플레이어가 애니메이션을 재생함

{% hint style="warning" %}
**📔 참고**:  `onPlayerExpressionObservable` 이벤트는 SDK 7.x에서 더 이상 사용되지 않습니다. 대신 `AvatarEmoteCommand` 컴포넌트를 사용하세요. 자세한 내용은 [플레이어가 애니메이션을 재생함](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-plays-animation).
{% endhint %}

플레이어가 이모트(댄스, 박수, 손 흔들기 등)를 할 때마다, 이 이벤트를 감지할 수 있습니다.

```ts
import { onPlayerExpressionObservable } from '@dcl/sdk/observables'

onPlayerExpressionObservable.add(({ expressionId }) => {
	console.log('표현: ', expressionId)
})
```

이 이벤트에는 다음 정보가 포함됩니다:

* expressionId: 수행된 이모트의 이름(예: *wave*, *clap*, *kiss*)

{% hint style="warning" %}
**📔 참고**: 이 이벤트는 플레이어가 이모트를 할 때마다 그리고 씬이 로드되어 있을 때 트리거됩니다. 이때 플레이어는 근처 씬에 서 있을 수도 있습니다.
{% endhint %}

## 플레이어가 프로필을 변경함

{% hint style="warning" %}
**📔 참고**:  `onProfileChanged` 이벤트는 SDK 7.x에서 더 이상 사용되지 않습니다. 대신 `AvatarEquippedData` 컴포넌트를 사용하세요. 자세한 내용은 [플레이어가 프로필을 변경함](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-changes-profile).
{% endhint %}

플레이어가 프로필을 변경할 때마다, `onProfileChanged` 이벤트가 호출됩니다. 이러한 변경에는 다른 착용 아이템 착용, 이름 변경, 설명 변경, 휴대형 경험 활성화 등이 포함될 수 있습니다.

```ts
import { onProfileChanged } from '@dcl/sdk/observables'

onProfileChanged.add((profileData) => {
	console.log('내 프로필 데이터는 ', profileData)
})
```

이벤트 데이터에는 catalyst 서버에 따라 플레이어의 ID와 해당 아바타 프로필의 버전 번호만 포함됩니다. 변경 사항이 전파될 때마다 버전 번호는 1씩 증가합니다.

이 이벤트가 트리거되면, [getUserData()](/creator/content-creator-ko/sdk7/interactivity/user-data.md#get-player-data) 함수를 사용하여 플레이어가 착용한 아이템 목록을 포함한 이 정보의 최신 버전을 가져올 수 있습니다. 호출하기 전에 약간의 지연을 추가해야 할 수도 있습니다. `getUserData()` 를 호출할 때 반환되는 버전이 최신 상태인지 확인하기 위해서입니다.

{% hint style="info" %}
**💡 팁**: 레거시 웹 익스플로러를 사용한 미리보기에서 무작위 아바타를 사용하지 않으려면, Metamask 지갑에 연결된 브라우저에서 씬을 실행하세요.
{% endhint %}

{% hint style="warning" %}
**📔 참고**: 이 이벤트는 현재 플레이어의 변경에 의해서만 트리거되며, 근처의 다른 플레이어 프로필 변경으로는 트리거되지 않습니다.
{% endhint %}

## 씬 로드 완료

{% hint style="warning" %}
**📔 참고**:  `onSceneReadyObservable` 이벤트는 SDK v7.x에서 더 이상 사용되지 않습니다. 이 함수는 더 이상 관련이 없습니다. 씬 로드가 끝난 후에 무언가를 실행하려면 `Main()` 함수 안에서 실행하면 됩니다. 자세한 내용은 [씬 라이프사이클](/creator/content-creator-ko/sdk7/getting-started/coding-scenes.md#scene-lifecycle)
{% endhint %}

씬 로드가 완료되면 `onSceneReadyObservable` 가 호출됩니다. 이는 플레이어가 바로 씬으로 들어오든, 다른 곳에서 씬까지 걸어오든 모두 동일하게 동작합니다. 무거운 모델 등을 포함해 씬의 모든 콘텐츠의 초기 로드가 끝나면 이 이벤트가 호출됩니다.

```ts
import { onSceneReadyObservable } from '@dcl/sdk/observables'

onSceneReadyObservable.add(() => {
	console.log('씬 로드됨')
})
```

## 사용 중단된 플레이어 데이터 메서드

{% hint style="warning" %}
**📔 참고**:  `getUserData()` 및 `getPlayerData()` 함수는 SDK v7.4.x부터 더 이상 사용되지 않습니다. 대신 `getPlayer()` 를 사용하세요. 자세한 내용은 [사용자 데이터](/creator/content-creator-ko/sdk7/interactivity/user-data.md#get-user-data).
{% endhint %}

씬을 실행 중인 현재 플레이어의 정보를 얻으려면 `getUserData()`.

아래 예시에서는 `~system/UserIdentity` 네임스페이스를 가져와 `getUserData()`.

```ts
import { getUserData } from '~system/UserIdentity'

executeTask(async () => {
	let userData = await getUserData({})
	console.log(userData.data)
})
```

근처에 있는 다른 플레이어의 데이터는 `getPlayerData()`를 호출하여 가져올 수 있으며, Decentraland 계정의 ID를 전달합니다.

```ts
import { getPlayerData } from '~system/Players'

executeTask(async () => {
	let userData = await getPlayerData({ userId: '0x….' })
	console.log(userData)
})
```

둘 다 `getUserData()` 및 `getPlayerData()` 콘텐츠 API를 통해 사용할 수 있는 것과 동일한 데이터 구조를 반환합니다. 자세한 내용은 [모든 플레이어의 데이터](/creator/content-creator-ko/sdk7/interactivity/user-data.md#data-from-any-player)

`getPlayerData()` 현재 근처에 있는 플레이어의 데이터만 가져올 수 있습니다. 반드시 같은 씬에 서 있을 필요는 없고 시각적 범위 안에만 있으면 됩니다. 이는 이 정보가 해당 아바타를 렌더링하는 로컬 엔진에서 가져오기 때문입니다. 미리보기에서 이 기능을 시험하려면 두 번째 탭을 열고 다른 계정으로 로그인하세요.

{% hint style="warning" %}
**📔 참고**: 사용자 ID는 항상 소문자여야 합니다. 지갑 주소를 복사하는 경우 모든 문자가 소문자인지 확인하세요.
{% endhint %}

그 `getUserPublicKey()` 및 `getUserAccount()` 함수도 더 이상 사용되지 않습니다. 대신 `getPlayer()` 를 사용하세요. 자세한 내용은 [사용자 데이터](/creator/content-creator-ko/sdk7/interactivity/user-data.md#get-user-data).

## 스카이박스 시간 가져오기

{% hint style="warning" %}
**📔 참고**:  `getDecentralandTime()` 함수는 SDK v7.x.x에서 더 이상 사용되지 않습니다. 대신 `getWorldTime()` 를 사용하세요. 자세한 내용은 [Decentraland 시간 가져오기](/creator/content-creator-ko/sdk7/interactivity/runtime-data.md#get-decentraland-time).
{% endhint %}

```ts
import { getDecentralandTime } from '~system/EnvironmentApi'

executeTask(async () => {
	let time = await getDecentralandTime({})
	console.log(time)
})
```

## 렐름 가져오기

{% hint style="warning" %}
**📔 참고**:  `getCurrentRealm()` 함수는 SDK v7.x.x에서 더 이상 사용되지 않습니다. 대신 `getRealm()` 를 사용하세요. 자세한 내용은 [Realm 데이터 가져오기](/creator/content-creator-ko/sdk7/interactivity/runtime-data.md#get-realm-data).
{% endhint %}

```ts
import { getCurrentRealm } from '~system/EnvironmentApi'

async function fetchPlayerData() {
	const playerRealm = await getCurrentRealm({})

	console.log(playerRealm.currentRealm?.domain)
}

fetchPlayerData()
```

## 미리보기 모드 여부

{% hint style="warning" %}
**📔 참고**:  `isPreviewMode()` 함수는 SDK v7.x.x에서 더 이상 사용되지 않습니다. 대신 `getRealm()` 대신, `preview` 속성을 포함합니다. 자세한 내용은 [Realm 데이터 가져오기](/creator/content-creator-ko/sdk7/interactivity/runtime-data.md#get-realm-data).
{% endhint %}

```ts
import { isPreviewMode } from '~system/EnvironmentApi'

executeTask(async () => {
	const { isPreview } = await isPreviewMode({})

	if (isPreview) {
		console.log('미리보기에서 실행 중')
	}
})
```

## 플레이어가 다른 플레이어를 클릭함

플레이어가 다른 플레이어를 클릭할 때마다, 이벤트를 감지할 수 있습니다.

```ts
import { onPlayerClickedObservable } from '@dcl/sdk/observables'

onPlayerClickedObservable.add((clickEvent) => {
	console.log('클릭됨 ', clickEvent.userId, ' 세부 정보: ', clickEvent.ray)
})
```

{% hint style="warning" %}
**📔 참고**:  `onPlayerClickedObservable` 이벤트는 SDK v7.x에서 더 이상 사용되지 않습니다. 향후 버전에서는 더 [데이터 지향적 접근 방식](/creator/content-creator-ko/sdk7/architecture/data-oriented-programming.md)을 지원할 예정이며, 이는 이벤트 대신 정기적으로 데이터를 조회하는 방식에 기반합니다.

대안으로, 플레이어에 보이지 않는 콜라이더를 부착하고 이에 대한 클릭을 감지할 수 있습니다.
{% endhint %}

{% hint style="warning" %}
**📔 참고**: 클릭하는 플레이어와 클릭당하는 플레이어 둘 다 씬의 구획 안에 서 있어야 합니다. 이 리스너는 다른 플레이어가 수행한 클릭이 아니라, 현재 플레이어가 다른 플레이어를 클릭하는 이벤트만 감지합니다.
{% endhint %}

이 이벤트에는 다음 데이터가 포함됩니다:

* `userId`: 클릭된 플레이어의 ID
* `ray`: 클릭에 의해 추적된 레이에 대한 데이터
  * `방향`: *Vector3* 클릭의 원점에서 히트 지점까지의 방향을 나타내는 정규화된 Vector3입니다.
  * `distance`: *number* 원점에서 히트 지점까지의 거리(미터)입니다.
  * `origin`: *Vector3* 클릭의 원점, 즉 클릭한 플레이어의 위치이며 씬을 기준으로 한 좌표입니다.

{% hint style="info" %}
**💡 팁**: 다른 플레이어를 클릭했을 때의 기본 동작은 플레이어 여권을 여는 것이며, 여기에서 해당 플레이어에 대한 추가 정보를 보거나 친구로 추가하는 등의 작업을 할 수 있습니다. 원하는 경험을 방해하지 않도록 이 UI의 열기를 비활성화하려면 [아바타 수정 영역](/creator/content-creator-ko/sdk7/interactivity/player-avatar.md#avatar-modifier-areas).
{% endhint %}

## 플레이어가 커서를 잠금/해제함

{% hint style="warning" %}
**📔 참고**:  `onPointerLockedStateChange` 이벤트는 SDK v7.x에서 제거되어 더 이상 사용할 수 없습니다. 자세한 내용은 [이벤트 리스너](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-locks-or-unlocks-cursor) 의 현재 대안을 참조하세요.
{% endhint %}

플레이어는 두 가지 커서 모드 사이를 전환할 수 있습니다: *잠긴 커서* 모드로 카메라를 제어하거나 *잠금 해제된 커서* 모드로 UI 위에서 커서를 자유롭게 이동할 수 있습니다.

플레이어는 다음을 클릭하여 커서를 잠금 해제합니다: *마우스 오른쪽 버튼* 또는 다음을 누르거나 *Esc* 키를 누릅니다. 그리고 화면의 아무 곳이나 클릭하면 커서가 다시 잠깁니다.

플레이어가 이 두 모드 사이를 전환할 때마다 반응하려면 `onChange` 함수를 `PointerLock` 구성 요소를 사용하고, 다음을 참고하세요. [이벤트 리스너](/creator/content-creator-ko/sdk7/interactivity/event-listeners.md#player-locks-or-unlocks-cursor).

## 플레이어가 렐름 또는 아일랜드를 변경함

Decentraland의 플레이어는 서로 분리된 *렐름*과 별도의 *아일랜드* 안에 존재합니다. 서로 다른 렐름이나 아일랜드의 플레이어는 같은 구획에 서 있더라도 서로를 보거나, 상호작용하거나, 채팅할 수 없습니다.

플레이어가 렐름이나 아일랜드를 변경할 때마다 `onRealmChangedObservable` 이벤트가 호출됩니다.

```ts
import { onRealmChangedObservable } from '@dcl/sdk/observables'

onRealmChangedObservable.add((realmChange) => {
	console.log('플레이어가 아일랜드를 변경함: ', realmChange.room)
})
```

{% hint style="warning" %}
**📔 참고**:  `onRealmChangedObservable` 이벤트는 SDK v7.x에서 더 이상 사용되지 않습니다. 향후 버전에서는 더 [데이터 지향적 접근 방식](/creator/content-creator-ko/sdk7/architecture/data-oriented-programming.md)을 지원할 예정이며, 이는 이벤트 대신 정기적으로 데이터를 조회하는 방식에 기반합니다.
{% endhint %}

이 이벤트에는 다음 필드가 포함됩니다:

* **serverName**: *문자열*; catalyst 서버 이름입니다.
* **room**: *문자열*; 아일랜드 이름입니다.
* **displayName**: *문자열*; catalyst 서버 이름 뒤에 *-* 와 아일랜드 이름이 붙습니다. 예: `unicorn-x011`.
* **domain**: *문자열*; 사용 중인 catalyst 서버의 URL입니다.

플레이어가 지도를 이동하면서, 현재 가장 가까운 플레이어들과 함께 묶이기 위해 아일랜드를 변경할 수 있습니다. 또한 각 아일랜드의 경계를 동적으로 조정하여 감당 가능한 인원이 들어가도록 합니다. 따라서 플레이어가 가만히 서 있어도 주변 씬에 다른 플레이어가 들어오고 나가면 아일랜드가 변경될 수 있습니다.

씬이 [3rd party 서버](/creator/content-creator-ko/sdk7/networking/third-party-servers.md) 를 사용하여 플레이어 간 변경 사항을 실시간으로 동기화한다면, 같은 렐름+아일랜드로 묶인 플레이어끼리만 데이터를 공유하도록 할 수 있습니다. 따라서 플레이어가 아일랜드를 변경할 때마다 3rd party 서버의 room을 변경하는 것이 좋습니다.

## 암호화 기능

{% hint style="warning" %}
**📔 참고**: 함수 `requirePayment()`, `signMessage()`, `convertMessageToObject()` 는 더 이상 사용되지 않습니다. 대신 `sendAsync()` 함수를 사용하세요. 자세한 내용은 [씬 블록체인 작업](/creator/content-creator-ko/sdk7/blockchain/scene-blockchain-operations.md). 또한 이러한 함수의 일부 일반적인 사용 사례를 단순화하는 데 도움이 되는 라이브러리도 있습니다.
{% endhint %}

## 비디오 이벤트

{% hint style="warning" %}
**📔 참고**:  `onVideoEvent` 이벤트는 SDK v7.x에서 더 이상 사용되지 않습니다. 자세한 내용은 [이벤트 리스너](/creator/content-creator-ko/sdk7/media/video-playing.md#video-events) 사용 중단되지 않은 대안을 참조하세요.
{% endhint %}

비디오의 재생 상태가 바뀌면 `onVideoEvent` observable이 이벤트를 수신합니다.

```ts
onVideoEvent.add((data) => {
	console.log('새 비디오 이벤트 ', data)
})
```

비디오 이벤트 입력에는 다음 속성이 포함됩니다:

* `videoClipId` ( *문자열*): 상태가 바뀐 엔티티의 ID입니다.
* `componentId` (*문자열*): 상태가 바뀐 엔티티의 ID입니다.
* `currentOffset` (*number*): 비디오의 `seek` 속성의 현재 값입니다. 이 값은 비디오의 원래 시작 시점 이후의 초를 나타냅니다. *-1* 항목만 내보냅니다.
* `totalVideoLength` (*number* ): 전체 비디오의 길이(초)입니다. *-1* 길이를 알 수 없는 경우.
* `videoStatus`: `VideoTexture`의 새 비디오 상태 값이며, `VideoStatus` 열거형의 값으로 표현됩니다. 이 열거형은 다음 가능한 값을 가질 수 있습니다:
* `VideoStatus.NONE` = 0,
* `VideoStatus.ERROR` = 1,
* `VideoStatus.LOADING` = 2,
* `VideoStatus.READY` = 3,
* `VideoStatus.PLAYING` = 4,
* `VideoStatus.BUFFERING` = 5


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-ko/sdk7/interactivity/deprecated-functions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
