HurtPlayer() 함수가 작동하지만 Damage() 메서드에 리터럴 값을 전달하기 때문에 수동으로 코드를 변경할 때만 값을 변경할 수 있습니다. 이 실습에서는 다른 함수를 생성하고 그 함수의 반환 값을 사용하여 HurtPlayer() 함수를 더 유연하게 만들겠습니다.
4강: 실습 시간에서는 조건문을 사용하여 플레이어의 체력에 따라 물약에 의해 받는 피해나 치유량을 계산해 보았습니다. 그 코드 중 일부를 CalculateDamage() 라는 함수에 사용해 보겠습니다. 이 함수는 float 타입의 값을 반환합니다. 이 값을 상수에 저장한 다음 Damage() 메서드에 전달할 것입니다.
-
CalculateDamage()라는 이름의 함수를 생성합니다. 함수 내에서float타입의 상수 두 개를 선언합니다.MinHealth와PotionDamageAmount입니다.PlayerHealth라는float타입의 변수를 선언합니다.CalculateDamage() : float = MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth : float = 100.0 - 다음 세 가지 값 중 하나를 반환하는
if…else if…else표현식을 생성합니다.PlayerHealth가PotionDamageAmount보다 큰 경우PotionDamageAmountPlayerHealth가PotionDamageAmount보다 작지만MinHealth보다 큰 경우PlayerHealth-MinHealthPlayerHealth가MinHealth이하인 경우PlayerHealth
# 피해량이 플레이어를 처치하기에 부족한 경우 그만큼의 피해를 입힙니다. if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # 플레이어의 체력이 낮은 경우 한 번 더 기회를 부여합니다. return PlayerHealth - MinHealth else: # 플레이어를 처치합니다. return PlayerHealth이 코드의 효과는 플레이어가 물약을 마시면 사망할 상황에 두 번째 기회를 주는 것입니다.
-
유용한 결과를 반환하는 함수를 만들었으니 결과를 저장해야 합니다.
DamageToDo라는float상수를 선언하고CalculateDamage()의 반환 값으로 초기화합니다. 이를HurtPlayer()함수에 추가합니다.HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() FortniteCharacter.Damage(50.0) -
드디어 결과를 사용할 시간입니다!
DamageToDo를Damage()에 실행인자로 전달합니다. 어떤CalculateDamage()값이 반환되는지 확인할 수 있도록Print()를 추가합니다.HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() Print("DamageToDo: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
이제 리터럴 값을 사용하는 대신 CalculateDamage() 에서 반환된 값을 사용하여 Damage() 메서드를 호출합니다. 이전 실습에서 이미 HurtPlayer() 호출을 작성했겠지만 잊지 말고 체크하세요.
전체 스크립트
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
hello_world_device := class(creative_device):
# 실행 중인 게임에서 장치가 시작되면 실행됩니다.
OnBegin<override>()<suspends>:void=
HurtPlayer()
Print("Player Hurt")
CalculateDamage() : float =
MaxHealth : float = 100.0
MinHealth : float = 1.0
PotionDamageAmount: float = 80.0
var PlayerHealth : float = 100.0
# 피해량이 플레이어를 처치하기에 부족한 경우 그만큼의 피해를 입힙니다.
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# 플레이어의 체력이 낮은 경우 한 번 더 기회를 부여합니다.
return PlayerHealth - MinHealth
else:
# 플레이어를 처치합니다.
return PlayerHealth
HurtPlayer() : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
DamageToDo: float = CalculateDamage()
Print("DamageToDo: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
이제 CalculateDamage() 와 유사하면서 HealPlayer() 에 유용한 결과를 반환하는 함수를 직접 만들어 보세요. 막힌다면 4강 실습 시간을 참고하여 아이디어를 얻어 보세요.