The save function in the editor is optimized so that it will not generate file differences when there are no changes to the project content. If you want to simulate an empty project, you can drag any object into the main viewport and then delete it, and then execute save to save an empty project in Projects
Disabled the resource selector in the character editor (the resource selector will be optimized as a whole in the future)
Removed the "chest open/close" and "chest angle" items from the character editor. The effect of these two properties can be achieved by other editing items, so for the sake of performance, we decided to remove these two properties and the corresponding interface has been deprecated
In the character editor, when the character model in the main viewport is not displayed, frequent switching of the character model may result in abnormal character shapes. For now, It can be resolved by refreshing and switching the character model again. This will be optimized in future updates
In the UI editor, after resetting the resources placed in the UI component, modifications to the size of the UI component will not be saved. You need to place any UI mapping resources and then adjust the size of the component to circumvent the problem
Under listenserver mode, the scaling interface for characters can occasionally fail. There will be a follow-up fix for this.
Single-sided scaling Single-sided scaling feature is only available for static models There is now a single-sided scaling indicator (x-red, y-green, z-blue) in the positive and negative directions of the x, y, and z axes of the static model envelope box.
When the mouse hovers over the single-sided zoom indicator, the indicator is selected (yellow)
When performing single-sided zoom, the indicators other than the currently selected indicator shrink.
Dragging the selected single-sided zoom indicator to perform single-sided zooming in the corresponding direction, changing both position and scale.
When performing single-sided scaling, the minimum value of the X, Y, and Z axis Scale is 0, otherwise, the scaling is not continued.
Whole-scaling
Select any single-sided scaling indicator, hold shift, and drag to whole-scale.
When performing single-sided scaling, the minimum value of X, Y, and Z axis Scale is 0, otherwise, the scaling will not be continued.
The view selector can be used to switch views and adjust the position and orientation of the camera.
View Selector - UI
Base surface (6): contains the front, back, left, right, top and bottom.
Corner faces (8): the corner faces are sandwiched by three adjacent faces, containing the front upper left, front upper right, front lower left, front lower right, rear upper left, rear upper right, rear lower left, and rear lower right.
View selector - view switching
The view can be switched with the view selector's base, corner, and adjacent face selection keys.
Clicking on one of the base/corner faces of the view selector will rotate the position and orientation of the camera and switch the view to that face.
When the view selector is in the base plane, hover over the view selector range to display the adjacent base plane selection key. When you click on an adjacent base plane selection key, you will rotate the camera position and orientation to switch the view to the adjacent plane of the current view.
View selector - camera rotation logic
The view selector is rotated with the coordinates when the camera orientation is rotated.
The object focus mode rotates on the axis of the geometric center of the focused object.
In non-focus mode, the camera is rotated on the axis of its geometric center.
View selector - position
Left click and long press on the view selector to drag the view selector position and release the left click to fix the view selector on that position.
The view selector must be moved inside the main viewport. If it goes beyond the main viewport, it will rebound to the main viewport after releasing the left button.
Click the Restore default window settings option in the view to restore the view selector control to its default position.
Object Manager supports copying object IDs when multi-selecting
Different object IDs are automatically separated by ","
The order of copying IDs is sorted from top to bottom of the object order in the object manager
To save the performance consumption between triggers and triggers
Also solve the problem of not being able to interact with the trigger at one end
New QueryOnly mode for collision detection
Original solution:
Use Type.PropertyStatus
After modification:
Use Type.CollisionStatus
Also compatible with:
Type.PropertyStatus, Type.CollisionStatus
Developers can use DevTools debugging tools to debug projects on mobile in real time to get instant game feedback and view related performance consumption The steps are as follows.
Enter developer mode on the mobile side to enable USB debugging
After starting the game, look for the DevTools online URL in the log file in the directory below /data/data/com.Yourcompany.MetaWorldTest/files/UE4Game/MetaWorldMobile/MetaWorldMobile/Saved/Logs/MetaWorldMobile.log
Open the "Source Code" tab in your browser at the link above and interrupt to start debugging (note that you need to be on the same network)
Open the JS Script Profiler view in the tab list, grab the performance data and view
【Optimization】Optimize header node runtime environment when creating prefabricated objects
When creating a prefabricated body with the right click in the object manager, the runtime environment for generating the prefabricated body header node is no longer all double-ended, and the prefabricated body header node of the corresponding environment is generated according to the runtime environment of the child object;
When generating a prefab, if the selected objects are all double-ended objects, the generated prefabricated body object is double-ended
When generating a prefab, if the selected object has both double-ended and single-ended, the generated perform object is double-ended
When generating a prefab, if the selected objects are single-ended, but there are both client and server, the generated prefabricated body object is double-ended
When generating the prefabricated body, if the selected objects are all single-ended and all are clients or servers, the generated prefabricated body object is single-ended and the network state is the same as the selected object
【Optimization】Object Manager filtering optimization
Object Manager filtering optimization, support for selecting multiple filter conditions for filtering (results are taken and set)
Support filtering the viewport to show hidden and locked status in the viewport
【Optimization】Disconnected reconnection optimization
10-second automatic reconnection will be triggered when the connection between the front and back ends of the game fails due to network fluctuations, etc., and players will not be able to operate during the automatic reconnection
The disconnection will be triggered when the automatic reconnection process ends and the server is still not successfully connected
Click on the "reconnect" function after disconnection, then you will be directly matched with a new game room again
If the connection to the server is successful during automatic reconnection, the game will be reconnected without perception
New game client from the onPause state back to running, no longer perform reconnection logic, onPause state can support a maximum of 3 minutes to maintain, beyond 3 minutes back to running will be disconnected from the server.
No longer support the disconnection and reconnection function outside the game, the game will not be able to reconnect into the room before the disconnection after exiting
Disconnect reconnect callback functions:
Callback function triggered on network disconnection: addNetworkDisconnect(callback : () => void): void
Remove the callback function triggered when the network is disconnected: removeNetworkDisconnect(callback : () => void): void
Callback function triggered on successful reconnection after network disconnection: addNetworkReconnection(callback : () => void): void
Remove the callback function triggered on successful reconnection after network disconnection: removeNetworkReconnection(callback : () => void): void
New custom tire radius property, you can customize the radius of the tire envelope according to the size of the vehicle model
Physical calculation of the new vehicle migrated to the client, reducing server consumption
API interface adjustment
/**
New SetDriver() interface, which requires binding of the vehicle on the client side to confirm the actual control role of the vehicle.
*/
if(GamePlay.isClient()){
this._Vehicle4W.setDriver(player);
}
/**
The vehicle control interface is changed to be called directly on the client side.
*/
if(GamePlay.isClient()){
//Receive button events from the client to control the throttle and direction of the vehicle
Events.onKeyDown(Type.Keys.Up,()=>{
this._Vehicle4W.setThrottleInput(1);
});
Events.onKeyDown(Type.Keys.Left,()=>{
this._Vehicle4W.setSteeringInput(1);
});
//Receive button events from the client to control the vehicle brakes
Events.onKeyDown(Type.Keys.SpaceBar,()=>{
this._Vehicle4W.setHandbrakeInput(true);
});
}
1.Object list optimization
No longer expand all the parent objects after adjusting the position between them
When an object is selected in the main viewport, the object list will locate the object
2.Add option to the right-click menu in the designer
3.New control type - button (allows mounting of text subobjects)
New control type [Button], and renamed the previous button control to [Button (Deprecated)], the object properties of [Button (Deprecated)] are unchanged from before, and whether [Button (Deprecated)] is retained in the future will be determined by usage
[Button] is more flexible than [Button (Deprecated)] in terms of configuring the text style function, the specific differences are as follows.
No [text] object property grouping, that is, you can not directly configure the text, other properties, and [button (deprecated)] exactly the same
[Button] can be the parent of [Text], and there is no limit to the number of child objects that can be mounted on [Text].
New Button API: MWGameUI.MWUIGameButton
Deprecated Button API: MWGameUI.MWUIButton
4.Image resources can be replaced by dragging the image object directly into the main window
5.Progress bar button image with and selectable
To allow developers to adjust the position of the progress bar buttons to avoid some images not being dragged to the edge when dragging, new properties and have been added
[Anchor Type]: You can choose [Center] or [Both sides] to modify the specific position of the anchor point in the button image
[Offset Value]: Used to modify the position of the button relative to the anchor point
When the anchor type is [Center], an offset value of X pixels shifts the button image X pixels to the right, and an offset value of -X pixels shifts the button image X pixels to the left.
When the anchor type is [Both sides], an offset value of X pixels means that the leftmost and rightmost positions of the button image can be slid as a whole, and an offset value of -X pixels means that the leftmost and rightmost positions of the button image are shifted inward by X pixels as a whole
6.New and functions for containers
Previously, when auto-layout was enabled, all child objects in the container were sorted according to top-to-bottom and left-to-right order; this update adds and properties to determine exactly how these child objects are sorted:
Horizontal sorting
From left to right
Right to Left
Vertical sorting
Top to bottom
Bottom to top
With the two existing properties, a total of 72 types of container layouts can be achieved
Container type
Horizontal layout
Vertical layout
Alignment rules
Top Left Alignment
Center-left alignment
Bottom Left Alignment
Top Right Alignment
Right center alignment
Lower right alignment
Top center alignment
Center alignment
Bottom center alignment
Step 1: The alignment rules determine where the overall position of the aligned objects is in the container and which of the nine anchor points of the container is used to align them
Step 2: Horizontal and vertical sorting determines how these aligned objects are aligned internally as a whole, specifically which corner of the overall position of the aligned objects will be at the top of the hierarchy
Step 3: Decide the alignment direction according to the container type (horizontal distribution/vertical distribution), the object at the top of the hierarchy is placed in the corner determined in step 2, and the remaining objects are distributed according to this alignment direction
Example: By default, the default value of container type is the horizontal layout and the default value of alignment rule is top-left alignment when grid layout is turned on.
Modify the left-to-right property to right-to-left and the top-to-bottom property to bottom-to-top.
Another example: turn on the default case of grid layout, set the container type to a vertical layout, and the alignment rule to top-right alignment.
Modify the left-to-right property to right-to-left and the top-to-bottom property to bottom-to-top.
7.New (control all controls under UI object instead of single control slot hierarchy)
MWUIUserWidget Type New Functions
Example:
let btn = this.uiObjectAsWidgetBase().findChildByPath("MWCanvas_2147482460/button") as MWGameUI.MWUIButton;
btn.onClicked().add(()=>{
let x = this.uiObjectAsWidgetBase().getViewportZOrder();
x = x+1;
this.uiObjectAsWidgetBase().setViewportZOrder(x);
})
8.New for images, etc.
MWUIImage Type New Functions
MWUIButton/MWUIGameButton Type New Functions
MWUIProgressbar Type New Functions
9.New for scroll box
New is used to listen to the UI scroll box scroll end event, and then handle other functions
When inertia is turned on, events are also sent when the scrollbar stops
MWUIScrollBox Type New Functions
this.logText = MWDesignerUI.MWUITextblock.get(this.uiObjectAsWidgetBase().findChildByPath("MWCanvas_2147482460/MWTextBlock_8")) as MWGameUI.MWUITextblock;
this.logText.setText(this.tiems.toString());
let getscroll = MWDesignerUI.MWUIScrollBox.Get(this.uiObjectAsWidgetBase().findChildByPath("MWCanvas_2147482460/MWScrollBox_1")) as MWGameUI.MWUIScrollBox;
getscroll.onScrollEnd().add(()=>{
this.tiems++;
this.logText.setText(this.tiems.toString());
})
1.Optimize the editor auto backup function, auto backup covers the main editor and sub-editor.
The minimum time interval for automatic backup is changed to 1 minute.
When automatic backup is enabled, the modified data will be automatically backed up after the set time interval when the main editor, sub-editor, or prefabricated body is modified.
The character data that is not documented will not be backed up.
2.The editor adds a new backup content recovery function.
Restore Scene
When developers enter a project in the project interface, they will compare the local file and the automatic backup file of the project. If there is any difference and the automatic backup file is modified later than the local file, a pop-up window will prompt developers whether to restore the backup file.
Restore pop-up window
Restore
Open
Ignore
Close
【Optimization】Publish Game Name Restrictions When publishing a game in the editor, the name of the published game no longer has restrictions for illegal characters and word counts, etc.
【Optimization】Single-ended Component (non-physical components)
The Skybox, Ambient Light, and Sunlight components in the world are single-ended by default.
【Optimization】Adding Tips to the Character Editor
New hover tips for all editable items in the character editor show tips for the corresponding properties when the cursor hovers over the properties name.
【Optimization】Editor region change
【Optimization】Editor login optimization
Login page refresh
Automatic login logic
Environment retention logic
When the editor is opened for the first time, the domestic version defaults to the domestic environment
When the user switches to other regions, the editor will switch to the overseas environment
After the user logs in, the next time the editor is opened, the user's last login environment and region will be retained.
Logout-related logic
【Optimization】Full manual download of resources
Removed the download method of "full download after login" from the current local repository, and no longer display the Loading window after login
When the project is opened, all resources used in the project scene will be verified and checked locally to ensure that the resources used in the project exist locally and are the latest version.
After entering the project interface, the resource library will read the resource information in batches with the UI scrolling (and always read the latest version of the resource information from the server)
Developers can select resources on their own and manually click on the resource thumbnails to download the content of the resources (and always download the latest version of the corresponding resources from the server)