Because of the UI editor joystick requirements online, the default joystick style has been modified
Known that there is a problem with the parent material parameters, now the replacement model color may have a lighter pattern on high-end cell phones and editors
because Instance combined batch (mobile GPU Driven Render Pipeline research) needs, because the old project uses pak resources and the current editor needs to use json format resources, all projects need to brush the resource update script,
[ListenServer] dispatchToAll and other methods of multi-terminal use will be infinite recursion and other issues, consider a period not to do the bureau city network online and mobile editor priority online, the subsequent optimization orhotfix
[ListenServer] currently GamePlay.isListenServer () is not hidden, developers please do not use it. It is expected to repair it in 0.12 . The environment will be judged by the interface hidden
When the role is posted in the no-go zone call releaseAllPlayer(), the role may not be able to cross the no-go zone, need to back up some distance to cross the next version of the optimization
In order to temporarily solve the problem of material parameter withdrawal crashing temporary material parameter withdrawal off, there may be part of the property withdrawal operation that does not take effect . This problem will follow the material 2.0 function online together with the repair.
The editor low occasionally appears stuck in the resource download interface . The log will always prompt failure to download resources . Please modify the project file of the same name, the next version of the optimization
B-side log buried, the current launcher does not support a separate onlyid view buried, Pandora query id for launcherundefined, the id is a public id, can not locate the specific user reported buried, only through the reporting time fuzzy query
known V2 role using squatting and other large action will cause a problem of wearing mold, subsequent optimization
run settings in [Editor Mode] and publish the game interface [MobileEditorGame] for the mobile UGC editor . Other items not checked are there (subsequent versions will be optimized to remove)
New support for single player games.
Add MGS chat box under the main viewport and PIE of the editor to alert developers of possible position conflicts during UI layout design
Show and hide MGS chat box can be controlled by editor tool
Publish game: Check the [Standalone mode] option when publishing a ListenServer game
Run Settings: Check the [Standalone Mode] option in Run Settings when running debugging under PIE for ListenServer games
UI editor adds four new components: joystick, camera sliding area, color palette and loading map
1.1 Rocker (to be improved)
New joystick function is added to facilitate developers to use joystick to make game control buttons to meet some of the use requirements, but the joystick function is not perfect at present, subsequent versions will continue to optimize.
Rocker attributes include
Background image
Function description: Select the background image of the joystick
Schematic diagram.
Center picture
Function: Select the center picture of the joystick
Schematic diagram.
Rocker type
Custom: developers need to write their own control effects
Character movement: the joystick to control the movement of the character
Camera movement: joystick to control camera movement
Rocker position
Function description: Adjust the position of the picture in the center of the joystick
Schematic diagram.
Rocker background size
Function: Adjusts the size of the rocker background picture
Schematic diagram.
Rocker center size
Function: Adjusts the size of the rocker center picture
Schematic diagram.
Rocker input scaling
Activate transparency
Inactive transparency
Fade time
Function: The time it takes for the joystick to become inactive when the joystick is not used.
Schematic diagram.
Reset time
Function: The time required for the joystick to return to the initial position from the used position after the joystick is not used.
Schematic diagram.
Whether to prevent repositioning
Function Description: The rocker position will not change when the rocker is used.
Schematic diagram. [
/**
* input move event
* @returns input move event
*/
onInputDir(): MWUIMulticastDelegate<(vec: Type.Vector2) => void>;
/**
*
* @returns the press rocker event
*/
onJoyStickDown(): MWUIMulticastDelegate<() => void>;
/**
*
* @returns the lift joystick event
*/
onJoyStickUp(): MWUIMulticastDelegate<() => void>;
/**
* Returns the input center mapping settings, including normal clicked not enabled, not expected will return the default value
* @returns returns the center mapping settings
*/
getCenterImage(): MWJoystickStyleDesigner;
/**
* Set the input center sticker settings, including normal, clicked, and not enabled.
* @param NewName Center image settings
*/
setCenterImage(NewName: MWJoystickStyleDesigner): void;
/**
* @returns returns the input background decal settings, including normal, clicked, and unenabled, and returns the default value if it doesn't meet expectations
* @returns Returns the background image settings for the input, including normal, clicked, and not enabled, and returns the default value if it does not meet expectations.
*/
getBackgroundImage(): MWJoystickStyleDesigner;
private tempJoystickStyleDesigner;
/**
* Set the background image settings for the input, including normal, clicked, and unenabled, which will fail if not set as expected
* @param NewName background sticker settings
*/
setBackgroundImage(NewName: MWJoystickStyleDesigner): void;
/**
* returns the input joystick type, if it doesn't meet the expectation, the default value will be returned.
* @returns returns the input joystick type
*/
getControlType(): EMWControlType;
/**
* Set the input joystick type, the character's movement and the skill joystick's movement type, if it does not meet the expectation, it will fail.
* @param NewContrlType rocker type
*/
setControlType(NewContrlType: EMWControlType): void;
/**
* returns the input is the center of the joystick, does not meet the expected will return the default value
* @returns Returns the center position of the joystick, if it does not meet the expectation, the default value will be returned.
*/
getCenter(): Type.Vector2;
private centerPos;
/*
* Set the center position of the input, if it doesn't meet the expectation, the setting will fail.
* @param NewValue The new center position
*/
setCenter(NewValue: Type.Vector2): void;
private tempVector2D;
/**
* Returns the visual position of the input, does not match the expected value will return the default value
* @returns Returns the visual position of the input, or the default value if it doesn't match the expectation
*/
getVisualSize(): Type.Vector2;
private visualSize;
/**
* Set the visual size of the input, if it does not meet the expectation, it will fail.
* @param NewValue visualSize
*/@param NewValue
setVisualSize(NewValue: Type.Vector2): void;
private thumbSize;
/**
* returns the input joystick thumbnail size, does not match the expected value will return the default value
* @returns returns the input thumbnail size of the joystick, does not match the expected value will return the default value
*/
getThumbSize(): Type.Vector2;
/**
* Set the input thumbnail size, will fail if it doesn't meet the expectation
* @param NewValue The new input thumbnail size
*/
setThumbSize(NewValue: Type.Vector2): void;
private inputScale;
/**
* @returns the input scale of the input, does not match the expectation will set failure
* @returns Returns the input scale of the input, which will fail if it doesn't match the expectation
*/
getInputScale(): Type.Vector2;
/**
/* Set the input scale of the input, which will fail if it does not match the expectation.
* @param NewValue The new input scale.
*/
setInputScale(NewValue: Type.Vector2): void;
/**
* Returns whether the input scale is reset or not, and will fail if it does not match the expectation.
* @returns boolean
*/
getIsPreventRecenter(): boolean;
/**
* Set whether the input is reset or not, if it does not meet the expectation, it will fail.
* @param bIsEnable boolean
*/
setIsPreventRecenter(bIsEnable: boolean): void;
/**
* @returns Returns the invalid time of the input, which will fail if it does not match the expectation.
* @returns Returns the invalid time of the input, which will fail if it does not meet the expectation
*/
getTimeUntilDeactive(): number;
/**
* getTimeUntilDeactive(): number; /* Set the input time to be invalid.
* @param Value invalid time
*/
setTimeUntilDeactive(Value: number): void;
/**
* @returns the reset time of the input.
* @returns Returns the reset time of the input, which will fail if it does not match the expectation
*/
getTimeUntilReset(): number;
/**
* Set the reset time of the input, it will fail if it doesn't meet the expectation.
* @param Value reset time
*/
setTimeUntilReset(Value: number): void;
/**
* returns the transparency at activation
* @returns Returns the transparency at the time of activation
*/
getActiveOpacity(): number;
/**
* Set the transparency when active.
* @param Value Transparency
*/
setActiveOpacity(Value: number): void;
/**
* returns the transparency when not active
* @returns Returns the transparency when not active.
*/
getInActiveOpacity(): number;
/**
* Set the transparency when not active.
* @param Value Transparency
*/
setInActiveOpacity(Value: number): void;
/**
* returns the center image normal state image ID
* @returns Returns the center image normal state image ID
*/
getCenterImageNormal(): string;
/**
* Set the center image normal state image ID
* @param ID Resource ID
*/
setCenterImageNormal(ID: string): void;
/**
* returns the center image press state image ID
* @returns Returns the center image press state image ID
*/
getCenterImageTouch(): string;
/**
* Set the center image press state image ID
* @param ID Resource ID
*/
setCenterImageTouch(ID: string): void;
/**
* returns the center image disable state image ID
* @returns Returns the center image disabled status image ID
*/
getCenterImageDisable(): string;
/**
* @brief Set the center image disable status image ID
* @param Value Resource ID
*/
setCenterImageDisable(ID: string): void;
/**
* @returns Returns the center image normal state image ID
* @returns Returns the center image normal state image ID
*/
getBackgroundImageNormal(): string;
/**
* Set the background image normal state image ID
* @param ID Resource ID
*/
setBackgroundImageNormal(ID: string): void;
/**
* Returns the background image press state image ID
* @returns Returns the background image press state image ID
*/
getBackgroundImageTouch(): string;
/**
* Set the background image press state image ID
* @param ID Resource ID
*/
setBackgroundImageTouch(ID: string): void;
/**
* Returns the background image disabled status image ID
* @returns Returns the background image disabled status image ID
*/
getBackgroundImageDisable(): string;
/**
* Set the background image disable status image ID
* @param ID Resource ID
*/
setBackgroundImageDisable(ID: string): void;
/* **************************************************** old ***************************************************** */
/**
* Click event
* @returns the click event
* @deprecated Please use lowercase letters starting with
*/
OnInputDir(): MWUIMulticastDelegate<(vec: Type.Vector2) => void>;
/* Converted to MWUIVirtualJoystickPanel is equivalent to (as MWUIVirtualJoystickPanel)
*
* @param o the object to be transformed
* @returns returns the transformed MWUIVirtualJoystickPanel object
* @deprecated Please use lowercase letters starting with
*/
static Get(o: MWUIWidget): MWUIVirtualJoystickPanel;
/**
* Returns the input center sticker settings, including normal, clicked, not enabled, and default values if they don't meet expectations.
* @returns returns the center sticker settings
* @deprecated Please use lowercase letters starting with
*/
GetCenterImage(): MWJoystickStyleDesigner;
/**
* Set the input center sticker settings, including normal, clicked, and unenabled, which will fail if they don't meet expectations.
* @param NewName Center image setting
* @deprecated Please use lowercase letters starting with
*/
SetCenterImage(NewName: MWJoystickStyleDesigner): void;
/**
* @returns the input background decal settings, including normal, clicked, and unenabled, and returns the default value if it doesn't meet expectations.
* @returns Returns the background texture settings for the input, including normal, clicked, not enabled, and the default value if it does not meet expectations.
* @deprecated Please use lowercase letters starting with
*/
GetBackgroundImage(): MWJoystickStyleDesigner;
/**
* Set the background image settings for the input, including normal, clicked, and unenabled, which will fail if not set as expected.
* @param NewName Background image setting
* @deprecated Please use lowercase letters
*/
SetBackgroundImage(NewName: MWJoystickStyleDesigner): void;
/**
* Returns the input joystick type, if it does not match the expected value, the default value is returned.
* @returns Returns the input joystick type.
* @deprecated Please use lowercase letters starting with
*/
GetControlType(): EMWControlType;
/**
* Set the input joystick type, character movement and skill joystick movement type, if it does not meet the expectation, the setting will fail.
* @param NewContrlType rocker type
* @deprecated Please use lowercase letters starting with
*/
SetControlType(NewContrlType: EMWControlType): void;
/**
* returns the input is the center of the joystick, does not meet the expected value will return the default value
* @returns Returns the center position of the joystick, if it does not meet expectations, the default value will be returned.
* @deprecated Please use lowercase letters to start with
*/@deprecated
GetCenter(): Type.Vector2;
Vector2; /**
/* Set the center of the input, if it doesn't meet the expectation, it will fail.
/* @param NewValue The new center position.
* @deprecated Please use lowercase letters to start with
*/
SetCenter(NewValue: Type.Vector2): void;
/**
* Returns the visual position of the input, or the default value if it doesn't match the expectation.
* @returns Returns the visual position of the input, or the default value if it doesn't match the expectation.
* @deprecated Please use the lowercase letters starting with
*/
GetVisualSize(): Type.Vector2;
/**
/* Set the visual size of the input, if it doesn't meet the expectation, it will fail.
/* @param NewValue Visual size
* @deprecated Please use lowercase letters starting with
*/
SetVisualSize(NewValue: Type.Vector2): void;
/**
* returns the input rocker thumbnail size, does not match the expected value will return the default value
* @returns Returns the size of the input joystick thumbnail, or the default value if it does not meet the expectation.
* @deprecated Please use lowercase letters starting with
*/
GetThumbSize(): Type.Vector2;
/**
* Set the input thumbnail size, if it doesn't meet the expectation, it will fail.
* @param NewValue The new input thumbnail size
* @deprecated Please use lowercase letters starting with
*/
SetThumbSize(NewValue: Type.Vector2): void;
/**
* @returns the input scale of the input, if it doesn't meet the expectation, the setting will fail.
* @returns Returns the input scale of the input, which will fail if it doesn't meet the expectation.
* @deprecated Please use lowercase letters starting with
*/
GetInputScale(): Type.Vector2;
Vector2; /**
/* Set the input scale of the input, it will fail if it doesn't meet the expectation.
/* @param NewValue The new input scale.
* @deprecated Please use lowercase letters starting with
*/
SetInputScale(NewValue: Type.Vector2): void;
/**
* @returns whether the input scale is reset or not, if it doesn't match the expectation, it will fail to be set.
* @returns boolean
* @deprecated Please use lowercase letters starting with
*/
GetIsPreventRecenter(): boolean;
/**
* Set whether the input is reset or not, if it does not meet the expectation, it will fail.
* @param bIsEnable boolean
* @deprecated Please use lowercase letters starting with
*/
SetIsPreventRecenter(bIsEnable: boolean): void;
/**
* @returns returns the input invalidation time, does not meet the expectation will set failure
* @returns Returns the invalid time of the input, which will fail if it does not meet the expectation.
* @deprecated Please use lowercase letters starting with
*/
GetTimeUntilDeactive(): number;
/**
* Set the input time to be invalid, if it doesn't meet the expectation, it will fail.
* @param Value invalid time
* @deprecated Please use lowercase letters starting with
*/
SetTimeUntilDeactive(Value: number): void;
/**
* @returns the reset time of the input, it will fail if it does not meet the expectation
* @returns Returns the reset time of the input, which will fail if it does not match the expectation.
* @deprecated Please use lowercase letters starting with
*/
GetTimeUntilReset(): number;
/**
* Set the reset time of the input, it will fail if it doesn't meet the expectation.
* @param Value reset time
* @deprecated Please use lowercase letters starting with
*/
SetTimeUntilReset(Value: number): void;
/**
* @returns the transparency at the time of activation
* @returns Returns the transparency at the time of activation
* @deprecated Please use lowercase letters starting with
*/
GetActiveOpacity(): number;
/**
* Set the transparency when activated.
* @param Value Transparency
* @deprecated Please use lowercase letters starting with
*/
SetActiveOpacity(Value: number): void;
/**
* @returns the transparency when not active
* @returns Returns the transparency when not active.
* @deprecated Please use lowercase letters starting with
*/
GetInActiveOpacity(): number;
/**
* Set the transparency when not active.
* @param Value Transparency
* @deprecated Please use lowercase letters starting with
*/
SetInActiveOpacity(Value: number): void;
/**
* @returns Returns the center image normal state image ID
* @returns Returns the center image normal state image ID
* @deprecated Please use lowercase letters starting with
*/
GetCenterImageNormal(): string;
/**
* Set the center image normal state image ID
* @param ID Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetCenterImageNormal(ID: string): void;
/**
* returns the center image press state image ID
* @returns Returns the center image press state image ID
* @deprecated Please use lowercase letters starting with
*/
GetCenterImageTouch(): string;
/**
* Set the center image press state image ID
* @param ID Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetCenterImageTouch(ID: string): void;
/**
* returns the center image disabled status image ID
* @returns Returns the center image disabled status image ID
* @deprecated Please use lowercase letters starting with
*/
GetCenterImageDisable(): string;
/**
* @brief Set the center image disable status image ID
* @param Value Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetCenterImageDisable(ID: string): void;
/**
* @returns Returns the center image normal state image ID
* @returns Returns the center image normal state image ID
* @deprecated Please use lowercase letters starting with
*/
GetBackgroundImageNormal(): string;
/**
* Set the background image normal state image ID
* @param ID Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetBackgroundImageNormal(ID: string): void;
/**
* Returns the background image press status image ID
* @returns Returns the background image press state image ID
* @deprecated Please use lowercase letters starting with
*/
GetBackgroundImageTouch(): string;
/**
* Set the background image press state image ID
* @param ID Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetBackgroundImageTouch(ID: string): void;
/**
* Returns the background image disabled status image ID
* @returns Returns the background image disabled status image ID
* @deprecated Please use lowercase letters starting with
*/
GetBackgroundImageDisable(): string;
/**
* Set the background image disable status image ID
* @param ID Resource ID
* @deprecated Please use lowercase letters starting with
*/
SetBackgroundImageDisable(ID: string): void;
Diagram of firing using the joystick function.
7.2 Camera slider
7.3 Color palette
//Setting palette button images
ColorPicker.setImageByGuid("45155");
//Color Adjustment Listening
let _Delegate = new MWGameUI.MWUIMulticastDelegate<(Content: Type.LinearColor) => void>();
ColorPicker.colorPickerChanged(_Delegate);
//Listen when color adjustment is complete
let _Delegate = new MWGameUI.MWUIMulticastDelegate<(Content: Type.LinearColor) => void>();
ColorPicker.colorPickerChangeFinished(_Delegate);
//Touch Start Listening
let _Delegate = new MWGameUI.MWUIMulticastDelegate<(Content: Type.LinearColor) => void>();
ColorPicker.touchStart(_Delegate);
//Touch End Listening
let _Delegate = new MWGameUI.MWUIMulticastDelegate<(Content: Type.LinearColor) => void>();
ColorPicker.touchFinished(_Delegate);
7.4 Loading map
Mobile editor function is online
Character Editor
Optimize the trigger logic object Optimized the performance when dynamically creating triggers to avoid the problem of lagging when generating a large number of overlapping triggers.
Primary point optimization Before optimization: Rotating X and Y axes will cause Player to behave abnormally. After optimization: (Editor property panel is grayed out) ignore the X and Y axis rotation and scaling information of the initialized Player.
Forbidden area optimization Before optimization: It is impossible to set a player's access to a certain no-go zone, only global access. After optimization: you can set the permission for each no-go zone independently.
/**
* Testing process
* Open the two-player client
* First test the setPlayerCanPass function
* Set forbidden zone 1 for player 1 to pass. Player 2 cannot pass.
* Set PlayerCanPass 2 is passable for Player2. Player 1 cannot pass
*
* Then test the blockAllPlayer function
* Set block zone 12 to be unpassable for all players
*
* Finally, test the releaseAllPlayer function
* Set the no-go zone 12 to be passable for all players
*/
@MWCore.
export default class BlockAreaScript extends MWCore.MWScript {
_player: GamePlay;
static _playerList: Array<GamePlay.Player> = new Array<GamePlay;
_block_1: GamePlay.BlockingAreav;
_block_2: GamePlay.BlockingAreav;
flag: boolean = true;
/* When the script is instantiated, this function will be called before the first frame is updated */
protected async onStart(): Promise<void> {
// Get the two no-go zones in the project
this._block_1 = await MWCore.GameObject.asyncFind("81BD630B40C79CF9493889A4505AD2A8") as GamePlay.BlockingAreav;
this._block_2 = await MWCore.GameObject.asyncFind("F6D77A4D44C9D551A21AF38AFC8B2B4F") as GamePlay;
//Client-side logic
if(GamePlay.isClient()) {
//get the current player role
this._player = await GamePlay.asyncGetCurrentPlayer();
// Dispatch the player to the server to join
Events.dispatchToServer("join");
//Press G to set the no-go zone 12 for all players
Events.onKeyDown(Type.Keys.G, () => {
this._block_1.blockAllPlayer();
this._block_2.blockAllPlayer();
});
// Press F to set the no-go zone 12 to be passable for all players
Events.onKeyDown(Type.Keys.F, () => {
this._block_1.releaseAllPlayer();
this._block_2.releaseAllPlayer();
});
}
// Server-side logic
if(GamePlay.isServer()) {
//Listen for player join events and add players to the list
Events.addClientListener("join", (player: GamePlay.Player) => {
BlockAreaScript._playerList.push(player);
})
// Iterate through the list after a 3 second delay (in case it doesn't load properly), and set different no-go zone permissions for the two players via the flag identifier
setTimeout(() => {
BlockAreaScript._playerList.forEach((ele: GamePlay.Player) => {
// Print the current player ID
console.error("player ID: " + ele.getPlayerID());
if(this.flag) {
//set block 1 passable for player 1, block 2 passable for player 1
this._block_1.setPlayerCanPass(ele.getPlayerID(), true);
this._block_2.setPlayerCanPass(ele.getPlayerID(), false);
this.flag = false;
} else {
// set block 1 not passable to player 2, block 2 passable to player 2
this._block_1.setPlayerCanPass(ele.getPlayerID(), false);
this._block_2.setPlayerCanPass(ele.getPlayerID(), true);
}
});
}, 3000)
}
}
}
@MWCore.MWClass
export default class Swim extends MWCore.MWScript {
_player: GamePlay.Player;
_swimmingPool: GamePlay.PhysVolume;
/** When the script is instantiated, this function will be called before the first frame is updated */
protected async onStart(): Promise<void> {
// Get a Pool
this._swimmingPool = await MWCore.GameObject.asyncFind("9813A5434BA782D00DCC17933F48371E") as GamePlay.PhysVolume;
if(GamePlay.isClient()) {
// Get Players
this._player = await GamePlay.asyncGetCurrentPlayer();
// Send player join events to the server
Events.dispatchToServer("join");
// Press F to float up and print inArea results if in the swim zone
Events.onKeyPress(Type.Keys.F, () => {
if(this._swimmingPool.inArea(this._player)) {
console.error("client: player in swimming pool? " + this._swimmingPool.inArea(this._player))
this._player.character.swimmingUp(10);
} else {
console.error("client: player in swimming pool? " + this._swimmingPool.inArea(this._player))
}
});
// Press G, if in the swimming area then sink and inArea print the result
Events.onKeyPress(Type.Keys.G, () => {
if(this._swimmingPool.inArea(this._player)) {
console.error("client: player in swimming pool? " + this._swimmingPool.inArea(this._player))
this._player.character.swimmingDown(10);
} else {
console.error("client: player in swimming pool? " + this._swimmingPool.inArea(this._player))
}
});
}
if(GamePlay.isServer()) {
// Listening to the server for player join events
Events.addClientListener("join",(player: GamePlay.Player) => {
// Get player post-cycle print inArea results
this._player = player;
setInterval(() => {
if(this._swimmingPool.inArea(this._player)) {
console.error("server: player in swimming pool? " + this._swimmingPool.inArea(this._player))
} else {
console.error("server: player in swimming pool? " + this._swimmingPool.inArea(this._player))
}
}, 100);
});
}
}
/**
* setHalfwayJoin(value: boolean): void;
* Set the halfway join switch
* @param value -true:turn on halfway join -false:turn off halfway join
* Use the domain Server - Only
*/
Global.setHalfwayJoin(true);
/**
* getHalfwayJoin(): boolean;
* getHalfwayJoin switch
* @returns -true:turn on halfway join -false:turn off halfway join
* Use the domain Server - Only
*/
console.log(`Whether to allow halfway joins for other players: ${Global.getHalfwayJoin()}`);
because of the UI editor joystick requirements on line, the default joystick style has been modified
Known that there is a problem with the parent material parameters, now the replacement model color may have a lighter pattern on high-end cell phones and editors
because Instance combined batch (mobile GPU Driven Render Pipeline research) needs, because the old project using pak resources and the current editor needs to use json format resources, all projects need to brush the resource update script, detailed operation steps please see: ISM brush script
[ListenServer] dispatchToAll and other methods of multi-terminal use will be infinite recursion and other issues, consider a period not to do the bureau city network online and mobile editor priority online, the subsequent optimization orhotfix
[ListenServer] currently GamePlay.isListenServer () is not hidden, developers please do not use, is expected to repair in 0.12, the environment will be judged by the interface hidden
when the role is posted in the no-go zone call releaseAllPlayer(), the role may not be able to cross the no-go zone, need to back up some distance to cross the next version of the optimization
In order to temporarily solve the problem of material parameter withdrawal crash temporary material parameter withdrawal off, there may be part of the property withdrawal operation does not take effect, this problem will follow the material 2.0 function online together with the repair.
the editor low occasionally appear stuck in the resource download interface, the log will always prompt the failure to download resources, please modify the .project file of the same name, the next version of the optimization
B-side log buried, the current launcher does not support a separate onlyid view buried, Pandora query id for launcherundefined, the id is a public id, can not locate the specific user reported buried, only through the reporting time fuzzy query
known V2 role using squatting and other large action will have a problem of penetrating the mold, subsequent optimization
run settings in the [Editor mode] and publish the game interface [MobileEditorGame] for the mobile UGC editor, other items do not check is there (subsequent versions will be optimized to remove)