Playza Editor Alpha v0.11.0.0 Release Notes
SandiegoLotus
0x304E
November 16th, 2022

Notes:

  1. Because of the UI editor joystick requirements online, the default joystick style has been modified

  2. 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

  3. 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,

  4. [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

  5. [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

  6. 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

  7. 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.

  8. 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

  9. 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

  10. known V2 role using squatting and other large action will cause a problem of wearing mold, subsequent optimization

  11. 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 function:

【ListenServer】

New support for single player games.

【Editor】

  1. Role editor supports multiple languages
  • Role editor support multi-language (English)
  1. MGS interactive revision optimization
  • Add MGS chat box under the main viewport and PIE of the editor to alert developers of possible position conflicts during UI layout design
(inside the main viewport)
(inside the main viewport)
in PIE
in PIE
  • Show and hide MGS chat box can be controlled by editor tool
  1. Project content sorting optimization
  • When a new file is created in the project content, the new file is renamed and displayed at the top and bottom of the list, and sorted according to the naming after the naming is completed
  1. Update the illegal characters of project content script
  • Project content script naming illegal characters updated, no longer allow Chinese name input
(Illegal character hint)
(Illegal character hint)
  1. Project content support right-click to refresh script and UI
  • Refresh option is added in the right-click menu of project content, and the copied scripts in file manager can be synchronized to the editor after clicking.
  1. Add ListenServer option to publish game and run settings
  • 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
  1. UI editor new component type

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

    • Function description: Scaling of the joystick's movement sensitivity
  • Activate transparency

    • Function description: Transparency of the joystick effect when using the joystick
  • Inactive transparency

    • Function: Transparency of the joystick effect when the joystick is not used
  • 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. [

Related interfaces.

/**
 * 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

    • New camera slider function, the player will change the camera orientation when dragging the screen in the slider, the developer can set the horizontal and vertical input ratio (i.e. sliding speed)

7.3 Color palette

  • New color palette function is added to let players choose colors in the game. The effect of using it is shown in the following schematic.
  • Related interfaces.
//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

  • New loading map function is added to facilitate the creation of a hint animation in the loading state, and developers can set the image resources, the number of images and rotation speed. The schematic diagram of the usage effect is as follows.

[Mobile Editor]

  • Mobile editor function is online
  • Character Editor
  • UGC Editor
  • Square Game

[GamePlay]

  1. Finger swipe event function
  • Interface usage example: multi-finger swipe related
  1. 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.

  2. 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.

  3. 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)
        }
    }
}
  1. Swimming area optimization New function: detect whether the current Player is in the swimming area Function
@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);
        });
    }
}

[New interface]

  1. support dynamic modification of the game can be added to the player interface in the middle
    /**
     * 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()}`);

Notes:

  1. because of the UI editor joystick requirements on line, the default joystick style has been modified

  2. 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

  3. 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

  4. [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

  5. [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

  6. 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

  7. 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.

  8. 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

  9. 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

  10. known V2 role using squatting and other large action will have a problem of penetrating the mold, subsequent optimization

  11. 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)

Ethereum Address
0x304EEBFB493E034DBC28B082fAdC1161f5Df1bE3
Content Digest
Dgu99otdpIKM4Z2j4d-z-JOFOSN2hdUElgQ8_PurJdI