C# 如何从游戏对象的网格中画出一个圆?

C# 如何从游戏对象的网格中画出一个圆?,c#,unity3d,math,geometry,trigonometry,C#,Unity3d,Math,Geometry,Trigonometry,我试图实现的是这样的目标: 到目前为止,我得到的是圆的边 我知道这将涉及嵌套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

我试图实现的是这样的目标:

到目前为止,我得到的是圆的边

我知道这将涉及嵌套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);
    }        
}
公共游戏对象玩家;
私有游戏对象playerGrid;
公共物品;
私人Vector3 centerPos;
公共int size=2;
公共矢量2速度=新矢量2(50,50);
私人浮动平滑时间=0.25f;
void Start()
{
playerGrid=新游戏对象();
centerPos=变换位置;
对于(int i=0;i
我一直在研究如何为嵌套for循环实现条件。此外,我很难理解嵌套for循环中列位置的计算。我相信条件应该是该列或行的I的开始和结束:for(int j=I+1;j 对于col位置,我认为它将增加角度,足以为该列提供正方形的空间:float x=(Mathf.Sin(angle)+somethingHere)*r


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

这里有一个画圆的简单方法:

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);
        }
    }
}
public float circleRadius=5f;
公共浮动对象大小=1f;
void OnDrawGizmos()
{

对于(var x=-circleRadius;x,这里有一个简单的画圆方法:

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);
        }
    }
}
public float circleRadius=5f;
公共浮动对象大小=1f;
void OnDrawGizmos()
{


对于(var x=-circleRadius;x),实际上您更希望通过网格运行(2个循环)检查你是否在圆内或不公平点内,但我如何获得正方形的位置,使它们不会重叠?在我的游戏中,正方形需要以像素单位大小动态显示。@derHugoWell就像你发布的图像中所示:你只需确保它们始终彼此间隔1个单位。因此,如果你的正方形大小变大o网格大小会随着Lyokay的增长而增长,我将在键入解决方案后发布。给出了哪些值?圆半径?对象数量?对象大小(对于方形对象)?实际上,您更希望穿过网格(2个循环)检查你是否在圆内或不公平点内,但我如何获得正方形的位置,使它们不会重叠?在我的游戏中,正方形需要以像素单位大小动态显示。@derHugoWell就像你发布的图像中所示:你只需确保它们始终彼此间隔1个单位。因此,如果你的正方形大小变大o网格大小会随着Lyokay的增长而增长,我将在键入解决方案后发布。给出了哪些值?圆半径?对象数?对象大小(对于方形对象)?如何在此添加框碰撞器?@Iggy我需要一种方法来检查我的方块是否在我的圆内。@HakeemThomas这是一个gizmo示例。在您的项目中,您可以实例化一个游戏对象,而不是绘制gizmo,该对象将连接框碰撞器。您可以始终只执行一个简单的
pos.magnity
检查ox在圆圈内。您还可以利用
物理.Overlapphere
进行更高级的检测。非常感谢。我即将完成。我有一个带有框碰撞的线渲染器圆圈。我将了解大小。大小可以工作,但有一个问题。对于某些具有相同值的单位,似乎计算出错(即:工作点[(-1.5,0.5),(1.5,-0.5)]不是工作点[(-0.5,1.5),(0.5,1.5)]).@HakeemThomas抱歉,我不确定我是否理解这个问题。如何在此添加框对撞机?@Iggy我需要一种方法来检查我的正方形是否在我的圆内。@HakeemThomas这是一个小发明示例。在您的项目中,您将实例化一个游戏对象,而不是绘制小发明,该对象将连接框对撞机。您可以始终只执行一个小发明imple
pos.magnity
检查框是否在圆内。您也可以利用
Physical.Overlapphere
进行更高级的检测。非常感谢。我即将完成。我有一个带框碰撞的线渲染器圆。我将了解框的大小。magnity可以工作,但有一个问题。似乎是计算对于某些具有相同值的单元(即:工作点[-1.5,0.5)、(1.5,-0.5)]出现错误,而不是工作点[-0.5,1.5)、(0.5,1.5)]。@HakeemThomas抱歉,我不确定我是否理解此问题。