嗯。。把你的SceneView變成2D畫布一共須要兩步。
第一步是把它變成2D。
第二步是把它變成畫布。編輯器
炒雞簡單,SceneView裏提供了一個字段叫作in2DMode,開啓它會使SceneView的攝像機變成正交相機而且鎖定在Z軸上。
如下代碼呈現了這種切換的主要部分:ui
bool _enabled; SceneView _sceneView; private bool _restoreCamera2DMode; private Vector3 _restoreCamearPosition; private void SetEnabled(bool value) { if (_enabled != value) { if (value) { _sceneView = SceneView.lastActiveSceneView; if (_sceneView == null) return; _restoreCamera2DMode = _sceneView.in2DMode; _restoreCamearPosition = _sceneView.pivot; _sceneView.in2DMode = true; _sceneView.LookAt(new Vector3(0, 0, -10)); _sceneView.Repaint(); } else { _sceneView.in2DMode = _restoreCamera2DMode; _sceneView.LookAt(_restoreCamearPosition); } _enabled = value; } }
首先你最好把全部unity的Tool狀態置爲空。什麼是Tool呢?
看圖:
最左邊的圖標是ViewTool,其他四個圖標是Tool。
你須要這樣作:this
Tools.current = Tool.None; Tools.viewTool = ViewTool.None;
而後屏蔽掉unity的內置邏輯,用本身的邏輯來代替。spa
void OnSceneGUI(SceneView scene) { Event e = Event.current; Vector2 mousePosition = e.mousePosition; // View point to world point translation function in my game. this._mousePosition = SceneScreenToWorldPoint(mousePosition); // Block SceneView's built-in behavior HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); // ------------------------------ // Your Custom OnGUI Logic // ------------------------------ if (Event.current.type == EventType.MouseDown) Event.current.Use(); if (Event.current.type == EventType.MouseMove) Event.current.Use(); } private Vector3 SceneScreenToWorldPoint(Vector3 sceneScreenPoint) { Camera sceneCamera = _sceneView.camera; float screenHeight = sceneCamera.orthographicSize * 2f; float screenWidth = screenHeight * sceneCamera.aspect; Vector3 worldPos = new Vector3( (sceneScreenPoint.x / sceneCamera.pixelWidth) * screenWidth - screenWidth * 0.5f, ((-(sceneScreenPoint.y) / sceneCamera.pixelHeight) * screenHeight + screenHeight * 0.5f), 0f); worldPos += sceneCamera.transform.position; worldPos.z = 0f; return worldPos; }
最後,爲了讓這一切能夠起做用,你須要在切換進畫布模式的時候把OnSceneGUI註冊給SceneView才行。rest
SceneView.onSceneGUIDelegate += OnSceneGUI;
如今,你能夠嘗試在編輯器中作各類2D刷子了。code