public virtual void PhysicsUpdate()
{
Move();
}
protected virtual void Move()
{
if (sm.character.IsOnSlope() == true)
{
sm.character.rb.AddForce(GetSlopeMoveDirection() * moveSpeed * 10f, ForceMode.Force);
}
else
{
sm.character.rb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
}
}
protected void SpeedControl()
{
if (sm.character.IsOnSlope() == true)
{
if (sm.character.rb.velocity.magnitude > moveSpeed)
{
sm.character.rb.velocity = sm.character.rb.velocity.normalized * moveSpeed;
}
}
else
{
Vector3 flatVel = new Vector3(sm.character.rb.velocity.x, 0f, sm.character.rb.velocity.z);
if (flatVel.magnitude > moveSpeed)
{
Vector3 limitedVel = flatVel.normalized * moveSpeed;
sm.character.rb.velocity = new Vector3(limitedVel.x, sm.character.rb.velocity.y, limitedVel.z);
}
}
}
IEnumerator PostSimulationUpdate()
{
YieldInstruction waitForFixedUpdate = new WaitForFixedUpdate();
while (true)
{
yield return waitForFixedUpdate;
SpeedControl();
Rotate();
}
}
๋ด ์ฝ๋๊ฐ ์ด๋ฐ์์ธ๋ฐ ์ต๋์๋๊ฐ 5๋ผ๊ณ ํ์ ๋ SpeedControl()์ด update๋ waitforfixedupdate์์ ๋ถ๋ฆด ๋ ์ต๋ ์๋๋ฅผ ์๋๊ณ 5๊ฐ ๋์ค๊ฑฐ๋ ? ๊ทผ๋ฐ fixedupdate์์ SpeedControl()์ ๋ถ๋ฅด๋ฉด 5.9์ด๋ฐ์์ผ๋ก ์ ๋ํฐ ์ธ์คํํฐ์์ ๋์ค๋๋ฐ ์ ์ด๋ผ? ์ด์ฐจํผ velocity ์ธํ
์ update๋ waitforfixedupdate์์ ํด๋ ์ค์ง์ ์ธ ๋ฌผ๋ฆฌ ๊ณ์ฐ์ fixedupate ๋ค์ internalย physics update์์ ์ผ์ด๋๋๊ฑฐ ์๋? ๊ทธ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ์์ผ ๋์ง ์๋? ๊ทธ๋ฅ ์ ๋ํฐ ์ธ์คํํฐ์์์๋ง ์๋๊ฐ 5๋ก ๋์ค๊ณ ์ค์ง์ ์ ์๋๋ ์ด๋์ ๋ถ๋ฅด๋ ๊ฐ๋?
์๋ ์ ๋ํฐ ๋ฌผ๋ฆฌ์์ง ๋ด๋ถ์์ ๋ญ ๊ณ์ฐํ ๋ addforce์ด๋ฐ๊ฑฐ ๋ค ๊ณ์ฐํ๊ณ ๋์ velocity๋ ๋งจ ๋ง์ง๋ง์ ์ ์ฉํ๊ณ ์ด๋ฐ๊ฑด๊ฐ?
๋ ๊ฐ๋ณ@ ๋ง์ผ๋๊น ์ฐฌ์ฐฌํ ์ค๋ช
์ข
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ด์ผ ์๋ด์ผ๋ผ? waitforfixedupdate๋ update์ ๋ฃ์ผ๋ฉด ์๋์ ํ์ด 5๋ก ๋๊ธด ํด
๊ทผ๋ฐ ์ด์ฐจํผ ์ velocity ์ธํ ์ update์์ ํด์ ์์ฒญ ๋ถ๋ ค๋ ์ค์ง์ ์ผ๋ก ๊ฐ์ด ๊ณ์ฐ๋๋๊ฑด ๋ฌผ๋ฆฌ์์ง ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ์ ๋ฐ๋ผ์ ๊ณ์ฐ๋๋๊ฑฐ ์๋?
addfoce๋ก ํ์ ๊ณ์ ์ฃผ๋ฉด ์๋๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋์ SpeedControl๋ก ๊ฐ์ด ์ ํ๊ฐ๋ณด๋ค ๋์์ง๋ฉด velocity๋ก ์๋ ์ ํํ๋๊ฑฐ์
๋๋ฐฑ ์ด๋ฐ๊ฑฐ ํ ๋ ์ถ๊ฐํ ๋ velocity๋ก ํด๋ฒ๋ฆฌ๋ฉด ๋๋ฒก addforce ์ค๋ ํ๋ ์ด์ด๊ฐ ์์ผ๋ก ๋ฐฉํฅํค ๋๋ฅด๋ฉด ๊ธฐ์กด ๋๋ฐฑ ํ์ด velocity๋๋ฌธ์ ๋ฎ์ด์์ฌ์ง
์ฌ์ค ๊ทธ๋ฐ๊ฑด ์๋๋ฐ ๋์ค์ ๊ทธ๋ฐ๊ฑฐ ์ถ๊ฐ ๋ ๋ ์๊ฐํด์ addforce๋ก ํ๊ธดํจ ๊ทธ๋ฆฌ๊ฑฐ addforce๋กํ์ ๋ ๋ ์์ฐ์ค๋ฝ๊ธฐ๋ ํ๊ณ velocity๋ ๊ฐ์๊ธฐ 0์์ ์๋๊ฐ ๋ฐ๋๋๊น ์ข ๋ถ์์ฐ์ค๋ฌ์ ์ ๋ํํ
๋ญ๊ฐ ์ข ์ด์ํ๋ฐ addforce๊ฐ 5.0์ด 0.9๋ง ์ฌ๋ผ๊ฐ ๊ฑด 5.0์ด ๊ธฐ์ค์์ ์๋ก์ด ํ ์ฃผ๋๊น 0.9๋ฐ์ ์๊ฐ๊ฑฐ๊ฐ์๋ฐ axis๋ก ์ํ๋ ๊ฒ ์๋๋ฉด SpeedControl์์ ์ฝ๋๋ฅผ Move()์์๋ ์ถ๊ฐํด๋ด IF๋ฌธ ํ์ฌ์๋>์ต๋์๋ ๋จผ์ ๋๋ ค์ then์ด๋ฉด ์ต๋์๋=velocity, else๋ฉด addforce๋ก