问题描述
我正在通过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
,您将需要圆的半径和中心。然后可能是定义方向的向量。