【发布时间】:2021-01-28 02:33:43
【问题描述】:
我正在研究 Top Down 2D 游戏中的战斗机制。我想在玩家周围创建一个圆圈并将对象移动到该圆圈的边缘。无论您的鼠标在哪里,对象始终停留在边缘。我该怎么做?我知道这与数学有关,但我还没有以正确的方式实现它的经验。这是这个想法和问题本身的图片。 Picture.
【问题讨论】:
标签: c# unity3d vector geometry
我正在研究 Top Down 2D 游戏中的战斗机制。我想在玩家周围创建一个圆圈并将对象移动到该圆圈的边缘。无论您的鼠标在哪里,对象始终停留在边缘。我该怎么做?我知道这与数学有关,但我还没有以正确的方式实现它的经验。这是这个想法和问题本身的图片。 Picture.
【问题讨论】:
标签: c# unity3d vector geometry
您将需要圆的半径和圆心。然后可能是一些定义方向的向量。
【讨论】:
很高兴知道用户如何控制播放器。
无论如何,这是我在我的 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
【讨论】: