Unity2018定位游戏场景视图到Scene视图工具编写

使用编辑器:

Unity2018.4.2

工具来由

当Unity场景中的物体太多,无法在scene视图定位到游戏中看到的物体时,可以通过使用SceneView对当前视图进行定位

应用举例

using UnityEngine;
#if UNITY_EDITOR
	using UnityEditor;
#endif

public class SyncSceneView : MonoBehaviour
{

#if UNITY_EDITOR
	private SceneView view = null;

	// Use this for initialization
	void Awake()
	{
		view = SceneView.lastActiveSceneView;
		//view.m_RenderMode = DrawCameraMode.Mipmaps;
		SceneView.CameraMode cameraMode = view.cameraMode;
		cameraMode.drawMode = DrawCameraMode.Mipmaps;
	}

	private void LateUpdate()
	{
		if (view != null)
		{
			view.LookAt(transform.position, transform.rotation, 0f);
		}
	}

	private void OnDestroy()
	{
		if (view != null)
		{
			view.LookAt(transform.position, transform.rotation, 5f);
		}
	}

	public void CloseTool()
	{
		//view.m_RenderMode = (DrawCameraMode)0;
		SceneView.CameraMode cameraMode = view.cameraMode;
		cameraMode.drawMode = DrawCameraMode.Textured;
		view = null;
		Destroy(this);
	}
#endif
}
工具编辑
using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using UnityEngine.Events;


public class MipmapTool {

	static SyncSceneView curViewTool;
	static Camera mainCamera;

	static UnityAction<Scene, LoadSceneMode> onSceneLoaded = new UnityAction<Scene, LoadSceneMode>((scene, sceneMode) => AddSyncViewToMainCamera());
	static Action<PlayModeStateChange> onPlayStateChanged = OnPlayModeChanged;

	[MenuItem("MipmapTool/Open")]
	static void OpenMipmapTool()
	{	
		SceneManager.sceneLoaded += onSceneLoaded;
		EditorApplication.playModeStateChanged += onPlayStateChanged;

		AddSyncViewToMainCamera();
	}


	[MenuItem("MipmapTool/Open", true)]
	static bool CheckOpen()
	{
		return curViewTool == null && EditorApplication.isPlaying == true;
	}


	[MenuItem("MipmapTool/Close")]

	static void CloseMipmapTool()
	{
		if(curViewTool != null)
		{
			curViewTool.CloseTool();
			curViewTool = null;
		}
		else
		{
			SceneView view = SceneView.lastActiveSceneView;
			//view.m_RenderMode = DrawCameraMode.Textured;
			SceneView.CameraMode cameraMode = view.cameraMode;
			cameraMode.drawMode = DrawCameraMode.Textured;
		}
		SceneManager.sceneLoaded -= onSceneLoaded;
		//EditorApplication.playmodeStateChanged -= onPlayStateChanged;
		EditorApplication.playModeStateChanged -= onPlayStateChanged;
	}

	[MenuItem("MipmapTool/CLose", true)]
	static bool CheckClose()
	{
		return curViewTool != null;
	}


	static void AddSyncViewToMainCamera()
	{
		mainCamera = Camera.main;
		if (mainCamera == null)
		{
			Debug.LogError("场景中没有主摄像机,无法开启MipmapTool!!!");
			return;
		}
		SyncSceneView ssv = mainCamera.gameObject.GetComponent<SyncSceneView>();
		if (ssv == null)
		{
			ssv = mainCamera.gameObject.AddComponent<SyncSceneView>();
		}
		curViewTool = ssv;
	}


	static void OnPlayModeChanged(PlayModeStateChange playMode)
	{
		if(!EditorApplication.isPlaying)
		{
			CloseMipmapTool();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值