【问题标题】:How can I make a circle from grid of GameObjects?如何从 GameObjects 网格中制作一个圆圈?
【发布时间】:2021-03-11 01:26:52
【问题描述】:

我想要实现的是这样的:

到目前为止,我所拥有的是圆圈的边缘。

我知道这将涉及嵌套的 for 循环。这是我目前所拥有的:

public GameObject player;
private GameObject playerGrid;

public int numOfObjects;
private Vector3 centerPos;
public int size = 2;

public Vector2 speed = new Vector2(50, 50);
private float smoothTime = 0.25f;

void Start()
{
    playerGrid = new GameObject();
    centerPos = transform.position;

    for (int i = 0; i < numOfObjects; i++)
    {
        float pointNum = (i * 1.0f) / numOfObjects;
        float angle = pointNum * Mathf.PI * 2;
        float r = size / 2 * (Mathf.PI); 
        float x = Mathf.Sin(angle) * r;
        float y = Mathf.Cos(angle) * r;
        Vector3 pointPos = new Vector3(x, y, 0) + centerPos;
        GameObject obj = Instantiate(player, pointPos, Quaternion.identity);
        obj.transform.SetParent(playerGrid.transform);
    }        
}

我被困在如何为嵌套的 for 循环实现条件。此外,我无法理解嵌套 for 循环中列位置的计算。我相信条件将是该列或行的 I 的开始和结束: for(int j = i + 1; j

对于 col 位置,我认为它会增加角度足以让正方形为该列提供空间:float x = (Mathf.Sin(angle) + somethingHere) * r;

我只是不知道如何从这里开始。

【问题讨论】:

  • 其实你宁愿穿过一个网格(2个循环)并检查你是否在圆圈内
  • 公平点,但我如何获得正方形的定位,使它们不重叠?对于我的游戏,正方形的像素单位大小必须是动态的。 @derHugo
  • 好吧,就像您发布的图片一样:您只需确保将它们始终彼此相隔 1 个单位.. 因此,如果您的正方形尺寸增加,网格尺寸也会相应增加
  • 好的,我会在输入后发布解决方案。
  • 给出了哪些值?圆半径?对象数量?对象大小(对于方形对象)?

标签: c# unity3d math geometry trigonometry


【解决方案1】:

这是一个画圆的简单方法:

public float circleRadius = 5f;
public float objectSize = 1f;

void OnDrawGizmos()
{
    for (var x = -circleRadius; x <= circleRadius; x++)
    {
        for (var y = -circleRadius; y <= circleRadius; y++)
        {
            var pos = new Vector3(x, 0f, y);
            
            if (pos.magnitude >= circleRadius) continue;

            Gizmos.DrawSphere(pos * (objectSize * 2f), objectSize);
        }
    }
}

【讨论】:

  • 如何添加一个盒子对撞机? @Iggy 我需要一种方法来检查我的方块是否在我的圈子内。
  • @HakeemThomas 这是一个小发明示例。在您的项目中,您将实例化一个游戏对象,而不是绘制小玩意儿,该对象将附加盒子碰撞器。您总是可以只做一个简单的pos.magnitude &lt; x 检查框是否在圆圈内。您还可以使用Physics.OverlapSphere 进行更高级的检测。
  • 非常感谢。我快完成了。我有一个带有框碰撞的线渲染器圆圈。我会看到幅度。
  • Magnitude 有效,但存在问题。某些具有相同值的单位的计算似乎出错了(即:工作点 [(-1.5, 0.5), (1.5, -0.5)] 不工作点[(-0.5, 1.5), (0.5, 1.5 )])。
  • @HakeemThomas 抱歉,我不确定我是否理解问题。
猜你喜欢
  • 2010-11-04
  • 1970-01-01
  • 2014-06-19
  • 2015-01-30
  • 2019-09-04
  • 1970-01-01
  • 2011-03-10
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多