public void TestPlaceObject()
        {
            // Arrange
            aRObjectAlignment.RegistererUnaligned(aRObject);
            var blankVector = Vector3.zero;
            var cameraPos   = new Vector3(1, 4, 6);
            var aRObjectPos = new Vector3(0, 1, 2);
            var planePoint  = new Vector3(0, 5, 0);

            cameraSystem.Pos.Returns(cameraPos);
            aRObject.Pos.Returns(aRObjectPos);
            aRObject.IsVisible.Returns(true);
            raycastSystem.TryToGetPlanePoint(
                cameraPos,
                Utils.GetDirectionBetweenVectors(cameraPos, aRObjectPos),
                out blankVector).Returns(x => {
                x[2] = planePoint;
                return(true);
            });

            // Act
            aRObjectAlignment.Tick();

            // Assert
            aRObject.Received().SetPosition(planePoint);
        }
        private void Align(IARObject arObject)
        {
            if (!arObject.IsVisible)
            {
                return;
            }
            var direction = Utils.GetDirectionBetweenVectors(cameraSystem.Pos, arObject.Pos);
            var newPos    = Vector3.zero;

            if (!raycastSystem.TryToGetPlanePoint(cameraSystem.Pos, direction, out newPos))
            {
                return;
            }
            arObject.SetPosition(newPos);
            unaligned.Remove(arObject);
        }