Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我在Unity中的最小距离不起作用?_C#_Unity3d_Distance - Fatal编程技术网

C# 为什么我在Unity中的最小距离不起作用?

C# 为什么我在Unity中的最小距离不起作用?,c#,unity3d,distance,C#,Unity3d,Distance,统一2D C# 我有一个“装备”对象可以繁殖 我已经确定了对象之间的最小和最大距离 但是,对象仍然在其他对象上繁殖,覆盖(重叠)它们 如何改变它 我的剧本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class GearsSpawner : MonoBehaviour { public GameObject theGear; public Tran

统一2D C#

我有一个“装备”对象可以繁殖

我已经确定了对象之间的最小和最大距离

但是,对象仍然在其他对象上繁殖,覆盖(重叠)它们

如何改变它

我的剧本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GearsSpawner : MonoBehaviour
{

    public GameObject theGear;
    public Transform generationPoint;

    public float distanceBetween;
    public float distanceBetweenMin;
    public float distanceBetweenMax;

    private int gearSelector;
    public GameObject[] theGears;

    private float minWidth;
    public Transform maxWidthPoint;

    private float maxWidth;
    public float maxWidthChange;
    private float widthChange;

    void Start()
    {
        minWidth = transform.position.x;
        maxWidth = maxWidthPoint.position.x;
    }


    void Update()
    {
        if (transform.position.y < generationPoint.position.y)
        {
            distanceBetween = Random.Range(distanceBetweenMin, distanceBetweenMax);
            gearSelector = Random.Range(0, theGears.Length);
            widthChange = transform.position.x + Random.Range(maxWidthChange, -maxWidthChange);
            if (widthChange > maxWidth)
            {
                widthChange = maxWidth;
            }
            else if (widthChange < minWidth)
            {
                widthChange = minWidth;
            }
            transform.position = new Vector3(widthChange, transform.position.y + distanceBetween, transform.position.z);
            Instantiate(theGears[gearSelector], transform.position, transform.rotation);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类GearsSpawner:单一行为
{
公共游戏对象theGear;
公共转换生成点;
公共浮动距离;
公共浮球之间的距离为分钟;
最大值之间的公共浮动距离;
私人int档位选择器;
公共游戏对象[]齿轮;
私有浮动最小宽度;
公共转换点;
私有浮动最大宽度;
公共浮动汇率制度改革;
私人股本变动;
void Start()
{
minWidth=transform.position.x;
maxWidth=maxWidthPoint.position.x;
}
无效更新()
{
if(transform.position.y最大宽度)
{
宽度变化=最大宽度;
}
否则如果(宽度变化<最小宽度)
{
宽度变化=最小宽度;
}
transform.position=新矢量3(宽度变化,transform.position.y+距离之间,transform.position.z);
实例化(齿轮[gearSelector],transform.position,transform.rotation);
}
}
}


我猜您的对象的大小不完全是一个单位,请检查相关对象的比例并相应地调整最小距离

我不确定是否完全理解您的代码应该做什么。 然而,有一些地方看起来很可疑,我根据对其预期用途的理解对其进行了更改(标记为
FIX
):

void Update()
{
if(transform.position.y最大宽度)
{
宽度变化=最大宽度;
}
否则如果(宽度变化<最小宽度)
{
宽度变化=最小宽度;
}
Vector3 newPosition=new Vector3(widthChange,transform.position.y+distanceBetween,transform.position.z);//修复:不覆盖生成者的位置,而是将新位置存储在本地并使用它
实例化(齿轮[齿轮选择器]、新位置、变换旋转);
}
}

希望我能正确理解您的代码:您试图通过向上移动一个随机量,然后向左/向右移动一个随机量,从下到上创建一个齿轮链。如果这是正确的,那么你可能想得太多了

Rect边界;
void Start()
{
边界=新矩形(
transform.position,//角点1
maxWidthPoint.position-transform.position//大小:角点2-角点1
);
}
无效更新()
{
if(transform.position.ybounders.yMax)
transform.position.y=bounders.yMax
if(transform.position.xbounders.xMax)
transform.position.x=bounders.xMax
int索引=随机范围(0,齿轮长度);
实例化(齿轮[索引]、transform.position、transform.rotation);
}
}
已解决

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GearsSpawner : MonoBehaviour {


public GameObject theGear;
public Transform generationPoint;
public float distanceBetween;

public float distanceBetweenMin;
public float distanceBetweenMax;

private int gearSelector;

public GameObject[] theGears;

private float minWidth;
public Transform maxWidthPoint;
private float maxWidth;
public float maxWidthChange;

private float widthChange;

void Start (){

    minWidth = transform.position.x;
    maxWidth = maxWidthPoint.position.x;
}



public void Update (){

    if (transform.position.y < generationPoint.position.y)
    {
        distanceBetween = Random.Range (distanceBetweenMin, distanceBetweenMax) + 0.5f;

        gearSelector = Random.Range (0, theGears.Length);

        widthChange = transform.position.x + Random.Range (maxWidthChange, -maxWidthChange);

        if (widthChange > maxWidth) {
            widthChange = maxWidth;
        } else if (widthChange < minWidth)
        {
            widthChange = minWidth;
        }

        transform.position = new Vector3 (widthChange , transform.position.y + distanceBetween, transform.position.z);

        Instantiate (theGears[gearSelector], transform.position, transform.rotation);
    }
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类GearsSpawner:单一行为{
公共游戏对象theGear;
公共转换生成点;
公共浮动距离;
公共浮球之间的距离为分钟;
最大值之间的公共浮动距离;
私人int档位选择器;
公共游戏对象[]齿轮;
私有浮动最小宽度;
公共转换点;
私有浮动最大宽度;
公共浮动汇率制度改革;
私人股本变动;
无效开始(){
minWidth=transform.position.x;
maxWidth=maxWidthPoint.position.x;
}
公共无效更新(){
if(transform.position.y最大宽度){
宽度变化=最大宽度;
}否则如果(宽度变化<最小宽度)
{
宽度变化=最小宽度;
}
transform.position=新矢量3(宽度变化,transform.position.y+距离之间,transform.position.z);
实例化(齿轮[gearSelector],transform.position,transform.rotation);
}
}
}

我很抱歉写这篇文章,但它的效果很糟糕:):)现在对象只产生重叠。那么你应该更详细地描述你正在寻找的行为。很难解决未知问题。这是同一个对象,只是减少和增加了。如何调整?不减少对象,而是创建对象就足够了吗
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GearsSpawner : MonoBehaviour {


public GameObject theGear;
public Transform generationPoint;
public float distanceBetween;

public float distanceBetweenMin;
public float distanceBetweenMax;

private int gearSelector;

public GameObject[] theGears;

private float minWidth;
public Transform maxWidthPoint;
private float maxWidth;
public float maxWidthChange;

private float widthChange;

void Start (){

    minWidth = transform.position.x;
    maxWidth = maxWidthPoint.position.x;
}



public void Update (){

    if (transform.position.y < generationPoint.position.y)
    {
        distanceBetween = Random.Range (distanceBetweenMin, distanceBetweenMax) + 0.5f;

        gearSelector = Random.Range (0, theGears.Length);

        widthChange = transform.position.x + Random.Range (maxWidthChange, -maxWidthChange);

        if (widthChange > maxWidth) {
            widthChange = maxWidth;
        } else if (widthChange < minWidth)
        {
            widthChange = minWidth;
        }

        transform.position = new Vector3 (widthChange , transform.position.y + distanceBetween, transform.position.z);

        Instantiate (theGears[gearSelector], transform.position, transform.rotation);
    }