C# 如何从游戏对象的网格中画出一个圆?
我试图实现的是这样的目标: 到目前为止,我得到的是圆的边 我知道这将涉及嵌套for循环。这就是我到目前为止所做的: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
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我只是不知道如何从这里开始。这里有一个画圆的简单方法:
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这是一个小发明示例。在您的项目中,您将实例化一个游戏对象,而不是绘制小发明,该对象将连接框对撞机。您可以始终只执行一个小发明implepos.magnity
检查框是否在圆内。您也可以利用Physical.Overlapphere
进行更高级的检测。非常感谢。我即将完成。我有一个带框碰撞的线渲染器圆。我将了解框的大小。magnity可以工作,但有一个问题。似乎是计算对于某些具有相同值的单元(即:工作点[-1.5,0.5)、(1.5,-0.5)]出现错误,而不是工作点[-0.5,1.5)、(0.5,1.5)]。@HakeemThomas抱歉,我不确定我是否理解此问题。