๋ด ํ๋ก์ ํธ์์ ์๋ ์ ์บ๋ฆญํฐ ๋ฐ๋ผ๋ค๋๋ ํธ๋ํฐ์ด ํ๋ ์ด์ด์ ์ผ์ ๊ฑฐ๋ฆฌ ๋ฑ ์ ์งํ๋ ๋ฌด๋นํ์
์ฐธ์๋งจ ๊ธ ๋ณด๋ ์๋ ์ ์งํ๋ ๊ฑฐ๋ฆฌ ๋ณ์๋ฅผ ์ต์,์ต๋๊ฐ ๋ณ์๋ค๋ก ๋ถ๋ฆฌํ๋ฉด ์์ ์๋งน์ด ๋ ๊ฑฐ๊ฐ์์ ํจ ํด๋ด
๋๋ฌด ๋ฉ๋ฉด ์ต๋ ๊ฑฐ๋ฆฌ๋ ํ์ฌ ๊ฑฐ๋ฆฌ์ ์ฐจ์ด๋งํผ ํ๋ ์ด์ด ๋ฐฉํฅ์ผ๋ก ๋ฌด๋นํ๊ณ
๋๋ฌด ๊ฐ๊น์ฐ๋ฉด ์ต์ ๊ฑฐ๋ฆฌ๋ ํ์ฌ ๊ฑฐ๋ฆฌ์ ์ฐจ์ด๋งํผ ํ๋ ์ด์ด ๋ฐ๋๋ฐฉํฅ์ผ๋ก ๋ฌด๋นํ๋์์
์๋งน์ด๋ง๋ค ์ต๋ ๊ฑฐ๋ฆฌ ๋ค๋ฅด๊ฒ ํด์ฃผ๊ณ
๋ฐ์ ํจ์๋ฅผ ์ ๋ฐ์ดํธ์์ ๋๋ ค์ฃผ๋ฉด ๋จ
Rigidbody2D rigid;
public Transform followTarget;
public float minDistance = 3f; // ํ๊ฒ๊ณผ ์ต์ ๊ฑฐ๋ฆฌ
public float maxDistance = 3f; // ํ๊ฒ๊ณผ์ ์ ์ง๊ฑฐ๋ฆฌ
public float addSpeed = 5f; // ์ถ๊ฐ ์๋
void FollowMove()
{
// ํ๊ฒ์ด ์์ผ๋ฉด ๋ฆฌํด
if (!followTarget)
return;
// ํ์ฌ ์์น๋ถํฐ ํ๊ฒ ๋ฐฉํฅ์ผ๋ก ๋ฐฉํฅ ๋ฒกํฐ
Vector2 dir = followTarget.position - transform.position;
// ๋ฒกํฐ ๊ธธ์ด ๊ณ์ฐ
float moveSpeed = 0;
// ์ต์ ๊ฑฐ๋ฆฌ๋ณด๋ค ๊ฐ๊น์ธ๋
if (dir.magnitude < minDistance)
{
// ๊ฑฐ๋ฆฌ ์ฐจ์ด๋งํผ ์๋ ๊ณ์ฐ
moveSpeed = dir.magnitude - minDistance;
}
// ์ต๋ ๊ฑฐ๋ฆฌ๋ณด๋ค ๋ฉ๋
else if (dir.magnitude > maxDistance)
{
// ๊ฑฐ๋ฆฌ ์ฐจ์ด๋งํผ ์๋ ๊ณ์ฐ
moveSpeed = dir.magnitude - maxDistance;
}
// ์ด๋์ํค๊ธฐ
rigid.velocity = dir.normalized * moveSpeed * addSpeed;
}
magnitue ์บ์ฑํด์ ์ฐ์ญ์ผ
๊ตฟ
ใฑใ ใ
๊ตฟ
์ธ๊ฐค์ ๋น๊ณผ ์๊ธ ใทใท