๋ฌธ์ œํ•ด๊ฒฐ

[์˜ค๋ฅ˜ ํ•ด๊ฒฐ] Mathf.SmoothDamp ๊ฒฐ๊ณผ๊ฐ’์— NaN์ด ์˜ค๋Š” ๋ฌธ์ œ

samosa 2024. 1. 8. 16:27

๐Ÿ˜ถ UGUI Scroll ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์™€์„œ ์“ฐ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๋‚ด๋ถ€ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด. ์ž‘์„ฑ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด๋„ ์žฌํ˜„์ด ์•ˆ ๋  ๊ฒƒ ๊ฐ™๊ณ , ๊ทธ๋ž˜์„œ ๊น”๋”ํ•˜๊ฒŒ ๋‹ต์„ ํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™์ง€ ์•Š์•„.

๐Ÿ‘พ ๋ฌด์Šจ ์ƒํ™ฉ์ธ๋ฐ?

๐Ÿ˜ถ ์Šคํฌ๋กค ์†๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ Mathf.SmoothDamp ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋ฆฌํ„ด๊ฐ’์— NaN์ด ์™€์„œ ๊ณจ์น˜๊ฐ€ ์•„ํŒŒ.

๐Ÿ‘พ ์ฐพ์•„๋ณด๋‹ˆ 0์œผ๋กœ ๋‚˜๋ˆ—์…ˆ์„ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Œ€. ์–ด๋””์„œ 0์ด ๋“ค์–ด์˜ค๊ณ  ์žˆ๋Š” ๊ฑฐ์•ผ?

๐Ÿ˜ถ ์ผ๋‹จ ์™œ 0์ด ์˜ค๋Š” ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ, 0์ด ์˜ค๋Š” ๊ณณ์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•ด๋„ ์–ด๋–ค ์ด์œ ์—์„œ๋“  ๋˜ ๋‹ค๋ฅธ ๋ฐ์„œ 0์ด ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„. ํ˜น์‹œ๋‚˜ 0์ด ์˜ค๊ฒŒ ๋  ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ์–ด.

๐Ÿ‘พ ๊ทธ๋ž˜๋„ ์ผ๋‹จ ์™œ 0์ด ์˜ค๋Š” ๊ฑด์ง€ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด์ž.

๐Ÿ˜ถ ์ข‹์•„.

 

(๋กœ๊ทธ ์ฐ์–ด๋ณด๋Š” ์ค‘...)

 

๐Ÿ˜ถ ๋งค ํ”„๋ ˆ์ž„ ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ดค๋Š”๋ฐ, NaN ๊ฐ’์ด ๋ฆฌํ„ด๋˜๊ธฐ ์ง์ „์— Time.TimeScale์ด 0์ด์•ผ.

๐Ÿ‘พ ์šฐ์—ฐ์ด๋ผ๋ฉด ๋†€๋ผ์šด ์šฐ์—ฐ์ธ๊ฑธ? ์—ฐ๊ด€๋˜์–ด ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ฒ ์–ด.

๐Ÿ˜ถ SmoothDamp ์—ฐ์‚ฐ์œผ๋กœ ๊ฐ€๊ธฐ ์ „์— TimeScale = 1๋กœ ์„ธํŒ…์„ ํ•œ๋ฒˆ ํ•ด์ค˜๋ณด์ž.

 

(ํ…Œ์ŠคํŠธ ์ค‘...)

 

๐Ÿ˜ถ ๊ทธ๋ž˜๋„ ์•ˆ ๋˜๋„ค.

๐Ÿ‘พ ํ .. ๊ทธ๋Ÿฌ๊ณ ๋ณด๋‹ˆ Time.TimeScale์„ 0์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์ด ์ด๋•Œ ๊ฒŒ์ž„ ๋กœ์ง์—์„œ ์—†์ž–์•„? ์ง„์งœ ์‹ ๊ธฐํ•˜๊ณ  ์ด์ƒํ•œ ์šฐ์—ฐ์ด๋„ค. ๊ทธ๋Ÿผ ๊ฒฐ๊ตญ์— Time.TimeScale์ด ์•„๋‹ˆ๋ผ ์–ด๋–ค ๋‹ค๋ฅธ ๊ฐ’์˜ ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ๊ฒ ์–ด.

๐Ÿ˜ถ ๋‹ค๋ฅธ ๊ฐ’๋“ค๋„ 0์ด ์ ˆ๋Œ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ํ•ด๋ฒ„๋ฆฌ์ž. Threshold๋Š” 0.1 ์ •๋„๋กœ ํ•ด๋ณผ๊ฒŒ.

 

(์‹คํ–‰ ์ค‘...)

 

๐Ÿ‘พ ํ—‰. ๊ทธ๋ž˜๋„ NaN์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋‹ˆ

๐Ÿ˜ถ ์–ด์ฉ” ์ˆ˜ ์—†๊ตฐ. NaN์ด ๋‚˜์˜ค๋Š” ๊ฑธ ์ฒดํฌํ•ด์„œ ๊ทธ ๊ฒฝ์šฐ์— velocity๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฌ์ž...

๐Ÿ‘พ ๊ทธ๋ž˜. ์‚ฌ์šฉ์ž๊ฐ€ ๋”์ด์ƒ ์Šคํฌ๋กค ์กฐ์ž‘์„ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฒŒ์–ด์ง€๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋‚ซ์ง€.

if (Time.timeScale < 1)
{
    // Debug.Log($"Time.timeScale set to :{Time.timeScale} ");
    Time.timeScale = 1;
}
if (mCurSnapData.mCurSnapVal < 0.01)
{
    // Debug.Log($"mCurSnapData.mCurSnapVal set to :{0.01} ");
    mCurSnapData.mCurSnapVal = 0.01f;
}
if (mCurSnapData.mTargetSnapVal < 0.01)
{
    // Debug.Log($"mCurSnapData.mCurSnapVal set to :{0.01} ");
    mCurSnapData.mTargetSnapVal = 0.01f;
}
mCurSnapData.mCurSnapVal = Mathf.SmoothDamp(mCurSnapData.mCurSnapVal, mCurSnapData.mTargetSnapVal, ref mSmoothDumpVel, mSmoothDumpRate);
var dump2 = mSmoothDumpVel;

if (float.IsNaN(dump2))
{
    // Debug.LogError($"dump2 NaN !!!");
    mSmoothDumpVel = 0;
}