ذخیره و باز کردن مرحله در یونیتی با اسکریپت_برای حالت از اجرا یعنی محیط Editor ویرایشگر
جمعه, ۱۸ دی ۱۳۹۴، ۰۲:۰۱ ب.ظ
منبع:gameover.blog.ir
ذخیره مرحله بازی در یونیتی 5:public static bool SaveScene(string path = "", bool saveAsCopy = false);مثال :
به دستورات زیر نیگا کنید:
String [] path = EditorApplication.currentScene.Split(char.Parse("/")); path[path.Length -1] = "AutoSave_" + path[path.Length-1]; EditorApplication.SaveScene(String.Join("/",path), true); Debug.Log("Saved Scene");در خط اول آرایه ای به نام path از نوع رشته ای یا String ساختیم.
با دستور EditorApplication.currentScene مسیر وجود صحنه ی فعلی رو بدست میاریم.
معمولا مسیر صحنه به صورت Assets/level1.unity برگشت داده میشه.
با متد Split اجزای این مسیر رو در رشته ذخیره و با کاراکتر / از هم مجزا کردیم.زیرا ما می خوایم اسم خالص صحنه رو برداشت کنیم.همینطور پیشوند AutoSave_ رو بهش اضافه کردیم.
دستور Length طول آرایه path رو میده.
چون شماره سلول اول از صفر 0 شروع میشه یکی از طول آرایه کم کردیم تا محتوای سلول آخر رو بدست بیاریم.سلول آخر شامل نام ذخیره شده هست.
در خط بعدی با دستور (String.Join ) یک / بهش اضافه کردیم تا در مسیر جاری ذخیره انجام بشه.
لود مرحله:
EditorApplication.OpenScene
شکل کلی:
public static bool OpenScene(string path);نکته: حتما باید دستور:
using UnityEditor;یا
import UnityEditor;
رو در بالا ی کد سیشارپتون بیارید.منبع :
http://docs.unity3d.com/ScriptReference/EditorApplication.OpenScene.html
مثال:
// Simple editor window that autosaves the working scene // Make sure to have this window opened to be able to execute the auto save. import UnityEditor; class SimpleAutoSave extends EditorWindow { var saveTime : float = 300; var nextSave : float = 0; @MenuItem("Example/Simple autoSave") static function Init() { var window : SimpleAutoSave = EditorWindow.GetWindowWithRect( SimpleAutoSave, Rect(0,0,165,40)); window.Show(); } function OnGUI() { EditorGUILayout.LabelField("Save Each:", saveTime + " Secs"); var timeToSave : int = nextSave - EditorApplication.timeSinceStartup; EditorGUILayout.LabelField("Next Save:", timeToSave.ToString() + " Sec"); this.Repaint(); if(EditorApplication.timeSinceStartup > nextSave) { var path : String [] = EditorApplication.currentScene.Split(char.Parse("/")); path[path.Length -1] = "AutoSave_" + path[path.Length-1]; EditorApplication.SaveScene(String.Join("/",path), true); Debug.Log("Saved Scene"); nextSave = EditorApplication.timeSinceStartup + saveTime; } } }
مثال:
// Simple editor Script that lets you save a scene while in play mode. // WARNING: All Undo posibilities are lost after saving the scene. @MenuItem("Example/Save Scene while on play mode") static function EditorPlaying() { if(EditorApplication.isPlaying) { var sceneName : String = EditorApplication.currentScene; var path : String [] = sceneName.Split(char.Parse("/")); path[path.Length -1] = "Temp_" + path[path.Length-1]; var tempScene = String.Join("/",path); EditorApplication.SaveScene(tempScene); EditorApplication.isPaused = false; EditorApplication.isPlaying = false; FileUtil.DeleteFileOrDirectory(EditorApplication.currentScene); FileUtil.MoveFileOrDirectory(tempScene, sceneName); FileUtil.DeleteFileOrDirectory(tempScene); EditorApplication.OpenScene(sceneName); } }
۹۴/۱۰/۱۸