Beispiel #1
0
    private void GrassUpdate(int _chunkWidth, int _chunkDepth, int _count)
    {
        for (int i = 0; i < _grassChunk.OneChunkTipNum; i++)
        {
            Vector2         _index      = _maptipsIndices[_chunkDepth, _chunkWidth, i];
            GrassDummyPoint _dummyPoint = _maptipsDummyPoint[(int)_index.x, (int)_index.y];
            GrassObject     _targetObj  = _pooledObjects[_count][i];

            if (!_dummyPoint.CanGrow)
            {
                _targetObj.Object.transform.SetPositionAndRotation(new Vector3(50000, -100, 0), _dummyPoint.Rotation * _targetObj.Object.transform.rotation);
                continue;
            }

            if (_dummyPoint.HasGrown)
            {
                _targetObj.Controller.Growth();
            }
            else
            {
                _targetObj.Controller.ForceScaleZero();
            }
            _targetObj.Object.transform.SetPositionAndRotation(_dummyPoint.Position, _dummyPoint.Rotation * _targetObj.Rotation);

            _matPropBlock.SetTexture("_MainTex", _textures[_dummyPoint.TexIndex]);
            _targetObj.Controller.ChangeMaterials(_matPropBlock);
        }
    }
Beispiel #2
0
    private void SetPoint(int _indexX, int _indexZ)
    {
        Vector3    _point = new Vector3(_indexX * _grassChunk.TipSize, 1000, _indexZ * _grassChunk.TipSize);
        Ray        _ray   = new Ray(_point, new Vector3(0, -1, 0));
        RaycastHit _hit;

        _maptipsDummyPoint[_indexZ, _indexX] = new GrassDummyPoint(new Vector3(_point.x, -1000, _point.z), Quaternion.identity, true, new Vector3(0, 0, 0));

        if (Physics.Raycast(_ray, out _hit, 2000, _lm))
        {
            _ray.origin = _point + new Vector3(_grassChunk.TipSize, 0, _grassChunk.TipSize);
            RaycastHit _anotherHit;

            if (Physics.Raycast(_ray, out _anotherHit, 2000, _lm))
            {
                if (CanGrow(_hit.point.y, _anotherHit.point.y))
                {
                    _point = _hit.point;
                    _maptipsDummyPoint[_indexZ, _indexX] = new GrassDummyPoint(_point, Quaternion.FromToRotation(-_ray.direction, _hit.normal), true, _hit.normal);
                }
            }
        }
    }