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); } }
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); } } } }