在圆的边缘上移动对象

问题描述

我正在通过Top Down 2D游戏研究战斗机制。我想在玩家周围创建一个圆圈,然后将对象移到该圆圈的边缘。无论您的鼠标在哪里,对象始终位于边缘。我该怎么办?我知道这与数学有关,但是我还没有以正确的方式实现它的经验。这是想法和问题本身的图片Picture

解决方法

很高兴知道用户如何控制播放器。

无论如何,这是我在我的2D项目中使用的一些代码。不知道它是否可以在3D上运行,但是即使不能运行,逻辑也一样

float radius = 400; //radius of circle
Vector3 playerPosition = player.transform.position; //Player's position 
Vector3 centerPosition = transform.localPosition; //center of the circle
float distance = Vector3.Distance(playerPosition,centerPosition); //distance from player to the center of the circle

if (distance > radius) //If the distance is greater than the radius,it is already within the circle
{
   Vector3 fromOriginToObject = playerPosition - centerPosition;
   fromOriginToObject *= radius / distance; //Multiply by radius //Divide by Distance
   Vector3 newPlayerPosition = centerPosition + fromOriginToObject; //all that Math
}

player.transform.localPosition = newPlayerPosition ;

我真的鼓励您检查字体,因为它有一些直观的解释:https://answers.unity.com/questions/1309521/how-to-keep-an-object-within-a-circlesphere-radius.html

,

您将需要圆的半径和中心。然后可能是定义方向的向量。