도드넷
유니티 Lerp Mathf Lerp의 활용? - 피해량 비율 증감 공식(?) 본문
유니티 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 안써도됨.
'창고 > 게임 개발 [Hidden]' 카테고리의 다른 글
유니티 구글 플레이 API 설치법 - Unity Googleplay API 설치및 업데이트. 로그인 기능 추가하기. (0) | 2022.07.13 |
---|---|
유니티 destroy 게임 오브젝트 삭제 vs SetActive(false) 오브젝트 풀링. (0) | 2022.07.04 |
유니티 C# 레퍼런스 오류 - 형식 또는 네임 스페이스 이름을 찾을 수 없습니다. (0) | 2022.03.26 |
C# 리스트 순서 섞기 List Shuffle - 리스트 랜덤 순서 섞는법. (0) | 2022.03.13 |
C# 소숫점만 표시하기 - float 소수점만 . 이후 값만 표시하기. (0) | 2022.03.11 |