public ShowsNewInSceneKitBadge ( bool showsBadge ) : void | ||
showsBadge | bool | |
return | void |
public override void PresentStep(int index, PresentationViewController presentationViewController) { switch (index) { case 0: break; case 1: // Set the slide's subtitle and display the primitves TextManager.SetSubtitle("Built-in parametric primitives"); PresentPrimitives(); break; case 2: // Hide the carousel and illustrate SCNText TextManager.FlipOutText(SlideTextManager.TextType.Subtitle); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 0.5f; SCNTransaction.SetCompletionBlock(() => { CarouselNode.RemoveFromParentNode(); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; PresentTextNode(); TextNode.Opacity = 1.0f; SCNTransaction.Commit(); }); CarouselNode.Opacity = 0.0f; SCNTransaction.Commit(); TextManager.SetSubtitle("Built-in 3D text"); TextManager.AddBulletAtLevel("SCNText", 0); TextManager.FlipInText(SlideTextManager.TextType.Subtitle); TextManager.FlipInText(SlideTextManager.TextType.Bullet); break; case 3: // Hide the 3D text and introduce SCNShape SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 0.5f; SCNTransaction.SetCompletionBlock(() => { if (TextNode != null) { TextNode.RemoveFromParentNode(); } presentationViewController.ShowsNewInSceneKitBadge(true); TextManager.FlipOutText(SlideTextManager.TextType.Subtitle); TextManager.FlipOutText(SlideTextManager.TextType.Bullet); TextManager.SetSubtitle("3D Shapes"); TextManager.AddBulletAtLevel("SCNShape", 0); TextManager.AddBulletAtLevel("Initializes with a NSBezierPath", 0); TextManager.AddBulletAtLevel("Extrusion and chamfer", 0); TextManager.AddCode("#aNode.Geometry = SCNShape.#Create# (aBezierPath, 10);#"); TextManager.FlipInText(SlideTextManager.TextType.Subtitle); TextManager.FlipInText(SlideTextManager.TextType.Bullet); TextManager.FlipInText(SlideTextManager.TextType.Code); }); if (TextNode != null) { TextNode.Opacity = 0.0f; } SCNTransaction.Commit(); break; case 4: TextManager.FadeOutText(SlideTextManager.TextType.Bullet); TextManager.FadeOutText(SlideTextManager.TextType.Code); // Illustrate SCNShape, show the floor ouline Level2Node = Level2(); Level2OutlineNode = Level2Outline(); Level2Node.Position = Level2OutlineNode.Position = new SCNVector3(-11, 0, -5); Level2Node.Rotation = Level2OutlineNode.Rotation = new SCNVector4(1, 0, 0, -(float)(Math.PI / 2)); Level2Node.Opacity = Level2OutlineNode.Opacity = 0.0f; Level2Node.Scale = new SCNVector3(0.03f, 0.03f, 0); Level2OutlineNode.Scale = new SCNVector3(0.03f, 0.03f, 0.05f); GroundNode.AddChildNode(Level2OutlineNode); GroundNode.AddChildNode(Level2Node); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; Level2OutlineNode.Opacity = 1.0f; SCNTransaction.Commit(); break; case 5: presentationViewController.ShowsNewInSceneKitBadge(false); // Show the extruded floor SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; Level2Node.Opacity = 1.0f; Level2Node.Scale = new SCNVector3(0.03f, 0.03f, 0.05f); SCNTransaction.SetCompletionBlock(() => { SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1.5f; // move the camera a little higher presentationViewController.CameraNode.Position = new SCNVector3(0, 7, -3); presentationViewController.CameraPitch.Rotation = new SCNVector4(1, 0, 0, -(float)(Math.PI / 4) * 0.7f); SCNTransaction.Commit(); }); SCNTransaction.Commit(); break; case 6: TextManager.FadeOutText(SlideTextManager.TextType.Subtitle); TextManager.FlipOutText(SlideTextManager.TextType.Bullet); // Example of a custom geometry (Möbius strip) TextManager.SetSubtitle("Custom geometry"); TextManager.AddBulletAtLevel("Custom vertices, normals and texture coordinates", 0); TextManager.AddBulletAtLevel("SCNGeometry", 0); TextManager.FlipInText(SlideTextManager.TextType.Subtitle); TextManager.FlipInText(SlideTextManager.TextType.Bullet); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; // move the camera back to its previous position presentationViewController.CameraNode.Position = new SCNVector3(0, 0, 0); presentationViewController.CameraPitch.Rotation = new SCNVector4(1, 0, 0, Pitch * (float)(Math.PI / 180.0)); Level2Node.Opacity = 0.0f; Level2OutlineNode.Opacity = 0.0f; SCNTransaction.Commit(); break; } }
public override void PresentStep(int index, PresentationViewController presentationViewController) { switch (index) { case 0: // Hide everything (in case the user went backward) for (var i = 1; i < 4; i++) { var teapot = GroundNode.FindChildNode("Teapot" + i, true); teapot.Opacity = 0.0f; } break; case 1: // Move the camera and adjust the clipping plane SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 3; presentationViewController.CameraNode.Position = new SCNVector3(0, 0, 200); presentationViewController.CameraNode.Camera.ZFar = 500.0f; SCNTransaction.Commit(); break; case 2: // Revert to original position SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; presentationViewController.CameraNode.Position = new SCNVector3(0, 0, 0); presentationViewController.CameraNode.Camera.ZFar = 100.0f; SCNTransaction.Commit(); break; case 3: var numberNodes = new SCNNode[] { AddNumberNode("64k", -17), AddNumberNode("6k", -9), AddNumberNode("3k", -1), AddNumberNode("1k", 6.5f), AddNumberNode("256", 14) }; SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; // Move the camera and the text presentationViewController.CameraHandle.Position = new SCNVector3(presentationViewController.CameraHandle.Position.X, presentationViewController.CameraHandle.Position.Y + 6, presentationViewController.CameraHandle.Position.Z); TextManager.TextNode.Position = new SCNVector3(TextManager.TextNode.Position.X, TextManager.TextNode.Position.Y + 6, TextManager.TextNode.Position.Z); // Show the remaining resolutions for (var i = 0; i < 5; i++) { var numberNode = numberNodes [i]; numberNode.Position = new SCNVector3(numberNode.Position.X, 7, -5); var teapot = GroundNode.FindChildNode("Teapot" + i, true); teapot.Opacity = 1.0f; teapot.Rotation = new SCNVector4(0, 0, 1, (float)(Math.PI / 4)); teapot.Position = new SCNVector3((i - 2) * 8, 5, teapot.Position.Z); } SCNTransaction.Commit(); break; case 4: presentationViewController.ShowsNewInSceneKitBadge(true); // Remove the numbers RemoveNumberNodes(); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; // Add some text and code TextManager.SetSubtitle("SCNLevelOfDetail"); TextManager.AddCode("#var lod1 = SCNLevelOfDetail.#CreateWithWorldSpaceDistance# (aGeometry, aDistance); \n" + "geometry.#LevelsOfDetail# = new SCNLevelOfDetail { lod1, lod2, ..., lodn };#"); // Animation the merge for (int i = 0; i < 5; i++) { var teapot = GroundNode.FindChildNode("Teapot" + i, true); teapot.Opacity = i == 0 ? 1.0f : 0.0f; teapot.Rotation = new SCNVector4(0, 0, 1, 0); teapot.Position = new SCNVector3(0, -5, teapot.Position.Z); } // Move the camera and the text presentationViewController.CameraHandle.Position = new SCNVector3(presentationViewController.CameraHandle.Position.X, presentationViewController.CameraHandle.Position.Y - 3, presentationViewController.CameraHandle.Position.Z); TextManager.TextNode.Position = new SCNVector3(TextManager.TextNode.Position.X, TextManager.TextNode.Position.Y - 3, TextManager.TextNode.Position.Z); SCNTransaction.Commit(); break; case 5: presentationViewController.ShowsNewInSceneKitBadge(false); SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 3; // Change the lighting to remove the front light and rise the main light presentationViewController.UpdateLightingWithIntensities(new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f }); presentationViewController.RiseMainLight(true); // Remove some text TextManager.FadeOutText(SlideTextManager.TextType.Title); TextManager.FadeOutText(SlideTextManager.TextType.Subtitle); TextManager.FadeOutText(SlideTextManager.TextType.Code); SCNTransaction.Commit(); // Retrieve the main teapot var maintTeapot = GroundNode.FindChildNode("Teapot0", true); // The distances to use for each LOD var distances = new float[] { 30, 50, 90, 150 }; // An array of SCNLevelOfDetail instances that we will build var levelsOfDetail = new SCNLevelOfDetail[4]; for (var i = 1; i < 5; i++) { var teapotNode = GroundNode.FindChildNode("Teapot" + i, true); var teapot = teapotNode.Geometry; // Unshare the material because we will highlight the different levels of detail with different colors in the next step teapot.FirstMaterial = (SCNMaterial)teapot.FirstMaterial.Copy(); // Build the SCNLevelOfDetail instance var levelOfDetail = SCNLevelOfDetail.CreateWithWorldSpaceDistance(teapot, distances [i - 1]); levelsOfDetail [i - 1] = levelOfDetail; } maintTeapot.Geometry.LevelsOfDetail = levelsOfDetail; // Duplicate and move the teapots var startTime = CAAnimation.CurrentMediaTime(); var delay = 0.2; var rowCount = 9; var columnCount = 12; SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 0; // Change the far clipping plane to be able to see far away presentationViewController.CameraNode.Camera.ZFar = 1000.0; for (var j = 0; j < columnCount; j++) { for (var i = 0; i < rowCount; i++) { // Clone var clone = maintTeapot.Clone(); maintTeapot.ParentNode.AddChildNode(clone); // Animate var animation = CABasicAnimation.FromKeyPath("position"); animation.Additive = true; animation.Duration = 1.0; animation.To = NSValue.FromVector(new SCNVector3((i - rowCount / 2.0f) * 12.0f, 5 + (columnCount - j) * 15.0f, 0)); animation.From = NSValue.FromVector(new SCNVector3(0, 0, 0)); animation.BeginTime = startTime + delay; // desynchronize // Freeze at the end of the animation animation.RemovedOnCompletion = false; animation.FillMode = CAFillMode.Forwards; clone.AddAnimation(animation, new NSString("cloneAnimation")); // Animate the hidden property to automatically show the node when the position animation starts animation = CABasicAnimation.FromKeyPath("hidden"); animation.Duration = delay + 0.01; animation.FillMode = CAFillMode.Both; animation.From = new NSNumber(1); animation.To = new NSNumber(0); clone.AddAnimation(animation, new NSString("cloneAnimation2")); delay += 0.05; } } SCNTransaction.Commit(); // Animate the camera while we duplicate the nodes SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1.0 + rowCount * columnCount * 0.05; var position = presentationViewController.CameraHandle.Position; presentationViewController.CameraHandle.Position = new SCNVector3(position.X, position.Y + 5, position.Z); presentationViewController.CameraPitch.Rotation = new SCNVector4(1, 0, 0, presentationViewController.CameraPitch.Rotation.W - ((float)(Math.PI / 4) * 0.1f)); SCNTransaction.Commit(); break; case 6: // Highlight the levels of detail with colors var teapotChild = GroundNode.FindChildNode("Teapot0", true); var colors = new NSColor[] { NSColor.Red, NSColor.Orange, NSColor.Yellow, NSColor.Green }; SCNTransaction.Begin(); SCNTransaction.AnimationDuration = 1; for (var i = 0; i < 4; i++) { var levelOfDetail = teapotChild.Geometry.LevelsOfDetail [i]; levelOfDetail.Geometry.FirstMaterial.Multiply.Contents = colors [i]; } SCNTransaction.Commit(); break; } }
public override void PresentStep (int index, PresentationViewController presentationViewController) { switch (index) { case 0: // Hide everything (in case the user went backward) for (var i = 1; i < 4; i++) { var teapot = GroundNode.FindChildNode ("Teapot" + i, true); teapot.Opacity = 0.0f; } break; case 1: // Move the camera and adjust the clipping plane SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 3; presentationViewController.CameraNode.Position = new SCNVector3 (0, 0, 200); presentationViewController.CameraNode.Camera.ZFar = 500.0f; SCNTransaction.Commit (); break; case 2: // Revert to original position SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; presentationViewController.CameraNode.Position = new SCNVector3 (0, 0, 0); presentationViewController.CameraNode.Camera.ZFar = 100.0f; SCNTransaction.Commit (); break; case 3: var numberNodes = new SCNNode[] { AddNumberNode ("64k", -17), AddNumberNode ("6k", -9), AddNumberNode ("3k", -1), AddNumberNode ("1k", 6.5f), AddNumberNode ("256", 14) }; SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; // Move the camera and the text presentationViewController.CameraHandle.Position = new SCNVector3 (presentationViewController.CameraHandle.Position.X, presentationViewController.CameraHandle.Position.Y + 6, presentationViewController.CameraHandle.Position.Z); TextManager.TextNode.Position = new SCNVector3 (TextManager.TextNode.Position.X, TextManager.TextNode.Position.Y + 6, TextManager.TextNode.Position.Z); // Show the remaining resolutions for (var i = 0; i < 5; i++) { var numberNode = numberNodes [i]; numberNode.Position = new SCNVector3 (numberNode.Position.X, 7, -5); var teapot = GroundNode.FindChildNode ("Teapot" + i, true); teapot.Opacity = 1.0f; teapot.Rotation = new SCNVector4 (0, 0, 1, (float)(Math.PI / 4)); teapot.Position = new SCNVector3 ((i - 2) * 8, 5, teapot.Position.Z); } SCNTransaction.Commit (); break; case 4: presentationViewController.ShowsNewInSceneKitBadge (true); // Remove the numbers RemoveNumberNodes (); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; // Add some text and code TextManager.SetSubtitle ("SCNLevelOfDetail"); TextManager.AddCode ("#var lod1 = SCNLevelOfDetail.#CreateWithWorldSpaceDistance# (aGeometry, aDistance); \n" + "geometry.#LevelsOfDetail# = new SCNLevelOfDetail { lod1, lod2, ..., lodn };#"); // Animation the merge for (int i = 0; i < 5; i++) { var teapot = GroundNode.FindChildNode ("Teapot" + i, true); teapot.Opacity = i == 0 ? 1.0f : 0.0f; teapot.Rotation = new SCNVector4 (0, 0, 1, 0); teapot.Position = new SCNVector3 (0, -5, teapot.Position.Z); } // Move the camera and the text presentationViewController.CameraHandle.Position = new SCNVector3 (presentationViewController.CameraHandle.Position.X, presentationViewController.CameraHandle.Position.Y - 3, presentationViewController.CameraHandle.Position.Z); TextManager.TextNode.Position = new SCNVector3 (TextManager.TextNode.Position.X, TextManager.TextNode.Position.Y - 3, TextManager.TextNode.Position.Z); SCNTransaction.Commit (); break; case 5: presentationViewController.ShowsNewInSceneKitBadge (false); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 3; // Change the lighting to remove the front light and rise the main light presentationViewController.UpdateLightingWithIntensities (new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.3f }); presentationViewController.RiseMainLight (true); // Remove some text TextManager.FadeOutText (SlideTextManager.TextType.Title); TextManager.FadeOutText (SlideTextManager.TextType.Subtitle); TextManager.FadeOutText (SlideTextManager.TextType.Code); SCNTransaction.Commit (); // Retrieve the main teapot var maintTeapot = GroundNode.FindChildNode ("Teapot0", true); // The distances to use for each LOD var distances = new float [4] { 30, 50, 90, 150 }; // An array of SCNLevelOfDetail instances that we will build var levelsOfDetail = new SCNLevelOfDetail[4]; for (var i = 1; i < 5; i++) { var teapotNode = GroundNode.FindChildNode ("Teapot" + i, true); var teapot = teapotNode.Geometry; // Unshare the material because we will highlight the different levels of detail with different colors in the next step teapot.FirstMaterial = (SCNMaterial)teapot.FirstMaterial.Copy (); // Build the SCNLevelOfDetail instance var levelOfDetail = SCNLevelOfDetail.CreateWithWorldSpaceDistance (teapot, distances [i - 1]); levelsOfDetail [i - 1] = levelOfDetail; } maintTeapot.Geometry.LevelsOfDetail = levelsOfDetail; // Duplicate and move the teapots var startTime = CAAnimation.CurrentMediaTime (); var delay = 0.2; var rowCount = 9; var columnCount = 12; SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 0; // Change the far clipping plane to be able to see far away presentationViewController.CameraNode.Camera.ZFar = 1000.0; for (var j = 0; j < columnCount; j++) { for (var i = 0; i < rowCount; i++) { // Clone var clone = maintTeapot.Clone (); maintTeapot.ParentNode.AddChildNode (clone); // Animate var animation = CABasicAnimation.FromKeyPath ("position"); animation.Additive = true; animation.Duration = 1.0; animation.To = NSValue.FromVector (new SCNVector3 ((i - rowCount / 2.0f) * 12.0f, 5 + (columnCount - j) * 15.0f, 0)); animation.From = NSValue.FromVector (new SCNVector3 (0, 0, 0)); animation.BeginTime = startTime + delay; // desynchronize // Freeze at the end of the animation animation.RemovedOnCompletion = false; animation.FillMode = CAFillMode.Forwards; clone.AddAnimation (animation, new NSString ("cloneAnimation")); // Animate the hidden property to automatically show the node when the position animation starts animation = CABasicAnimation.FromKeyPath ("hidden"); animation.Duration = delay + 0.01; animation.FillMode = CAFillMode.Both; animation.From = new NSNumber (1); animation.To = new NSNumber (0); clone.AddAnimation (animation, new NSString ("cloneAnimation2")); delay += 0.05; } } SCNTransaction.Commit (); // Animate the camera while we duplicate the nodes SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1.0 + rowCount * columnCount * 0.05; var position = presentationViewController.CameraHandle.Position; presentationViewController.CameraHandle.Position = new SCNVector3 (position.X, position.Y + 5, position.Z); presentationViewController.CameraPitch.Rotation = new SCNVector4 (1, 0, 0, presentationViewController.CameraPitch.Rotation.W - ((float)(Math.PI / 4) * 0.1f)); SCNTransaction.Commit (); break; case 6: // Highlight the levels of detail with colors var teapotChild = GroundNode.FindChildNode ("Teapot0", true); var colors = new NSColor[] { NSColor.Red, NSColor.Orange, NSColor.Yellow, NSColor.Green }; SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; for (var i = 0; i < 4; i++) { var levelOfDetail = teapotChild.Geometry.LevelsOfDetail [i]; levelOfDetail.Geometry.FirstMaterial.Multiply.Contents = colors [i]; } SCNTransaction.Commit (); break; } }
public override void PresentStep (int index, PresentationViewController presentationViewController) { switch (index) { case 0: break; case 1: // Set the slide's subtitle and display the primitves TextManager.SetSubtitle ("Built-in parametric primitives"); PresentPrimitives (); break; case 2: // Hide the carousel and illustrate SCNText TextManager.FlipOutText (SlideTextManager.TextType.Subtitle); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 0.5f; SCNTransaction.SetCompletionBlock (() => { CarouselNode.RemoveFromParentNode (); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; PresentTextNode (); TextNode.Opacity = 1.0f; SCNTransaction.Commit (); }); CarouselNode.Opacity = 0.0f; SCNTransaction.Commit (); TextManager.SetSubtitle ("Built-in 3D text"); TextManager.AddBulletAtLevel ("SCNText", 0); TextManager.FlipInText (SlideTextManager.TextType.Subtitle); TextManager.FlipInText (SlideTextManager.TextType.Bullet); break; case 3: // Hide the 3D text and introduce SCNShape SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 0.5f; SCNTransaction.SetCompletionBlock (() => { if (TextNode != null) TextNode.RemoveFromParentNode (); presentationViewController.ShowsNewInSceneKitBadge (true); TextManager.FlipOutText (SlideTextManager.TextType.Subtitle); TextManager.FlipOutText (SlideTextManager.TextType.Bullet); TextManager.SetSubtitle ("3D Shapes"); TextManager.AddBulletAtLevel ("SCNShape", 0); TextManager.AddBulletAtLevel ("Initializes with a NSBezierPath", 0); TextManager.AddBulletAtLevel ("Extrusion and chamfer", 0); TextManager.AddCode ("#aNode.Geometry = SCNShape.#Create# (aBezierPath, 10);#"); TextManager.FlipInText (SlideTextManager.TextType.Subtitle); TextManager.FlipInText (SlideTextManager.TextType.Bullet); TextManager.FlipInText (SlideTextManager.TextType.Code); }); if (TextNode != null) TextNode.Opacity = 0.0f; SCNTransaction.Commit (); break; case 4: TextManager.FadeOutText (SlideTextManager.TextType.Bullet); TextManager.FadeOutText (SlideTextManager.TextType.Code); // Illustrate SCNShape, show the floor ouline Level2Node = Level2 (); Level2OutlineNode = Level2Outline (); Level2Node.Position = Level2OutlineNode.Position = new SCNVector3 (-11, 0, -5); Level2Node.Rotation = Level2OutlineNode.Rotation = new SCNVector4 (1, 0, 0, -(float)(Math.PI / 2)); Level2Node.Opacity = Level2OutlineNode.Opacity = 0.0f; Level2Node.Scale = new SCNVector3 (0.03f, 0.03f, 0); Level2OutlineNode.Scale = new SCNVector3 (0.03f, 0.03f, 0.05f); GroundNode.AddChildNode (Level2OutlineNode); GroundNode.AddChildNode (Level2Node); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; Level2OutlineNode.Opacity = 1.0f; SCNTransaction.Commit (); break; case 5: presentationViewController.ShowsNewInSceneKitBadge (false); // Show the extruded floor SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; Level2Node.Opacity = 1.0f; Level2Node.Scale = new SCNVector3 (0.03f, 0.03f, 0.05f); SCNTransaction.SetCompletionBlock (() => { SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1.5f; // move the camera a little higher presentationViewController.CameraNode.Position = new SCNVector3 (0, 7, -3); presentationViewController.CameraPitch.Rotation = new SCNVector4 (1, 0, 0, -(float)(Math.PI / 4) * 0.7f); SCNTransaction.Commit (); }); SCNTransaction.Commit (); break; case 6: TextManager.FadeOutText (SlideTextManager.TextType.Subtitle); TextManager.FlipOutText (SlideTextManager.TextType.Bullet); // Example of a custom geometry (Möbius strip) TextManager.SetSubtitle ("Custom geometry"); TextManager.AddBulletAtLevel ("Custom vertices, normals and texture coordinates", 0); TextManager.AddBulletAtLevel ("SCNGeometry", 0); TextManager.FlipInText (SlideTextManager.TextType.Subtitle); TextManager.FlipInText (SlideTextManager.TextType.Bullet); SCNTransaction.Begin (); SCNTransaction.AnimationDuration = 1; // move the camera back to its previous position presentationViewController.CameraNode.Position = new SCNVector3 (0, 0, 0); presentationViewController.CameraPitch.Rotation = new SCNVector4 (1, 0, 0, Pitch * (float)(Math.PI / 180.0)); Level2Node.Opacity = 0.0f; Level2OutlineNode.Opacity = 0.0f; SCNTransaction.Commit (); break; } }