current position:Home>Extended editor of unity practical function - window drawing (2)
Extended editor of unity practical function - window drawing (2)
2021-08-27 08:53:40 【Mr_ Wen】
This is my participation 8 The fourth of the yuegengwen challenge 23 God , Check out the activity details :8 Yuegengwen challenge
summary
In the last article, we talked about , stay unity Expand through the editor , Beautified Inspector panel , Actually unity The editor extension also has a lot of functions , In addition to being able to Unity Editor for control drawing , You can also create a new window for the editor , And set his window layout . Next, let's learn together , stay Unity How to create a custom layout window in the editor .
Function realization
Want to create a window , Then the script must inherit EditorWindow
, Script inheritance EditorWindow
At the same time , The script must reference using UnityEditor;
Namespace , Otherwise, inheritance is wrong .
First, we create an inheritance EditorWindow
Script , Also put it in Editor Under the folder
using UnityEditor;
public class EditorWindowTest : EditorWindow
{
}
Copy code
We create a static method to open the window , At the same time, in this method , We can customize the design of the window .
static void OpenWindow()
{
}
Copy code
Want to display this method to Unity Editor , Inherit only Editorwindow
Not yet , We also need to use unity Another feature of [MenuItem]
Let's take a look at MenuItem
MenuItem yes UnityEditor Properties under , It is an extension to the editor , There are two main functions :
- Add menu items to the main menu , That is to add... In the following Editor section , This is a very important use , It is often used when developing plug-ins .
- Add a menu item in the context of the component in the property panel , Extensions to existing components in the editor
Be careful : Functions are generally private , And it must be a static function to use MenuItem
attribute . Why must it be static
Function? , Because this class can be used without instantiation , Don't inherit from MonoBehavior
, For example, add a reset attribute function to the rigid body , There is no need to add script components , therefore , We can set many similar menu items in an extension script . So what we use in the above code is static
. What is commonly used is
public MenuItem(string itemName);
Copy code
itemName Is the menu path name , Menu shortcuts can be added :( Add the following symbol after the space to set ), as follows :
_w A single shortcut W
#w shift+w
%w ctrl+w
&w Alt+w
Copy code
MenuItem
Let's introduce it here for the time being , Let's get back to the point , Set a path for our method , Such as : In the menu bar Tools
Under the OpenWindow
[MenuItem("Tools/OpenWindow")]
static void OpenWindow()
{
}
Copy code
In this way, the method we just wrote appears in the menu bar Next we create a window , First, specify the size of the window
Rect rect = new Rect(0, 0, 500, 500);
Copy code
After setting the size , All that's left is to create a form
EditorWindowTest window = (EditorWindowTest)EditorWindow.GetWindowWithRect(typeof(EditorWindowTest), rect, true, " Custom create window ");
window.Show();
Copy code
After you've written , Click the menu bar and the following effect will appear
Here we will create the window successfully , Of course, this is just a window into the book , Nothing , Let's enrich this window , Add an input box to the window 、 Add a text box to show the mouse position 、 Add a selection map function , Open and close the notification bar , Close the window and other functions . These functions are written in OnGUI Methods
Add an input box control
text = EditorGUILayout.TextField(" Please enter the content :", text);
Copy code
Open the notice
First create a button to open the notification
GUILayout.Button(" Open the notice ", GUILayout.Width(200))
Copy code
Then write the method to open the notification bar
this.ShowNotification(new GUIContent(" This is a notification message "));
Copy code
The effect is as follows Closing notice
Closing notification is basically the same as the above method , First create the button before writing the method
if (GUILayout.Button(" Closing notice ", GUILayout.Width(200)))
{
// Close the notification bar
this.RemoveNotification();
}
Copy code
Add a text box to display the mouse position
Method of obtaining mouse position ( Have shortcomings , Not all places can get )
Event.current.mousePosition
Copy code
Add a text box and display the mouse position
EditorGUILayout.LabelField(" Mouse position :", Event.current.mousePosition.ToString());
Copy code
Select Map
The map selection function is basically the same as that written in the previous article
texture = EditorGUILayout.ObjectField(" Select Map ", texture, typeof(Texture), true) as Texture;
Copy code
The overall effect of the above functions is as follows
Knowledge point expansion
Here are some life cycles that may be used by the extension editor
When the window gets the focus
private void OnFocus()
{
Debug.Log(" Called once when the window gains focus ");
}
Copy code
When the window loses focus
private void OnLostFocus()
{
Debug.Log(" Called once when the window loses focus ");
}
Copy code
When Hierarchy When any object in the view changes
private void OnHierarchyChange()
{
Debug.Log(" When Hierarchy Called once when any object in the view changes ");
}
Copy code
When Project When any object in the view changes
private void OnProjectChange()
{
Debug.Log(" When Project Called once when any object in the view changes ");
}
Copy code
Hot update of window panel
private void OnInspectorUpdate()
{
Debug.Log(" Hot update of window panel ");
// Open window redraw , Otherwise, the information will not be refreshed
this.Repaint();
}
Copy code
When the window is open , And in Hierarchy When a game object is selected in the view
private void OnSelectionChange()
{
// When the window is open , And in Hierarchy Called when a game object is selected in the view
foreach (var item in Selection.transforms)
{
// It is possible to choose more , Here starts a cycle
Debug.Log("OnSelectionChange:" + item.name);
}
}
Copy code
When the window closes
private void OnDestroy()
{
Debug.Log(" Called when the window is closed ");
}
Copy code
Let's take a look at the final effect
Source code address
GitHub Download address : Click here to jump to download
At the end
This article mainly introduces ,Unity How the editor expands the window , In order to be more convenient in the development process , The next article will continue to introduce in Unity How to extend the editor in , The function is also very practical , Welcome to learn and exchange .
copyright notice
author[Mr_ Wen],Please bring the original link to reprint, thank you.
https://en.qdmana.com/2021/08/20210827085334606I.html
The sidebar is recommended
- Crazy blessing! Tencent boss's "million JVM learning notes", real topic of Huawei Java interview 2020-2021
- JS JavaScript how to get the subscript of a value in the array
- How to implement injection in vuex source code?
- JQuery operation select (value, setting, selected)
- One line of code teaches you how to advertise on Tanabata Valentine's Day - Animation 3D photo album (music + text) HTML + CSS + JavaScript
- An article disassembles the pyramid architecture behind the gamefi outbreak
- BEM - a front-end CSS naming methodology
- [vue3] encapsulate custom global plug-ins
- Error using swiper plug-in in Vue
- Another ruthless character fell by 40000, which was "more beautiful" than Passat and maiteng, and didn't lose BMW
guess what you like
-
Huang Lei basks in Zhang Yixing's album, and the relationship between teachers and apprentices is no less than that in the past. Netizens envy Huang Lei
-
He was cheated by Wang Xiaofei and Li Chengxuan successively. Is an Yixuan a blessed daughter and not a blessed home?
-
Zhou Shen sang the theme song of the film "summer friends and sunny days" in mainland China. Netizen: endless aftertaste
-
Pink is Wangyuan online! Back to the peak! The new hairstyle is creamy and sassy
-
Front end interview daily 3 + 1 - day 858
-
Spring Webflux tutorial: how to build reactive web applications
-
[golang] walk into go language lesson 24 TCP high-level operation
-
August 23, 2021 Daily: less than three years after its establishment, Google dissolved the health department
-
The female doctor of Southeast University is no less beautiful than the female star. She has been married four times, and her personal experience has been controversial
-
There are many potential safety hazards in Chinese restaurant. The top of the program recording shed collapses, and the artist will fall down if he is careless
Random recommended
- Anti Mafia storm: He Yun's helpless son, Sun Xing, is destined to be caught by his dry son
- Introduction to flex flexible layout in CSS -- learning notes
- CSS learning notes - Flex layout (Ruan Yifeng tutorial summary)
- Today, let's talk about the arrow function of ES6
- Some thoughts on small program development
- Talk about mobile terminal adaptation
- Unwilling to cooperate with Wang Yibo again, Zhao Liying's fans went on a collective strike and made a public apology in less than a day
- JS function scope, closure, let, const
- Zheng Shuang's 30th birthday is deserted. Chen Jia has been sending blessings for ten years. Is it really just forgetting to make friends?
- Unveil the mystery of ascension
- Asynchronous solution async await
- Analysis and expansion of Vue infinite scroll source code
- Compression webpack plugin first screen loading optimization
- Specific usage of vue3 video play plug-in
- "The story of huiyeji" -- people are always greedy, and fairies should be spotless!
- Installing Vue devtool for chrome and Firefox
- Basic usage of JS object
- 1. JavaScript variable promotion mechanism
- Two easy-to-use animation JS that make the page move
- Front end Engineering - scaffold
- Java SQL Server intelligent fixed asset management, back end + front end + mobile end
- Mediator pattern of JavaScript Design Pattern
- Array de duplication problem solution - Nan recognition problem
- New choice for app development: building mobile applications using Vue native
- New gs8 Chengdu auto show announces interior Toyota technology blessing
- Vieira officially terminated his contract and left the team. The national security club sent blessings to him
- Less than 200000 to buy a Ford RV? 2.0T gasoline / diesel power, horizontal bed / longitudinal bed layout can be selected
- How does "heart 4" come to an end? Pinhole was boycotted by the brand, Ma Dong deleted the bad comments, and no one blessed him
- We are fearless in epidemic prevention and control -- pay tribute to the front-line workers of epidemic prevention!
- Front end, netty framework tutorial
- Xiaomi 11 | miui12.5 | android11 solves the problem that the httpcanary certificate cannot be installed
- The wireless charging of SAIC Roewe rx5 plus is so easy to use!
- Upload and preview pictures with JavaScript, and summarize the most complete mybatis core configuration file
- [25] typescript
- CSS transform Complete Guide (Second Edition) flight.archives 007
- Ajax foundation - HTTP foundation of interview essential knowledge
- Cloud lesson | explain in detail how Huawei cloud exclusive load balancing charges
- Decorator pattern of JavaScript Design Pattern
- [JS] 10. Closure application (loop processing)
- Left hand IRR, right hand NPV, master the password of getting rich