본문 바로가기

메이플스토리 월드/설명

[LUA] 루아스크립트에서 자연스러운 체력바 만들기 (LERP)

Lerp 연산 (Linear Interpolation)

라고 불리는 연산, 한국어로는 선형 보간이라고 한다.

Unity를 활용한 개발을 할 때는 자체 내장함수가 있어서 사용했엇는데, lua에서 동일한 기능을 구현하려 하다보니 없어서 직접 만들어서 사용했다.

사실 정말 간단한 함수인데, 유니티만 사용했을 때는 어떠한 원리로 동작하는지 모르고 사용했었는데, 간단히 정리하자면

 

A B 사이에 특정한 비율로 점을 하나 찍는다.

ex) A=0 B=10 비율 = 0.5

1차적으로는

저 가운데에 찍힐 것이고, 저 점을 A로  잡아준다.

두번째로는,

이런식으로 그려질 것이고, 계속 하다보면 A점이 B에 거의 일치가 될 것이다.

단 이 작업은 A와 B는 완전히 같은 값이 되지 않는다!!!!

또한 비율이 크면 클수록 B에 가까워지는 속도가 빨라지며, 비율이 1이 된다면 1차연산만으로 A점과 B점이 동일해진다.

이런 작업을 해주는게 LERP함수고, 이 과정을 통해서 매끄러운 체력바를 만들 수 있게 된다.

단, lua에는 lerp 내장 함수가 없으므로 직접 넣어주고 완성시키면 된다.

void OnUpdate(number delta)
{
  if isvalid(self.hpBar) then
  self.MPBar.SpriteGUIRendererComponent.FillAmount=self:lerp(self.hpBar.SpriteGUIRendererComponent.FillAmount,self.curHP/self.maxHP,delta)
  end
}
number lerp(number a,number b,number speed)
{
 return a*(1-speed)+b*speed
 
}

 

 

 


 

lua를 배우다보니 유니티에 있는 내장함수들을 직접 구현하게 되는 경우가 있는데, 새로운 경험이고 당연시 여겼던 것들을 이래서 이렇게 되는구나 라고 생각할 수 있는 좋은 계기가 되는것 같네요