캐릭터 콜백
Ren'Py는 대사 중 여러 이벤트가 발생할 때 콜백을 실행할 수 있습니다. Character()에 callback 인수를 지정하거나, config.character_callback 또는 config.all_character_callbacks 변수를 설정하면 됩니다.
캐릭터 콜백에는 발생한 이벤트를 나타내는 위치 인수 하나가 전달됩니다. 가능한 이벤트는 다음과 같습니다.
- "begin"
say 문을 시작할 때 호출됩니다.
- "show"
각 대사 구간을 표시하기 전에 호출됩니다. 대사는 {w} 또는 {p} 텍스트 태그로 여러 구간으로 나눌 수 있으며, 항상 하나 이상의 구간으로 이루어집니다.
- "show_done"
각 대사 구간을 표시한 뒤 호출됩니다.
- "slow_done"
글자가 서서히 표시되는 과정이 끝난 뒤 호출됩니다. 대사가 상호작용을 발생시키지 않는 경우에는 이 이벤트가 "end" 이후에 발생할 수도 있습니다.
- "interact_done"
상호작용이 끝난 뒤 호출됩니다. 게임 메뉴와 같은 새 컨텍스트로 들어가는 것은 상호작용을 끝내지 않습니다.
- "end"
say 문이 끝날 때 호출됩니다.
콜백에는 다음 키워드 인수가 전달됩니다.
- interact
대사가 상호작용을 발생시키면 참입니다.
- type
캐릭터 유형입니다. 예: "nvl", "adv", "bubble".
- what
what 디스플레이어블에 전달할 텍스트입니다.
- multiple
Character()의 multiple 인수입니다.
"show", "slow_done", "interact_done" 콜백에는 다음 키워드 인수도 전달됩니다.
- start
what 문자열에서 현재 대사 구간이 시작하는 위치입니다.
- end
what 문자열에서 현재 대사 구간이 끝나는 위치입니다.
- delay
현재 대사 구간을 표시한 뒤 Ren'Py가 대기할 시간입니다. 플레이어가 클릭할 때까지 대기한다면 None입니다.
- last_segment
say 문의 마지막 대사 구간이면 True이고, 그렇지 않으면 False입니다.
"interact_done" 콜백은 다음 키워드 인수를 추가로 받습니다.
- exception
예외 때문에 상호작용이 끝났으면 True이고, 그렇지 않으면 False입니다. 예외에는 게임 불러오기와 롤백 등이 포함됩니다.
다른 위치 인수 값이나 추가 키워드 인수가 콜백에 전달될 수도 있습니다. 콜백은 인식하지 못하는 키워드 인수를 무시하도록 작성해야 합니다.
예제
다음 예제는 글자를 서서히 표시하도록 설정했을 때 캐릭터 음성 대신 비프음을 재생합니다.
init python:
def beepy_voice(event, interact=True, **kwargs):
if not interact:
return
if event == "show_done":
renpy.sound.play("beeps.ogg")
elif event == "slow_done":
renpy.sound.stop()
define pike = Character("크리스토퍼 파이크", callback=beepy_voice)
label start:
pike "그러니까, 탈로스 IV에서 한가롭게 내 할 일을 하고 있었는데..."
일반적인 콜백을 특정 캐릭터에 맞게 조정하려면 cb_ 접두사를 붙여 콜백 함수에 인수를 전달할 수 있습니다.
init python:
def boopy_voice(event, interact=True, boopfile="normal_boop.ogg", **kwargs):
if not interact:
return
if event == "show_done":
renpy.sound.play(boopfile)
elif event == "slow_done":
renpy.sound.stop()
define chrisjen = Character("크리스젠", callback=boopy_voice)
define nagata = Character("나오미", callback=boopy_voice, cb_boopfile="sfx-blipmale.ogg")