【问题标题】:Moving an object on the edge of a circle在圆的边缘移动对象
【发布时间】:2021-01-28 02:33:43
【问题描述】:

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

【问题讨论】:

    标签: c# unity3d vector geometry


    【解决方案1】:

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

    【讨论】:

    • 本例中的圆心是播放器。方向由鼠标位置定义。 `mousePos = cam.ScreenToWorldPoint(Input.mousePosition); // 获取鼠标的位置'。我已经这样做了。但我正在努力解决如何让对象围绕圆的椭圆移动
    【解决方案2】:

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

    无论如何,这是我在我的 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

    【讨论】:

    • 感谢您的回答,我一定会调查的。关于游戏,我已经指定游戏是 2D 的 + 如果你读过这个问题,我说过它是自上而下的。使用键盘控制播放器,从“Input.GetAxis”读取输入。
    • 对不起,我的错!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多