// Update is called once per frame void Update() { if (currentPlaceableObject == null) { return; } ray = Camera.main.ScreenPointToRay(Input.mousePosition); var hasCollision = Physics.Raycast(ray, out raycastHit, RAY_MAX_LENGTH, TERRAIN_LAYER_MASK); if (hasCollision) { var gridPosition = grid.SnapPositionToGrid(raycastHit.point); currentPlaceableObject.SetPosition(gridPosition); } if (Input.GetMouseButtonUp(0)) { PlaceCurrentObject(); } }