28a7d72fe39c3ba963f2d1bc109c293c560cfe14f6a978fcc1599f1bc846fdf30fa0f0b92ab78ade73



๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์›๋ž˜ ์ € ์บ๋ฆญํ„ฐ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ํ•ธ๋“œํฐ์ด ํ”Œ๋ ˆ์ด์–ด์™€ ์ผ์ •๊ฑฐ๋ฆฌ ๋”ฑ ์œ ์ง€ํ•˜๋Š” ๋ฌด๋น™ํ–ˆ์Œ


์ฐธ์ƒˆ๋งจ ๊ธ€ ๋ณด๋‹ˆ ์›๋ž˜ ์œ ์ง€ํ•˜๋˜ ๊ฑฐ๋ฆฌ ๋ณ€์ˆ˜๋ฅผ ์ตœ์†Œ,์ตœ๋Œ€๊ฐ’ ๋ณ€์ˆ˜๋“ค๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์š”์‹œ ์•Œ๋งน์ด ๋ ๊ฑฐ๊ฐ™์•„์„œ ํ•จ ํ•ด๋ด„


๋„ˆ๋ฌด ๋ฉ€๋ฉด ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋ž‘ ํ˜„์žฌ ๊ฑฐ๋ฆฌ์˜ ์ฐจ์ด๋งŒํผ ํ”Œ๋ ˆ์ด์–ด ๋ฐฉํ–ฅ์œผ๋กœ ๋ฌด๋น™ํ•˜๊ณ 

๋„ˆ๋ฌด ๊ฐ€๊นŒ์šฐ๋ฉด ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ž‘ ํ˜„์žฌ ๊ฑฐ๋ฆฌ์˜ ์ฐจ์ด๋งŒํผ ํ”Œ๋ ˆ์ด์–ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ๋ฌด๋น™ํ•˜๋Š”์‹์ž„


์•Œ๋งน์ด๋งˆ๋‹ค ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ฃผ๊ณ 

๋ฐ‘์˜ ํ•จ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ์—์„œ ๋Œ๋ ค์ฃผ๋ฉด ๋จ


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;
}