[Unity] Mathf.Lerp() ν•¨μˆ˜

2023. 4. 28. 13:48Β·πŸ“ Game/✏ Unity

Lerp

1. κ°œλ…

μ„ ν˜• 보간(Linear Interpolation)은 두 점(a, b) μ‚¬μ΄μ˜ κ°’(c)을 κ΅¬ν•˜κΈ° μœ„ν•΄ 두 점을 μ—°κ²°ν•œ 직선을 λ§Œλ“€μ–΄ 사이 κ°’(t)을 κ³„μ‚°ν•˜λŠ” 방법이닀. 

 

Mathf.Lerp(float a, float b, float t)

 

μ—¬κΈ°μ„œ tλŠ” percet(0 ~ 1)의 κ°œλ…μ΄κΈ° λ•Œλ¬Έμ— t = 0이면 a, t = 1이면 b와 κ°™λ‹€.

 

c = Lerp(a, b, t)

 

2. μœ λ‹ˆν‹° ν™œμš©

1) λΆ€λ“œλŸ¬μš΄ μ›€μ§μž„

λΆ€λ“œλŸ¬μš΄ μ›€μ§μž„μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•΄ Update()μ—μ„œ 두 점 μ‚¬μ΄μ˜ ꡬ간을 μ§€μ†μ μœΌλ‘œ μ΄λ™μ‹œμΌœ ν™œμš©ν•  수 μžˆλ‹€. Update() ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” λ§€ ν”„λ ˆμž„λ§ˆλ‹€ μœ„μΉ˜λŠ” 계속 움직일 것이고 λͺ©ν‘œ 지점에 κ·Όμ ‘ν• μˆ˜λ‘ λ”μš± λΆ€λ“œλŸ¬μš΄ μ›€μ§μž„μ„ λ‚˜νƒ€λ‚΄κ²Œ λœλ‹€.

 

void Update()
{
	a = Mathf.Lerp(a, b, 0.5f);
}

 

tλ₯Ό νŠΉμ •ν•œ μƒμˆ˜κ°€ μ•„λ‹ˆλΌ Time.deltaTime을 μ΄μš©ν•΄μ„œ 선언해주기도 ν•œλ‹€. Time.deltaTime은 λ‹¨μœ„ ν”„λ ˆμž„ λ‹Ή μ‹œκ°„ λ³€ν™”λŸ‰μ„ μ˜λ―Έν•˜λŠ”λ° 보톡 0.016초 ~ 0.18초 μ‚¬μ΄μ˜ 값을 κ°€μ§„λ‹€. Update() ν•¨μˆ˜ 호좜 μ‹œ PC 사양과 μ„±λŠ₯ λ˜λŠ” 인터넷 ν™˜κ²½μ— 따라 μΌμ •ν•˜μ§€ μ•ŠλŠ” ν”„λ ˆμž„ κ°„ μ‹œκ°„ 간격이 λ°œμƒν•  수 μžˆλ‹€. 그런 경우 κ³ μ • μΈμžκ°’μ„ λ„˜κ²Όμ„ λ•Œ λΆˆκ·œμΉ™ν•œ μ›€μ§μž„μœΌλ‘œ 인해 κ°„κ²©μ˜ μ˜€μ°¨κ°€ λ°œμƒν•˜κ²Œ λœλ‹€. κ·ΈλŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Time.deltaTime으둜 각 ν”„λ ˆμž„μ˜ μ •ν™•ν•œ μ‹œκ°„ λ³€ν™”λŸ‰μ„ ꡬ해 μ •ν™•ν•œ 이동 λ³€ν™”λŸ‰μ„ κ³„μ‚°ν•˜κ²Œ λœλ‹€. λ”μš±μ΄ speed λ³€μˆ˜ 값을 κ³±ν•΄μ£Όμ–΄ μ’€ 더 λΉ λ₯΄κ±°λ‚˜ 느리게 μ›€μ§μž„μ„ μ‘°μ •ν•  수 μžˆλ‹€.

 

float speed = 2f;
void Update()
{
	a = Mathf.Lerp(a, b, Time.deltaTime * speed);
}
Time.deltaTime으둜 λ°›μ•„μ˜¬ 경우, bκ°€ 1이라면 κ·Έ 값에 μ˜μ›νžˆ λ„λ‹¬ν•˜μ§€ λͺ»ν•˜κ²Œ λœλ‹€. λ”°λΌμ„œ 값에 λ„λ‹¬ν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό νŒŒμ•…ν•˜λ €λ©΄ c == 1이 μ•„λ‹Œ c >= 0.99999와 같이 μ΅œμ†Œν•œμ˜ 였차λ₯Ό ν¬ν•¨ν•˜μ—¬ νŒλ‹¨ν•΄μ•Ό ν•œλ‹€. 

 

2) 일정 μ‹œκ°„ λ‚΄ 도달

λͺ©μ μ§€κΉŒμ§€ μΌμ •ν•œ μ‹œκ°„μ— λ„λ‹¬ν•˜κΈ° μœ„ν•΄μ„œ ν™œμš©ν•  수 μžˆλ‹€. tλ₯Ό 0~100κΉŒμ§€ κ³„μ†ν•΄μ„œ 늘렀주고 2둜 λ‚˜λˆ μ£Όλ©΄(/2) λœλ‹€. 보톡 λ°˜λ“œμ‹œ ν•΄λ‹Ή μ‹œκ°„κΉŒμ§€ 도착해야 ν•˜λŠ” 경우 μ‚¬μš©ν•˜λŠ”λ° λ¦¬λ“¬κ²Œμž„μ—μ„œ λ…ΈνŠΈλ₯Ό 찍을 λ•Œ μ‚¬μš©λœλ‹€. 

currentTime += Time.deltaTime;
Vector3.Lerp(transform.position, target.position, currentTime / 2);

 

3) μ•ŒνŒŒ λΈ”λ Œλ”©

RBGA μ±„λ„μ—μ„œ 두 κ°€μ§€ 색을 μ„žμ„ λ•Œ ν™œμš©ν•  수 μžˆλ‹€. 1 - aκ°€ 0이면 κΈ°λ³Έ μƒ‰μ΄μ§€λ§Œ 점점 μˆ«μžκ°€ 컀짐에 따라 두 κ°€μ§€ 색상이 μ„žμ΄λŠ” 것을 ν‘œν˜„ν•œλ‹€. 색상을 μ„žμ„ λ•Œ λͺ‡ νΌμ„ΌνŠΈ λΉ„μœ¨λ‘œ μ„žμ„ 지에 λŒ€ν•΄ κ³ λ―Όν•  λ•Œ μ‚¬μš©ν•œλ‹€. 이λ₯Ό μ‘μš©ν•˜λ©΄ 씬 μ „ν™˜ μ‹œ Fade In/Out κΈ°λŠ₯으둜 κ΅¬ν˜„ν•  수 μžˆλ‹€.

(1 - a) * s + a * T

 

4) 물체의 이동

μ• λ‹ˆλ©”μ΄μ…˜μ—μ„œ λ‹€μ–‘ν•œ 이동을 ν‘œν˜„ν•  λ•Œ ν™œμš©ν•  수 μžˆλ‹€.

 

 

3. μ°Έκ³ 

https://seongju0007.tistory.com/210

 

[Unity] μ„ ν˜•λ³΄κ°„ Lerp ν•¨μˆ˜μ™€ μœ λ‹ˆν‹°μ—μ„œμ˜ μ„ ν˜•λ³΄κ°„ ν™œμš© 사둀(Alpha Blending, iTween)

μ„ ν˜•λ³΄κ°„ (Lerp) μ„ ν˜• 보간(Linear Interpolation)μ΄λž€ 두 점 a, b μ‚¬μ΄μ˜ κ°’(c)λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄ a-b 두 점을 μ—°κ²°ν•œ 직선을 λ§Œλ“€μ–΄ 사이 값을 κ³„μ‚°ν•˜λŠ” 방법이닀. μœ λ‹ˆν‹°μ—μ„œ LerpλŠ” μ„ ν˜• 보간을 μ‚¬μš©ν•˜μ—¬ λΆ€

seongju0007.tistory.com

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Game/✏ Unity' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Unity] null 체크
  • [Unity] μ½”λ“œ λ‚΄ νž™ λ©”λͺ¨λ¦¬ μ΅œμ ν™”
  • [Unity] ν™œμš© κ°€λŠ₯ν•œ AI μ½”λ”© μ„œλΉ„μŠ€ 2편
  • [Unity] ν™œμš© κ°€λŠ₯ν•œ AI μ½”λ”© μ„œλΉ„μŠ€ 1편
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Unity] Mathf.Lerp() ν•¨μˆ˜
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”