【问题标题】:How can I reduce the gaps between objects?如何减少对象之间的间隙?
【发布时间】:2020-12-03 08:43:53
【问题描述】:

在顶部:

[Range(10, 100)]
public int gap = 10;
private int oldGapValue = 0;

并且在更新中:

private void Update()
    {
        if(gap > oldGapValue)
        {
            for(int i = 0; i < numberOfUnits; i++)
            {
                units[i].transform.position = (i + 1f) * new Vector3(gap, 0, 0);
            }

            oldGapValue = gap;
        }
        else
        {

        }

这适用于增加间隙。但在其他部分我想减少对象之间的差距。

我试过这个,但效果不好,现在它在减少间隙时工作正常,但现在当添加间隙时效果不佳,它会增加间隙,但也会将单位对象加倍,直到我停止添加间隙,这一切都结巴了。

p>
if(gap > oldGapValue)
        {
            for(int i = 0; i < numberOfUnits; i++)
            {
                units[i].transform.position = (i + 1f) * new Vector3(gap, 0, 0);
            }

            oldGapValue = gap;
        }
        else
        {
            for (int i = 0; i < numberOfUnits; i++)
            {
                units[i].transform.position = (i + 1f) * new Vector3(-gap, 0, 0);
            }
        }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    由于您的逻辑,您似乎正在尝试将对象按gap 的值隔开每一帧。

    我是否可以建议一种不同的方法,并且仅在 gap 的值实际发生变化时才更改对象间距。例如,试试这个代码:

        [SerializeField]
        [Range ( 10f, 100f )]
        private float _gap = 10f;
        private float _oldGap = 10f;
    
        public float gap
        {
            get => _gap;
            set
            {
                _oldGap = _gap;
                Debug.Log ( $"New Gap Value {_gap}" );
    
                for ( int i = 0; i < units.Length; i++ )
                {
                    units [ i ].transform.position = new Vector3 ( (gap * i) + 1f, 0, 0 );
                }
            }
        }
    
        private void OnValidate ( )
        {
            if ( _gap != _oldGap )
                gap = _gap;
        }
    

    【讨论】:

    • 有一个问题。当我运行游戏时,单位首先从某个位置开始,但是一旦我第一次添加间隙,它首先会更改单位位置,然后添加移除间隙。但为什么它首先改变它的位置而不是添加/删除它的起始位置的间隙?
    • 我在循环中尝试过,但效果不佳。 units[i].transform.position = new Vector3(units[i].transform.position.x + (gap * i), units[i].transform.position.y, units[i].transform.position.z );
    • 抱歉,我无法理解您想要达到的目的。一张图片能帮助说明这一点吗?