관리 메뉴

도드넷

유니티 Lerp Mathf Lerp의 활용? - 피해량 비율 증감 공식(?) 본문

창고/게임 개발 [Hidden]

유니티 Lerp Mathf Lerp의 활용? - 피해량 비율 증감 공식(?)

도드! 2022. 7. 2. 14:09

 

유니티 Lerp Mathf Lerp의 활용? - 피해량 비율 증감 공식(?)

뜬금포로 [글 -> 수학식] 사고를 해보자. (도전)

 

1. 현재 체력이 낮을 수록 더 큰 피해를 입힙니다. (최대 피해 증가량 50%)

 

Amp = 0.5f * (최대 체력 - 현재 체력) / (최대 체력);

피해량 += 피해량 * Amp;

 

공식1 :: A 가 MAX, B 값이 낮을수록 증가 : (B - A) / (A) -- Current vs Max 역비율 

== 1 - B / A

 

2. 현재 체력이 높을수록 더 큰 피해를 입힙니다. (풀피 일때 최대 피해 증가량은 75%)

 

Amp = 0.75f * (현재체력 / 최대체력);

피해량 += 피해량 * Amp;

 

공식2 :: A가 MAX, B 값이 증가할수록 증가 : B / A -- Current vs Max 비율

 

∴ Conclusion

B가 커질수록 증가 -> B / A

B가 커질수록 감소 -> A / B (??) X (what the fuck)

B가 커질수록 감소 -> (A - B) / A = 1 - B / A. O

역비율을 적용하는 법 : 1 - X

 

# Personal Exercise (?)

3. 잃어버린 체력량이 많을수록 더 큰 피해를 입힙니다. 현재 체력 비율이 25%일때 최대 125% 추가 피해만 입히며 더 이상은 증가하지 않습니다.

 

NewMax = 전체 체력 * (1 - 0.25f); // 제한 비율에 의한 새로운 Max 설정 ★

if(NewMax < 현재 체력)

{ 현재 체력 = NewMax }

Ratio =  (NewMax) - 현재 체력 / (NewMax);  // (A - B) / A

Amp = 1.25f * Ratio; 

피해량 += 피해량 * Amp;

 

# New Fomula (?!)

A 는 Max, B가 커질수록 감소, 단 최저비율은 C -> (A-(A*C) - B) / A-(A*C) 

(음... 괜히 복잡해 보이는데 Max값을 재설정해서 범위를 제한하는게 다임.)

0 ~ 100  ☞ 0 ~ 75

 

# Reverse (WOOT)

현재 체력량이 많을수록 더 큰 피해를 입힙니다. 현재 체력 비율이 74.23% 이상 일때 최대 350% 추가 피해만 입히며 더 이상은 증가하지 않습니다.

 

NewMax = 전체 체력 * 0.7423f;  // 제한 비율에 의한 새로운 Max 설정 ★.

if(NewMax < 현재 체력)

{ 현재 체력 = NewMax }

Ratio =  현재 체력 / (NewMax);  // B / A

Amp = 3.5f * Ratio; 

피해량 += 피해량 * Amp;

 

# Exercise2

튜브 주입식으로 한발씩 5발까지 장전할 수 있는 산탄총이 있다. 이 산탄총은 마법으로 강화되어 장전된 탄약수가 적어 질 수록 더 큰 피해를 입힌다. 이 산탄총은 마지막 발(1발 장전중)일때 최대 50% 추가 피해를 입힌다. (피해량은 격발 이전에 총알-투사체에 삽입된다.)

 

Ratio = 5 - 현재 탄약수 / (5 - 1);

if(Ratio > 1)

{ Ratio = 1 }

Amp = 0.25f * Ratio;

피해량 += 피해량 * Amp;

 

오 잠깐, 글 제목이 유니티 Mathf.Lefp, Lerp인데?!

Mathf.Lerp 자체가 비율에 따른 Min ~ Max 값 반환이라서. 쓸대없이 Lerp Mathf.Lerp 를 활용할수도 있음. :D

 

Mathf.Lerp의 정의

Matf.Lerp(a, b, t);

t 는 언제나 비율(0~1)

a 는 t = 0 일때 반환값. (Min)

b 는 t = 1 일때 반환값. (Max)

 

그러므로 오직 수정해야할 라인은.

Amp = MaxAmp * Ratio 대신에...

☞ Amp = Mathf.Lerp(0, MaxAmp, Ratio);

 

분명 Lerp 개념이 적용될수는 있는데 최저값이 0이면 그냥 비율을 곱하면 되므로 굳이 유니티 Mathf.Lerp 안써도됨.

 

반응형
Comments