{"id":801,"date":"2024-03-06T19:10:18","date_gmt":"2024-03-06T19:10:18","guid":{"rendered":"https:\/\/redox.games\/?p=801"},"modified":"2024-05-13T17:29:50","modified_gmt":"2024-05-13T17:29:50","slug":"mortise-mirage","status":"publish","type":"post","link":"https:\/\/redox.games\/index.php\/2024\/03\/06\/mortise-mirage\/","title":{"rendered":"Mortise Mirage"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"801\" class=\"elementor elementor-801\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6a0bdc6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6a0bdc6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f958982\" data-id=\"f958982\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-955381d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"955381d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-553c7c7\" data-id=\"553c7c7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c41aac0 elementor-widget elementor-widget-text-editor\" data-id=\"c41aac0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><em>Genre:<\/em><\/span><\/p><p>VR Puzzle<\/p><p><span style=\"color: #000000;\"><em>Tools:<\/em><\/span><\/p><p>Unity<\/p><p><span style=\"color: #000000;\"><em>Platform:<\/em><\/span><\/p><p>Meta Quest<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-32e4994\" data-id=\"32e4994\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-edb5223 elementor-widget elementor-widget-text-editor\" data-id=\"edb5223\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\"><em>Team:<\/em><\/span><\/p><p>Shuting Lei<\/p><p>Yijun Ma<\/p><p><a href=\"https:\/\/clockworkred.com\/\">Yixuan Wang<\/a><\/p><p>Ziwei Niu<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1f20656 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1f20656\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2523890\" data-id=\"2523890\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f95b994 elementor-widget elementor-widget-heading\" data-id=\"f95b994\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Overview<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9ed028f elementor-widget elementor-widget-text-editor\" data-id=\"9ed028f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"\" data-block=\"true\" data-editor=\"fnnsk\" data-offset-key=\"1huv8-0-0\"><div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"1huv8-0-0\"><span data-offset-key=\"1huv8-0-0\"><strong>Mortise Mirage<\/strong> is a VR immersive 3D puzzle game with <strong>ancient ink wash painting<\/strong> and <strong>traditional mortise and tenon woodwork<\/strong> as its main cultural themes. In this game, players will experience the assembly process of traditional mortise and tenon wooden objects in the artistic conception of landscape painting using their hands, feeling the craftsmanship and joy imbued with rich Eastern cultural imagery.<\/span><\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56067c4 elementor-widget elementor-widget-text-editor\" data-id=\"56067c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span data-offset-key=\"aunq5-0-0\">In the current demo release, players will be the first to experience the mortise and tenon assembly process of a <strong>Chinese traditional sampan<\/strong>. Based on the examination of traditional Chinese wooden boat structures and boat model examples, we designed handcrafted models, aiming to faithfully recreate the structural craftsmanship of traditional wooden boats. While players enjoy the immersive fun of 3D puzzle-solving, they can also explore the craftsmanship wisdom passed down through millennia embodied in a small boat.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3057d7a elementor-widget elementor-widget-heading\" data-id=\"3057d7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Gameplay Flow<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c72d2a6 elementor-widget elementor-widget-video\" data-id=\"c72d2a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/youtu.be\\\/TIHIZfk2oXo&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-66e1e70 elementor-widget elementor-widget-heading\" data-id=\"66e1e70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Highlights<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cfed628 elementor-widget elementor-widget-text-editor\" data-id=\"cfed628\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><em><strong>Puzzle assembly<\/strong><\/em>: Mortise Mirage provides players with a unique immersive experience of being surrounded by puzzle pieces in three-dimensional space, enhancing the enjoyment and novelty of puzzle-solving.<\/li><li><em><strong>Educational Value<\/strong><\/em>: Mortise Mirage faithfully reproduces the appearance and structural features of woodworking heritage, allowing players to experience the ingenuity of real mortise and tenon woodworking while playing.<\/li><li><em><strong>Aesthetic and immersive atmosphere<\/strong><\/em>: The game masterfully combines dim light, creepy sound effects, scary monsters, lens and environment VFX. All these elements blend together to create a palpably dark world.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8240acf elementor-widget elementor-widget-heading\" data-id=\"8240acf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Gameplay<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-22674fa elementor-widget elementor-widget-text-editor\" data-id=\"22674fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>&#8220;Mortise Mirage&#8221; is the first VR 3D puzzle game focused on traditional Chinese mortise-and-tenon joinery, offering a cultural, immersive assembly experience with high fidelity to the woodworking art form and expandable content. Set in an ink-wash &#8220;Ink Realm,&#8221; it blends music and interactive design for a tranquil exploration of Chinese culture while engaging in 3D puzzles. Leveraging Quest hand tracking, it delivers a novel puzzle-solving experience. The game authentically represents the woodworking craft, educating players on the cultural heritage. Its mechanics allow for future inclusion of various wooden cultural artifacts, showing significant expansion potential.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-69012cd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"69012cd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-754d576\" data-id=\"754d576\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ecded9b elementor-widget elementor-widget-heading\" data-id=\"ecded9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Development Process<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9fae040 elementor-widget elementor-widget-video\" data-id=\"9fae040\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/youtu.be\\\/F6Wa69oyo2k&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db0690d elementor-widget elementor-widget-text-editor\" data-id=\"db0690d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Firstly, we choose to use Meta All-in-one as the foundation of the project, which is more convenient for future direct packaging on Quest devices and native running. It comes with gesture tracking and related interfaces, making it easier to directly control through gestures and XR mode in the future, avoiding to some extent the disruption of immersion by controllers.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b6e92a elementor-widget elementor-widget-image\" data-id=\"4b6e92a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"660\" height=\"503\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49-1024x780.png\" class=\"attachment-large size-large wp-image-840\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49-1024x780.png 1024w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49-300x229.png 300w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49-768x585.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49-1536x1170.png 1536w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.10.49.png 1672w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7fb991 elementor-widget elementor-widget-text-editor\" data-id=\"b7fb991\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In the core assembly part of the game, scripts determine whether an object is correctly installed based on its distance and angle from the target position. If correctly installed, sound effects and visual effects will be played. When an entire section is assembled, level management scripts will traverse all required objects to check if each piece is in its correct position before deciding whether or not to proceed to the next stage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12f4b62 elementor-widget elementor-widget-image\" data-id=\"12f4b62\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"660\" height=\"312\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00-1024x484.png\" class=\"attachment-large size-large wp-image-841\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00-1024x484.png 1024w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00-300x142.png 300w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00-768x363.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00-1536x725.png 1536w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/iShot_2024-03-22_15.12.00.png 1910w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af67431 elementor-widget elementor-widget-text-editor\" data-id=\"af67431\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>When all stages are completed, a transparent model of the final product will appear. At this point players need to assemble each part onto their target positions; currently judgement logic still relies on angles and distances but may include assembly order requirements in future iterations so as to replicate traditional mortise-and-tenon assembly processes. Once complete, finished products move into display positions where interactive operations can be performed.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71072f8 elementor-widget elementor-widget-image\" data-id=\"71072f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"549\" height=\"339\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/MortiseMirageFinalLowVideoQuality.jpg\" class=\"attachment-large size-large wp-image-842\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/MortiseMirageFinalLowVideoQuality.jpg 549w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/MortiseMirageFinalLowVideoQuality-300x185.jpg 300w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a894c33 elementor-widget elementor-widget-heading\" data-id=\"a894c33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">My Contributions<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0455e7 elementor-widget elementor-widget-text-editor\" data-id=\"e0455e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>As the only interaction engineer for the project, I was responsible for the implementation of all player actions, level logic, and procedural animations. I was also responsible for communicating with the art team on how to place the assets, and ultimately adjusting the placement and fixing procedural issues that occurred when referencing other materials.<\/p><p>From configuring the VR interaction basics, stitching adsorption functions, model integrity judgement, UI interaction, and procedural animation, I independently completed almost all of the scripts for the gameplay sections.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-060080e elementor-widget elementor-widget-image\" data-id=\"060080e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"660\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639-1024x1024.png\" class=\"attachment-large size-large wp-image-855\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639-1024x1024.png 1024w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639-300x300.png 300w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639-150x150.png 150w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639-768x767.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/\u5fae\u4fe1\u56fe\u7247_20240418034639.png 1368w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d02cb3b elementor-widget elementor-widget-text-editor\" data-id=\"d02cb3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Firstly on the tiling attachments, I use distance and angle to determine if the player is moving the block to the target position at the correct angle.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f41fb4 elementor-widget elementor-widget-image\" data-id=\"8f41fb4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"788\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_64SBC0WUU5-858x1024.png\" class=\"attachment-large size-large wp-image-861\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_64SBC0WUU5-858x1024.png 858w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_64SBC0WUU5-251x300.png 251w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_64SBC0WUU5-768x917.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_64SBC0WUU5.png 986w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-978026e elementor-widget elementor-widget-text-editor\" data-id=\"978026e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Then in the level logic, each block has a bool value to show if it&#8217;s finished splicing and determines if it&#8217;s finished by iterating through all the blocks in the current stage, and triggering a script to switch stages if it&#8217;s done.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-769c740 elementor-widget elementor-widget-image\" data-id=\"769c740\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"1024\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_lA3QmZfNnV-422x1024.png\" class=\"attachment-large size-large wp-image-862\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_lA3QmZfNnV-422x1024.png 422w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_lA3QmZfNnV-124x300.png 124w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_lA3QmZfNnV-633x1536.png 633w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_lA3QmZfNnV.png 671w\" sizes=\"(max-width: 422px) 100vw, 422px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12b7dd5 elementor-widget elementor-widget-text-editor\" data-id=\"12b7dd5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The switching stage script contains sound and effect triggers and calls the method to go to the next stage.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80ff18c elementor-widget elementor-widget-image\" data-id=\"80ff18c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"1024\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_2gAPSmeT4M-640x1024.png\" class=\"attachment-large size-large wp-image-863\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_2gAPSmeT4M-640x1024.png 640w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_2gAPSmeT4M-187x300.png 187w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_2gAPSmeT4M.png 756w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d686a70 elementor-widget elementor-widget-text-editor\" data-id=\"d686a70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>When grabbing a block, the player is alerted to the current block being grabbed by the outer outline.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-942312f elementor-widget elementor-widget-image\" data-id=\"942312f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"1024\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s-640x1024.png\" class=\"attachment-large size-large wp-image-864\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s-640x1024.png 640w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s-188x300.png 188w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s-768x1228.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s-961x1536.png 961w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_Ue9yyvMI9s.png 1097w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a4026e elementor-widget elementor-widget-text-editor\" data-id=\"4a4026e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Upon completion of the game, the player travels by boat to the next island for subsequent levels to be developed. To simulate the feeling of the boat floating, I used DOTween to animate the route as well as simulate the floating effect.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25e4a34 elementor-widget elementor-widget-image\" data-id=\"25e4a34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"967\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL-699x1024.png\" class=\"attachment-large size-large wp-image-865\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL-699x1024.png 699w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL-205x300.png 205w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL-768x1125.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL-1048x1536.png 1048w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/rider64_SFnf6thFFL.png 1174w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0325bd4 elementor-widget elementor-widget-text-editor\" data-id=\"0325bd4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>I also created a lot of functional scripts, such as complete menus, random generation of floating decorations within the scene, etc., as well as scripts to control background music playback, adjusting volume, block floating, and block movement to a target location. Scripts that required additional art materials and sound effects were not implemented into the project due to project cycle issues, but can be viewed on the <a href=\"https:\/\/github.com\/iChiv\/Mortise-and-Tenon\">GitHub<\/a> page.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40d447f elementor-widget elementor-widget-heading\" data-id=\"40d447f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Future Plan<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a226f62 elementor-widget elementor-widget-text-editor\" data-id=\"a226f62\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Firstly, the assembly touch needs to be optimized. Try to use physical simulation for assembly and optimize the feedback effects of assembly. At present, only starting from sound effects and visual effects cannot bring enough immersive effect in virtual reality, which needs further optimization.<\/p>\n<p>Secondly, more levels are needed for a richer interactive experience with various buildings and objects such as wooden umbrellas, pavilions, covered bridges. The scope of mortise and tenon is very wide. Due to our limited energy and time at this stage, we can&#8217;t provide a richer assembly experience but it leaves more room for the future of this project.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e71b9d elementor-widget elementor-widget-image\" data-id=\"1e71b9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"327\" src=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df-1024x507.png\" class=\"attachment-large size-large wp-image-866\" alt=\"\" srcset=\"https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df-1024x507.png 1024w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df-300x149.png 300w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df-768x380.png 768w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df-1536x761.png 1536w, https:\/\/redox.games\/wp-content\/uploads\/2024\/03\/8db86d19-060b-4267-b8e6-03a742a618df.png 1950w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a4d56f elementor-widget elementor-widget-text-editor\" data-id=\"3a4d56f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Apart from assembling mortise-and-tenon joints also involve disassembling them like traditional tools such as Luban lock. Disassembling mortise-and-tenon structures can bring another angle of fun to the game.<\/p><p>As for the collection system currently due to limited level numbers and insufficient content it&#8217;s unable to give users enough sense of achievement. After adding more levels\/items in the future they can be showcased collectively towards users.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-49f645e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"49f645e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6c8d332\" data-id=\"6c8d332\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6ce23f3 elementor-widget elementor-widget-heading\" data-id=\"6ce23f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Refections<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c12448 elementor-widget elementor-widget-heading\" data-id=\"4c12448\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">How I met my aims?<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e118662 elementor-widget elementor-widget-text-editor\" data-id=\"e118662\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>My goal in this project was to assist in the design of VR-friendly puzzle game interactions and implement all tests in Unity and achieve the desired functionality. Achieving this utilised my knowledge of Virtual Reality, Game Design and Development, Meta ALL-IN-ONE SDK and Unity. After joining the group we had a very clear division of labour and I, as the more programmatically and Unity savvy member of the team, undertook almost all of the development and implemented all of the core functionality and achieved good results in procedural animation.<\/p><p>Firstly, for the basic mortise and tenon pickup, I used the Meta SDK&#8217;s own prefabs to implement it, and after initial testing and team discussion, we decided to use gesture recognition throughout, which can be adapted to new interaction methods very quickly.<\/p><p>Next, for the mortise-and-tenon splicing feature, I considered the performance limitations of the VR all-in-one machine. I referred to online tutorials and the guidance of the TA, but I didn&#8217;t find any ready-made solutions suitable for our project, so I first tried to implement the splice detection on the desktop platform, and then tested it in the VR all-in-one machine, and finally chose a solution with relatively low performance requirements.<\/p><p>In terms of the level detection function, I tried to use a traversal algorithm to check whether each square is in the right position, and gradually display the subsequent levels to ensure that the level flow is not wrong. For the level switching part, I created a fade-in\/fade-out script to avoid the player&#8217;s feeling of vertigo due to sudden scene switching, but it could not be triggered stably when running standalone in a VR headset.<\/p><p>In terms of procedural animation, I used a plug-in to achieve the effect of decorations floating and fading, simulating the floating effect of a boat on the water, and achieved good results.<\/p><p>In terms of other interactions, the menu is the part I still haven&#8217;t solved, after making poke menus according to Meta&#8217;s official documentation, there are always cases where they are not detected, and in some cases, it can run normally on Windows platform using Oculus Runtime, but after installing it to the All-in-One PC it may need to be repeatedly operated to be triggered, which is still an unresolved issue at the moment.<\/p><p>Overall, I&#8217;ve gained a lot of development experience on this project, and it&#8217;s not the first time I&#8217;ve taken on the sole programming role on the team, but it&#8217;s by far the most complex programming project I&#8217;ve been responsible for. Since the Meta SDK has just been updated and the online tutorials are almost all outdated, I was able to solve a lot of problems independently by going through the documentation, which will help me a lot when I face more complex projects in the future. Due to time constraints, we tried to recreate as much as possible the framework of the game as we envisioned it at the beginning, providing a complete mortise-and-tenon joinery experience for the user, but there is still a lot of room for improvement in terms of details.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f2bb44 elementor-widget elementor-widget-heading\" data-id=\"0f2bb44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">What were my challenges? How did I face them?<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6bf8212 elementor-widget elementor-widget-text-editor\" data-id=\"6bf8212\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First of all, Meta just updated its SDK at the beginning of the year, the APIs for getting user input and object status have changed, and the official documentation does not explain each excuse and the examples are relatively simple.<\/p><p>I first used the documentation to identify the required excuses, then isolated the required scripts from the sample scenarios to learn by imitation, then used ChatGPT to assist in explaining the inheritance relationship of the scripts and the function and effect of each line of code, and finally tested them with my own functional scripts.<\/p><p>The UI interaction of the Meta SDK is also a problem, although the toolkit provides the option to quickly mount scripts for Unity Canvas, it is not able to detect hand collisions correctly.<\/p><p>I used the official template as a base, first adding a working UnityCanvas prefab, then testing it level by level to find the part that implements the functionality, then replacing the display part with the image we created, adjusting the position to achieve our goal<\/p><p>This is not a permanent solution, and in the future it will be necessary to find parts of the UI code that interact correctly with the Quest SDK in order to adapt it to more functional menus that may appear in the future!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Genre: VR Puzzle Tools: Unity Platform: Meta Quest Team &hellip; <a href=\"https:\/\/redox.games\/index.php\/2024\/03\/06\/mortise-mirage\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">Mortise Mirage<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":803,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-801","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-journals"],"_links":{"self":[{"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/posts\/801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/comments?post=801"}],"version-history":[{"count":31,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/posts\/801\/revisions"}],"predecessor-version":[{"id":878,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/posts\/801\/revisions\/878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/media\/803"}],"wp:attachment":[{"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/media?parent=801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/categories?post=801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redox.games\/index.php\/wp-json\/wp\/v2\/tags?post=801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}