요약
이 문서에서는 Katana 에서 콜백이나 이벤트 핸들러를 등록하는 방법을 설명하고, 사용 가능한 콜백 및 이벤트 유형과 해당 콜백 함수에 필요한 입력 인수에 대한 정보를 찾을 수 있는 위치에 대한 세부 정보를 제공합니다.
콜백 및 이벤트에 대한 문서는 Katana 개발자 가이드 에서도 확인할 수 있습니다. 아래 문서에서는 이러한 구현 방법에 대한 몇 가지 실제 사례를 소개합니다.
더 많은 정보
콜백 은 Katana 환경에 추가된 Python 코드로, Katana 에서 다양한 이벤트(노드 생성이나 스크립트 로드 등)가 발생할 때 자동으로 실행됩니다.
이벤트 는 마우스 클릭이나 키 입력과 같이 사용자 동작이나 다른 소스의 결과로 발생하는 동작입니다. 이벤트 핸들러는 이벤트를 처리하는 데 사용되는 루틴으로, 프로그래머가 이벤트 발생 시 실행되는 코드를 작성할 수 있도록 합니다.
콜백은 Katana 에서 특정 상황(예: 파일을 저장하기 직전)에 트리거되고, 호출 코드는 콜백이 실행될 때까지 기다린 후 작업을 계속 진행합니다. 이를 통해 사용자는 프로젝트가 저장되기 전에 프로젝트를 수정할 수 있습니다.
반대로, 이벤트는 Katana 의 이벤트 시스템에 의해 대기열에 추가되어 "나중에" 처리됩니다. 즉, 콜백은 더 즉각적으로 처리되지만, 일반적으로 매우 빠르게 처리되어야 합니다. 그렇지 않으면 작업 중에 UI가 정지될 위험이 있습니다.
콜백과 이벤트 핸들러는 모두 여러 상황에서 유용합니다. 예를 들어, 새로운 Katana 프로젝트를 만들 때 프로젝트 설정을 변경하거나 특정 노드 매개변수의 값 변경에 반응하는 경우입니다.
콜백
Katana 에서는 소프트웨어 실행, Katana 프로젝트 로드, 노드 생성 등 다양한 상황에 맞는 콜백을 사용할 수 있습니다. 사용 가능한 콜백의 전체 목록을 보려면 Python 탭에서 다음 코드를 실행하세요.
from Katana import Callbacks
print(dir(Callbacks.Type))
각 콜백 유형에 전달되는 키워드 인수를 알아보려면 호출 시 입력 인수를 출력하는 다음 콜백을 등록할 수 있습니다.
def Hello(**kwargs):
for i in kwargs.keys():
print(i)
from Katana import Callbacks
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)
이러한 인수는 콜백 함수 내에서 다음과 같이 액세스할 수 있습니다.
def Hello(**kwargs):
print(kwargs.get('filename'))
from Katana import Callbacks
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)
이벤트 핸들러
Katana 에는 등록된 핸들러가 수신할 수 있는 다양한 이벤트 유형이 있습니다. 사용 가능한 모든 이벤트 유형 목록을 보려면 Python 탭에서 다음을 실행하세요.
from Katana import Utils print ( sorted ( Utils . EventModule . GetAllRegisteredEventTypes ()))
각 이벤트 유형에 대해 어떤 입력 인수가 있는지 확인하려면 특정 이벤트에 대해 다음 핸들러를 등록할 수 있습니다. 이벤트가 트리거되면 핸들러는 인수를 출력합니다. 다음은 "node_create" 이벤트 유형에 대한 입력 인수를 출력하는 예입니다.
def node_CreateCallback(eventType, eventID, **kwargs):
for i in kwargs.keys():
print(i)
Utils.EventModule.RegisterEventHandler(node_CreateCallback, 'node_create')
입력 인수를 알면 이벤트 핸들러 함수 내에서 사용할 수 있습니다. 다음은 사용자 환경 설정의 변경 사항을 수신하도록 등록할 수 있는 이벤트 핸들러의 예이며, 환경 설정의 이름과 새 값을 출력합니다.
def PrefChangedCallback(eventType, eventID, prefKey, prefValue):
print(prefKey, "preference changed to:", prefValue)
Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')
노드 매개변수 변경에 대한 이벤트 핸들러
예를 들어 이벤트 핸들러 함수가 특정 노드 매개변수의 변경에만 반응해야 하는 경우, 해당 함수를 등록하여 parameter_finalizeValue 이벤트를 수신하도록 할 수 있습니다. 변경된 매개변수의 이름을 핸들러 함수 내에서 확인하여 관련 매개변수인지 확인할 수 있습니다.
def myParamCallback(eventType, eventID, node, param):
if (node.getName() == "CameraCreate") and (param.getName() == 'fov'):
print("FOV for the following camera changed to " + repr(param.getValue(0)) + ": " + node.getParameter('name').getValue(0))
Utils.EventModule.RegisterEventHandler(myParamCallback, "parameter_finalizeValue")
이벤트 핸들러는 이벤트가 큐에 추가된 직후에 반드시 실행되는 것은 아닙니다. 특정 이벤트가 처리되고 이벤트 핸들러가 실행되어야만 동작하는 코드의 경우, 다음을 호출해야 할 수 있습니다.
Utils.EventModule.ProcessAllEvents()
콜백과 이벤트 핸들러에 대한 자세한 내용은 Katana 개발자 가이드의 콜백 및 이벤트 섹션을 참조하세요.
Katana 시작 시 콜백 또는 이벤트 핸들러 등록
Katana 시작될 때 콜백이나 이벤트 핸들러를 자동으로 등록할 수 있습니다.
- 콜백이나 이벤트 핸들러 함수가 수행할 모든 작업을 단일 Python 함수로 정의하고 아래 예제 코드와 같이 이를 등록합니다.
from Katana import Utils, Callbacks def PrefChangedCallback(eventType, eventID, prefKey, prefValue): print(prefKey, "preference changed to:", prefValue)
Utils.EventModule.RegisterEventHandler(PrefChangedCallback, 'pref_changed')
def Hello(**kwargs): print(kwargs.get('filename'))
Callbacks.addCallback(Callbacks.Type.onSceneLoad, Hello)
- 이것을 텍스트 편집기에 복사하여 붙여넣고 파일을 저장합니다.
- 파일 이름을 init.py로 바꾸고 파일 브라우저에 파일 확장자가 표시되는지 확인하세요. 이는 파일 확장자가 .py이고 .txt이거나 다른 확장자가 아닌지 확인하기 위한 것입니다.
- $KATANA_RESOURCES 환경 변수에 정의된 경로 아래의 .katana 폴더나 시작 폴더에 파일을 넣습니다.
KATANA _RESOURCES 에 대한 자세한 내용은 Katana 설치 가이드 의 해당 항목을 참조하세요.
다음에 Katana 실행하면 지정된 동작이 발생할 때 콜백 함수가 실행되고, 관련 이벤트가 대기열에 추가되어 처리될 때 이벤트 핸들러 함수가 실행됩니다. 위의 예시에서 환경 설정이 변경되거나 Katana 프로젝트가 로드되면 새 환경 설정 값 또는 프로젝트 파일 경로가 각각 터미널에 출력됩니다.
추가 도움말
콜백과 이벤트 핸들러에 대한 자세한 내용은 Katana 개발자 가이드의 콜백 및 이벤트 섹션을 참조하세요.
콜백이나 이벤트 핸들러를 설정하는 데 문제가 있는 경우 지원 티켓을 열어 문제와 지금까지 수행한 문제 해결 단계를 알려주세요.
지원 티켓을 여는 방법에 대한 자세한 내용은 Q100064: 지원 티켓을 제기하는 방법을 참조하세요.
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요