From 23186001db93632f8704f856fb1a1db0fbe9f03f Mon Sep 17 00:00:00 2001 From: k8w Date: Thu, 2 Dec 2021 20:05:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=92=8C=E8=A7=A3=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/api/ApiJoin.ts | 12 + .../backend/src/api/ApiJoinRoom.ts | 12 - .../backend/src/index.ts | 27 +- .../backend/src/models/Room.ts | 128 +- .../backend/src/shared/game/GameSystem.ts | 124 ++ .../backend/src/shared/game/gameConfig.ts | 10 + .../src/shared/game/state/ArrowState.ts | 8 + .../src/shared/game/state/PlayerState.ts | 7 + .../backend/src/shared/protocols/PtlJoin.ts | 12 + .../src/shared/protocols/PtlJoinRoom.ts | 14 - .../shared/protocols/client/MsgClientInput.ts | 8 + .../shared/protocols/clientMsgs/MsgInput.ts | 3 - .../src/shared/protocols/server/MsgFrame.ts | 6 + .../shared/protocols/serverMsgs/MsgFrame.ts | 8 - .../shared/protocols/serverMsgs/MsgJoin.ts | 5 - .../shared/protocols/serverMsgs/MsgLeave.ts | 3 - .../src/shared/protocols/serviceProto.ts | 445 ++++-- .../backend/src/shared/states/Player.ts | 30 - .../backend/src/shared/states/RoomState.ts | 5 - .../frontend/assets/3d/map/newMap01.mtl | 40 +- .../3d/soldier/Materials_soldier01.meta | 12 + .../Materials_soldier01/Material #7.mtl | 43 + .../Materials_soldier01/Material #7.mtl.meta | 11 + .../assets/3d/soldier/mat_soldier.mtl | 36 + .../assets/3d/soldier/mat_soldier.mtl.meta | 11 + .../assets/3d/soldier/soldier01.FBX.meta | 6 +- .../frontend/assets/mat.meta | 12 + .../frontend/assets/mat/mat_ground.meta | 12 + .../frontend/assets/mat/mat_ground/grass.png | Bin 0 -> 179166 bytes .../assets/mat/mat_ground/grass.png.meta | 40 + .../assets/mat/mat_ground/mat_ground.mtl | 42 + .../assets/mat/mat_ground/mat_ground.mtl.meta | 11 + .../assets/prefabs/Joystick/Joystick.ts | 11 +- .../prefabs/{Soldier.meta => Player.meta} | 0 .../assets/prefabs/Player/Player.prefab | 900 +++++++++++ .../assets/prefabs/Player/Player.prefab.meta | 13 + .../frontend/assets/prefabs/Player/Player.ts | 22 + .../assets/prefabs/Player/Player.ts.meta | 9 + .../assets/scenes/GameScene/GameScene.scene | 1368 ++++++++--------- .../assets/scenes/GameScene/GameScene.ts | 115 ++ .../assets/scenes/GameScene/GameScene.ts.meta | 9 + .../frontend/assets/scripts/Room.ts | 101 -- .../frontend/assets/scripts/components.meta | 12 + .../assets/scripts/components/FollowCamera.ts | 94 ++ .../scripts/components/FollowCamera.ts.meta | 13 + .../frontend/assets/scripts/models.meta | 12 + .../assets/scripts/models/GameManager.ts | 97 ++ .../assets/scripts/models/GameManager.ts.meta | 9 + .../assets/scripts/models/MathUtil.ts | 7 + .../assets/scripts/models/MathUtil.ts.meta | 9 + .../settings/v2/packages/project.json | 8 +- .../frontend/tsconfig.json | 4 +- 52 files changed, 2792 insertions(+), 1164 deletions(-) create mode 100644 examples/cocos-creator-multiplayer/backend/src/api/ApiJoin.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/api/ApiJoinRoom.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/game/GameSystem.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/game/gameConfig.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/game/state/ArrowState.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/game/state/PlayerState.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoin.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoinRoom.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/client/MsgClientInput.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/clientMsgs/MsgInput.ts create mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/server/MsgFrame.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgFrame.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgJoin.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgLeave.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/states/Player.ts delete mode 100644 examples/cocos-creator-multiplayer/backend/src/shared/states/RoomState.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/grass.png create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/grass.png.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/mat_ground.mtl create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/mat_ground.mtl.meta rename examples/cocos-creator-multiplayer/frontend/assets/prefabs/{Soldier.meta => Player.meta} (100%) create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts.meta delete mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/Room.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/components.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/models.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts.meta create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts create mode 100644 examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts.meta diff --git a/examples/cocos-creator-multiplayer/backend/src/api/ApiJoin.ts b/examples/cocos-creator-multiplayer/backend/src/api/ApiJoin.ts new file mode 100644 index 0000000..f03b9ce --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/api/ApiJoin.ts @@ -0,0 +1,12 @@ +import { ApiCallWs } from "tsrpc"; +import { roomInstance } from ".."; +import { ReqJoin, ResJoin } from "../shared/protocols/PtlJoin"; + +export async function ApiJoin(call: ApiCallWs) { + let playerId = roomInstance.join(call.req, call.conn); + + call.succ({ + playerId: playerId, + gameState: roomInstance.gameSystem.state + }) +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/api/ApiJoinRoom.ts b/examples/cocos-creator-multiplayer/backend/src/api/ApiJoinRoom.ts deleted file mode 100644 index e64e371..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/api/ApiJoinRoom.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ApiCallWs } from "tsrpc"; -import { roomInstance } from ".."; -import { ReqJoinRoom, ResJoinRoom } from "../shared/protocols/PtlJoinRoom"; - -export async function ApiJoinRoom(call: ApiCallWs) { - let uid = roomInstance.join(call.req, call.conn); - - call.succ({ - uid: uid, - roomState: roomInstance.state - }) -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/index.ts b/examples/cocos-creator-multiplayer/backend/src/index.ts index 9b7d41a..46a6315 100644 --- a/examples/cocos-creator-multiplayer/backend/src/index.ts +++ b/examples/cocos-creator-multiplayer/backend/src/index.ts @@ -1,17 +1,36 @@ import 'k8w-extend-native'; import * as path from "path"; -import { WsServer } from "tsrpc"; +import { WsConnection, WsServer } from "tsrpc"; import { Room } from './models/Room'; -import { serviceProto } from './shared/protocols/serviceProto'; +import { serviceProto, ServiceType } from './shared/protocols/serviceProto'; // Create the Server export const server = new WsServer(serviceProto, { port: 3000, // Remove this to use binary mode (remove from the client too) - json: true + // json: true }); -// 测试,只有一个房间 +// 断开连接后退出房间 +server.flows.postDisconnectFlow.push(v => { + let conn = v.conn as WsConnection; + if (conn.playerId) { + roomInstance.leave(conn.playerId, conn); + } + + return v; +}) + +// 模拟网络延迟 +server.flows.preRecvDataFlow.push(async v => { + await new Promise(rs => { setTimeout(rs, 300) }) + return v; +}) +server.flows.preSendDataFlow.push(async v => { + await new Promise(rs => { setTimeout(rs, 300) }) + return v; +}) + export const roomInstance = new Room(server); // Initialize before server start diff --git a/examples/cocos-creator-multiplayer/backend/src/models/Room.ts b/examples/cocos-creator-multiplayer/backend/src/models/Room.ts index 3dd5783..e60e3e4 100644 --- a/examples/cocos-creator-multiplayer/backend/src/models/Room.ts +++ b/examples/cocos-creator-multiplayer/backend/src/models/Room.ts @@ -1,102 +1,100 @@ import { WsConnection, WsServer } from "tsrpc"; -import { ReqJoinRoom } from "../shared/protocols/PtlJoinRoom"; -import { MsgFrame } from "../shared/protocols/serverMsgs/MsgFrame"; +import { GameSystem, GameSystemInput, PlayerJoin } from "../shared/game/GameSystem"; +import { ReqJoin } from "../shared/protocols/PtlJoin"; import { ServiceType } from "../shared/protocols/serviceProto"; -import { applyPlayerInput, PlayerInput, PlayerState } from "../shared/states/Player"; -import { RoomState } from "../shared/states/RoomState"; /** * 服务端 - 房间 - 逻辑系统 */ export class Room { - state: RoomState = { - players: [] - } - // 次数/秒 - syncRate = 10; - lastUid = 0; + syncRate = 3; + nextPlayerId = 1; + + gameSystem = new GameSystem(); server: WsServer; - conns: WsConnection[] = []; - - pendingInputs: MsgFrame['inputs'] = []; + conns: WsConnection[] = []; + pendingInputs: GameSystemInput[] = []; + playerLastSn: { [playerId: number]: number | undefined } = {}; + lastSyncTime?: number; constructor(server: WsServer) { this.server = server; - setInterval(() => { this.sendSyncFrame() }, 1000 / this.syncRate); - } - - sendSyncFrame() { - // 发送同步帧 - this.server.broadcastMsg('serverMsgs/Frame', { - inputs: this.pendingInputs - }, this.conns); - this.pendingInputs = []; + setInterval(() => { this.sync() }, 1000 / this.syncRate); } /** 加入房间 */ - join(req: ReqJoinRoom, conn: WsConnection) { - let player: PlayerState = { - ...req, - uid: ++this.lastUid, + join(req: ReqJoin, conn: WsConnection) { + let input: PlayerJoin = { + type: 'PlayerJoin', + playerId: this.nextPlayerId++, // 初始位置随机 pos: { x: Math.random() * 10, y: Math.random() * 10 } } - this.conns.push(conn); - this.state.players.push(player); + this.applyInput(input); - conn.uid = player.uid; - conn.listenMsg('clientMsgs/Input', call => { - this.pendingInputs.push({ - uid: player.uid, - msgInput: call.msg - }); - this.applyInput({ - uid: player.uid, - input: call.msg - }); + this.conns.push(conn); + conn.playerId = input.playerId; + conn.listenMsg('client/ClientInput', call => { + this.playerLastSn[input.playerId] = call.msg.sn; + call.msg.inputs.forEach(v => { + this.applyInput({ + ...v, + playerId: input.playerId + }); + }) }); - this.server.broadcastMsg('serverMsgs/Join', { - player: player - }, this.conns); + return input.playerId; + } - return player.uid; + applyInput(input: GameSystemInput) { + this.pendingInputs.push(input); + } + + sync() { + let inputs = this.pendingInputs; + this.pendingInputs = []; + + // Apply inputs + inputs.forEach(v => { + this.gameSystem.applyInput(v) + }); + + // TimePast + let now = process.uptime(); + this.applyInput({ + type: 'TimePast', + dt: now - (this.lastSyncTime ?? now) + }); + this.lastSyncTime = now; + + // 发送同步帧 + this.conns.forEach(v => { + v.sendMsg('server/Frame', { + inputs: inputs, + lastSn: this.playerLastSn[v.playerId!] + }) + }); } /** 离开房间 */ - leave(uid: number, conn: WsConnection) { - this.conns.removeOne(v => v.uid === uid); - this.state.players.removeOne(v => v.uid === uid); - - conn.unlistenMsgAll('clientMsgs/Input'); - - this.server.broadcastMsg('serverMsgs/Leave', { - uid: uid - }, this.conns); + leave(playerId: number, conn: WsConnection) { + this.conns.removeOne(v => v.playerId === playerId); + this.applyInput({ + type: 'PlayerLeave', + playerId: playerId + }); } - - applyInput(input: RoomInput) { - let playerIndex = this.state.players.findIndex(v => v.uid === input.uid); - if (playerIndex > -1) { - this.state.players[playerIndex] = applyPlayerInput(this.state.players[playerIndex], input.input); - } - } - -} - -export interface RoomInput { - uid: number, - input: PlayerInput } declare module 'tsrpc' { export interface WsConnection { - uid?: number; + playerId?: number; } } \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/game/GameSystem.ts b/examples/cocos-creator-multiplayer/backend/src/shared/game/GameSystem.ts new file mode 100644 index 0000000..2c4bba0 --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/game/GameSystem.ts @@ -0,0 +1,124 @@ +import { gameConfig } from "./gameConfig"; +import { ArrowState } from "./state/ArrowState"; +import { PlayerState } from "./state/PlayerState"; + +export interface GameSystemState { + now: number, + players: PlayerState[], + arrow: ArrowState[], + nextArrowId: number +} + +export class GameSystem { + + // State (Render Pull) + private _state: GameSystemState = { + now: 0, + players: [], + arrow: [], + nextArrowId: 1 + } + get state(): Readonly { + return this._state + } + + reset(state: GameSystemState) { + this._state = Object.merge({}, state); + } + + // Input + applyInput(input: GameSystemInput) { + if (input.type === 'PlayerMove') { + let player = this._state.players.find(v => v.id === input.playerId); + if (!player) { + return; + } + + if (player.dizzyEndTime && player.dizzyEndTime > this._state.now) { + return; + } + player.pos.x += input.speed.x * input.dt; + player.pos.y += input.speed.y * input.dt; + } + else if (input.type === 'PlayerAttack') { + let player = this._state.players.find(v => v.id === input.playerId); + if (player) { + this._state.arrow.push({ + id: this._state.nextArrowId++, + fromPlayerId: input.playerId, + startPos: { ...player.pos }, + startTime: this._state.now, + targetPos: { + x: player.pos.x + input.direction.x * gameConfig.arrowDistance, + y: player.pos.y + input.direction.y * gameConfig.arrowDistance + }, + targetTime: this._state.now + gameConfig.arrowFlyTime + }); + } + } + else if (input.type === 'PlayerJoin') { + this.state.players.push({ + id: input.playerId, + pos: { ...input.pos } + }) + } + else if (input.type === 'PlayerLeave') { + this.state.players.remove(v => v.id === input.playerId); + } + else if (input.type === 'TimePast') { + this._state.now += input.dt; + + // 落地的 Arrow + for (let i = this._state.arrow.length - 1; i > -1; --i) { + let arrow = this._state.arrow[i]; + if (arrow.targetTime <= this._state.now) { + // 伤害判定 + let damagedPlayers = this._state.players.filter(v => { + return (v.pos.x - arrow.targetPos.x) * (v.pos.x - arrow.targetPos.x) + (v.pos.y - arrow.targetPos.y) * (v.pos.y - arrow.targetPos.y) <= gameConfig.arrowDistance * gameConfig.arrowDistance + }); + damagedPlayers.forEach(p => { + // 设置击晕状态 + p.dizzyEndTime = this._state.now + gameConfig.arrowDizzyTime; + + // Event + this.onDamage.forEach(h => h({ + fromPlayerId: arrow.fromPlayerId, + toPlayerId: p.id + })) + }) + } + } + } + } + + // Events (Game Push) + onDamage: ((e: { fromPlayerId: number, toPlayerId: number }) => void)[] = []; + +} + +export interface PlayerMove { + type: 'PlayerMove', + playerId: number, + speed: { x: number, y: number }, + // 移动的时间 (秒) + dt: number, +} +export interface PlayerAttack { + type: 'PlayerAttack', + playerId: number, + direction: { x: number, y: number }, +} +export interface PlayerJoin { + type: 'PlayerJoin', + playerId: number, + pos: { x: number, y: number } +} +export interface PlayerLeave { + type: 'PlayerLeave', + playerId: number +} +export interface TimePast { + type: 'TimePast', + dt: number +} +export type GameSystemInput = PlayerMove | PlayerAttack | PlayerJoin | PlayerLeave | TimePast; \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/game/gameConfig.ts b/examples/cocos-creator-multiplayer/backend/src/shared/game/gameConfig.ts new file mode 100644 index 0000000..71b2b39 --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/game/gameConfig.ts @@ -0,0 +1,10 @@ +export const gameConfig = { + // 攻击技能的冷却时间(毫秒) + attackCD: 1000, + + moveSpeed: 10, + + arrowFlyTime: 1000, + arrowDistance: 2, + arrowDizzyTime: 1000 +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/game/state/ArrowState.ts b/examples/cocos-creator-multiplayer/backend/src/shared/game/state/ArrowState.ts new file mode 100644 index 0000000..e746b7b --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/game/state/ArrowState.ts @@ -0,0 +1,8 @@ +export type ArrowState = { + id: number, + fromPlayerId: number, + startTime: number, + startPos: { x: number, y: number }, + targetTime: number, + targetPos: { x: number, y: number } +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/game/state/PlayerState.ts b/examples/cocos-creator-multiplayer/backend/src/shared/game/state/PlayerState.ts new file mode 100644 index 0000000..8004d39 --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/game/state/PlayerState.ts @@ -0,0 +1,7 @@ +export interface PlayerState { + id: number, + // 位置 + pos: { x: number, y: number }, + // 晕眩结束时间 + dizzyEndTime?: number, +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoin.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoin.ts new file mode 100644 index 0000000..0f85d8a --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoin.ts @@ -0,0 +1,12 @@ +import { GameSystemState } from "../game/GameSystem"; + +export interface ReqJoin { + +} + +export interface ResJoin { + playerId: number, + gameState: GameSystemState +} + +// export const conf = {} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoinRoom.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoinRoom.ts deleted file mode 100644 index 46b96b0..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/PtlJoinRoom.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PlayerState } from "../states/Player"; -import { RoomState } from "../states/RoomState"; - -export interface ReqJoinRoom { - nickname: string; - skinId: number; -} - -export interface ResJoinRoom { - uid: number, - roomState: RoomState -} - -// export const conf = {} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/client/MsgClientInput.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/client/MsgClientInput.ts new file mode 100644 index 0000000..b5cfba2 --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/client/MsgClientInput.ts @@ -0,0 +1,8 @@ +import { PlayerAttack, PlayerMove } from "../../game/GameSystem"; + +export interface MsgClientInput { + sn: number, + inputs: ClientInput[] +}; + +export type ClientInput = Omit | Omit; \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/clientMsgs/MsgInput.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/clientMsgs/MsgInput.ts deleted file mode 100644 index ae0ae07..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/clientMsgs/MsgInput.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { PlayerInput } from "../../states/Player"; - -export type MsgInput = { sn: number } & PlayerInput; \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/server/MsgFrame.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/server/MsgFrame.ts new file mode 100644 index 0000000..081e125 --- /dev/null +++ b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/server/MsgFrame.ts @@ -0,0 +1,6 @@ +import { GameSystemInput } from "../../game/GameSystem"; + +export interface MsgFrame { + inputs: GameSystemInput[], + lastSn?: number +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgFrame.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgFrame.ts deleted file mode 100644 index b7716b2..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgFrame.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { MsgInput } from "../clientMsgs/MsgInput"; - -export interface MsgFrame { - inputs: { - uid: number, - msgInput: MsgInput - }[] -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgJoin.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgJoin.ts deleted file mode 100644 index 34429ae..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgJoin.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { PlayerState } from "../../states/Player"; - -export interface MsgJoin { - player: PlayerState; -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgLeave.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgLeave.ts deleted file mode 100644 index adf0df5..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serverMsgs/MsgLeave.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface MsgLeave { - uid: number; -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serviceProto.ts b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serviceProto.ts index 5e2448c..fc9b4ff 100644 --- a/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serviceProto.ts +++ b/examples/cocos-creator-multiplayer/backend/src/shared/protocols/serviceProto.ts @@ -1,66 +1,128 @@ import { ServiceProto } from 'tsrpc-proto'; -import { MsgInput } from './clientMsgs/MsgInput'; -import { ReqJoinRoom, ResJoinRoom } from './PtlJoinRoom'; -import { MsgFrame } from './serverMsgs/MsgFrame'; -import { MsgJoin } from './serverMsgs/MsgJoin'; -import { MsgLeave } from './serverMsgs/MsgLeave'; +import { MsgClientInput } from './client/MsgClientInput'; +import { ReqJoin, ResJoin } from './PtlJoin'; +import { MsgFrame } from './server/MsgFrame'; export interface ServiceType { api: { - "JoinRoom": { - req: ReqJoinRoom, - res: ResJoinRoom + "Join": { + req: ReqJoin, + res: ResJoin } }, msg: { - "clientMsgs/Input": MsgInput, - "serverMsgs/Frame": MsgFrame, - "serverMsgs/Join": MsgJoin, - "serverMsgs/Leave": MsgLeave + "client/ClientInput": MsgClientInput, + "server/Frame": MsgFrame } } export const serviceProto: ServiceProto = { - "version": 3, "services": [ { - "id": 2, - "name": "clientMsgs/Input", + "id": 0, + "name": "client/ClientInput", "type": "msg" }, { - "id": 3, - "name": "JoinRoom", + "id": 1, + "name": "Join", "type": "api" }, { - "id": 7, - "name": "serverMsgs/Frame", - "type": "msg" - }, - { - "id": 4, - "name": "serverMsgs/Join", - "type": "msg" - }, - { - "id": 5, - "name": "serverMsgs/Leave", + "id": 2, + "name": "server/Frame", "type": "msg" } ], "types": { - "clientMsgs/MsgInput/MsgInput": { - "type": "Intersection", + "client/MsgClientInput/MsgClientInput": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "sn", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "inputs", + "type": { + "type": "Array", + "elementType": { + "type": "Reference", + "target": "client/MsgClientInput/ClientInput" + } + } + } + ] + }, + "client/MsgClientInput/ClientInput": { + "type": "Union", "members": [ { "id": 0, + "type": { + "target": { + "type": "Reference", + "target": "../game/GameSystem/PlayerMove" + }, + "keys": [ + "playerId" + ], + "type": "Omit" + } + }, + { + "id": 1, + "type": { + "target": { + "type": "Reference", + "target": "../game/GameSystem/PlayerAttack" + }, + "keys": [ + "playerId" + ], + "type": "Omit" + } + } + ] + }, + "../game/GameSystem/PlayerMove": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "type", + "type": { + "type": "Literal", + "literal": "PlayerMove" + } + }, + { + "id": 1, + "name": "playerId", + "type": { + "type": "Number" + } + }, + { + "id": 2, + "name": "speed", "type": { "type": "Interface", "properties": [ { "id": 0, - "name": "sn", + "name": "x", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "y", "type": { "type": "Number" } @@ -69,19 +131,15 @@ export const serviceProto: ServiceProto = { } }, { - "id": 1, + "id": 3, + "name": "dt", "type": { - "type": "Reference", - "target": "../states/Player/PlayerInput" + "type": "Number" } } ] }, - "../states/Player/PlayerInput": { - "type": "Reference", - "target": "../states/Player/PlayerMove" - }, - "../states/Player/PlayerMove": { + "../game/GameSystem/PlayerAttack": { "type": "Interface", "properties": [ { @@ -89,12 +147,19 @@ export const serviceProto: ServiceProto = { "name": "type", "type": { "type": "Literal", - "literal": "move" + "literal": "PlayerAttack" } }, { "id": 1, - "name": "offset", + "name": "playerId", + "type": { + "type": "Number" + } + }, + { + "id": 2, + "name": "direction", "type": { "type": "Interface", "properties": [ @@ -117,87 +182,276 @@ export const serviceProto: ServiceProto = { } ] }, - "PtlJoinRoom/ReqJoinRoom": { + "PtlJoin/ReqJoin": { + "type": "Interface" + }, + "PtlJoin/ResJoin": { "type": "Interface", "properties": [ { "id": 0, - "name": "nickname", + "name": "playerId", "type": { - "type": "String" + "type": "Number" } }, { "id": 1, - "name": "skinId", + "name": "gameState", "type": { - "type": "Number" + "type": "Reference", + "target": "../game/GameSystem/GameSystemState" } } ] }, - "PtlJoinRoom/ResJoinRoom": { + "../game/GameSystem/GameSystemState": { "type": "Interface", "properties": [ { "id": 0, - "name": "uid", + "name": "now", "type": { "type": "Number" } }, { - "id": 3, - "name": "roomState", - "type": { - "type": "Reference", - "target": "../states/RoomState/RoomState" - } - } - ] - }, - "../states/RoomState/RoomState": { - "type": "Interface", - "properties": [ - { - "id": 0, + "id": 1, "name": "players", "type": { "type": "Array", "elementType": { "type": "Reference", - "target": "../states/Player/PlayerState" + "target": "../game/state/PlayerState/PlayerState" } } + }, + { + "id": 2, + "name": "arrow", + "type": { + "type": "Array", + "elementType": { + "type": "Reference", + "target": "../game/state/ArrowState/ArrowState" + } + } + }, + { + "id": 3, + "name": "nextArrowId", + "type": { + "type": "Number" + } } ] }, - "../states/Player/PlayerState": { + "../game/state/PlayerState/PlayerState": { "type": "Interface", "properties": [ { "id": 0, - "name": "uid", + "name": "id", "type": { "type": "Number" } }, { "id": 1, - "name": "nickname", + "name": "pos", "type": { - "type": "String" + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "x", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "y", + "type": { + "type": "Number" + } + } + ] } }, { "id": 2, - "name": "skinId", + "name": "dizzyEndTime", + "type": { + "type": "Number" + }, + "optional": true + } + ] + }, + "../game/state/ArrowState/ArrowState": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "id", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "fromPlayerId", + "type": { + "type": "Number" + } + }, + { + "id": 2, + "name": "startTime", "type": { "type": "Number" } }, { "id": 3, + "name": "startPos", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "x", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "y", + "type": { + "type": "Number" + } + } + ] + } + }, + { + "id": 4, + "name": "targetTime", + "type": { + "type": "Number" + } + }, + { + "id": 5, + "name": "targetPos", + "type": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "x", + "type": { + "type": "Number" + } + }, + { + "id": 1, + "name": "y", + "type": { + "type": "Number" + } + } + ] + } + } + ] + }, + "server/MsgFrame/MsgFrame": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "inputs", + "type": { + "type": "Array", + "elementType": { + "type": "Reference", + "target": "../game/GameSystem/GameSystemInput" + } + } + }, + { + "id": 1, + "name": "lastSn", + "type": { + "type": "Number" + }, + "optional": true + } + ] + }, + "../game/GameSystem/GameSystemInput": { + "type": "Union", + "members": [ + { + "id": 0, + "type": { + "type": "Reference", + "target": "../game/GameSystem/PlayerMove" + } + }, + { + "id": 1, + "type": { + "type": "Reference", + "target": "../game/GameSystem/PlayerAttack" + } + }, + { + "id": 2, + "type": { + "type": "Reference", + "target": "../game/GameSystem/PlayerJoin" + } + }, + { + "id": 3, + "type": { + "type": "Reference", + "target": "../game/GameSystem/PlayerLeave" + } + }, + { + "id": 4, + "type": { + "type": "Reference", + "target": "../game/GameSystem/TimePast" + } + } + ] + }, + "../game/GameSystem/PlayerJoin": { + "type": "Interface", + "properties": [ + { + "id": 0, + "name": "type", + "type": { + "type": "Literal", + "literal": "PlayerJoin" + } + }, + { + "id": 1, + "name": "playerId", + "type": { + "type": "Number" + } + }, + { + "id": 2, "name": "pos", "type": { "type": "Interface", @@ -221,57 +475,40 @@ export const serviceProto: ServiceProto = { } ] }, - "serverMsgs/MsgFrame/MsgFrame": { + "../game/GameSystem/PlayerLeave": { "type": "Interface", "properties": [ { "id": 0, - "name": "inputs", + "name": "type", "type": { - "type": "Array", - "elementType": { - "type": "Interface", - "properties": [ - { - "id": 0, - "name": "uid", - "type": { - "type": "Number" - } - }, - { - "id": 1, - "name": "msgInput", - "type": { - "type": "Reference", - "target": "clientMsgs/MsgInput/MsgInput" - } - } - ] - } + "type": "Literal", + "literal": "PlayerLeave" + } + }, + { + "id": 1, + "name": "playerId", + "type": { + "type": "Number" } } ] }, - "serverMsgs/MsgJoin/MsgJoin": { + "../game/GameSystem/TimePast": { "type": "Interface", "properties": [ { "id": 0, - "name": "player", + "name": "type", "type": { - "type": "Reference", - "target": "../states/Player/PlayerState" + "type": "Literal", + "literal": "TimePast" } - } - ] - }, - "serverMsgs/MsgLeave/MsgLeave": { - "type": "Interface", - "properties": [ + }, { - "id": 0, - "name": "uid", + "id": 1, + "name": "dt", "type": { "type": "Number" } diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/states/Player.ts b/examples/cocos-creator-multiplayer/backend/src/shared/states/Player.ts deleted file mode 100644 index a152d3d..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/states/Player.ts +++ /dev/null @@ -1,30 +0,0 @@ -export interface PlayerState { - uid: number, - nickname: string, - skinId: number, - - // 可变状态 - pos: { - x: number, - y: number - } -} - -export interface PlayerMove { - type: 'move', - // 位移距离 - offset: { - x: number, - y: number - } -} -export type PlayerInput = PlayerMove; - -export function applyPlayerInput(state: PlayerState, input: PlayerInput): PlayerState { - if (input.type === 'move') { - state.pos.x += input.offset.x; - state.pos.y += input.offset.y; - } - - return state; -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/backend/src/shared/states/RoomState.ts b/examples/cocos-creator-multiplayer/backend/src/shared/states/RoomState.ts deleted file mode 100644 index b89f35c..0000000 --- a/examples/cocos-creator-multiplayer/backend/src/shared/states/RoomState.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { PlayerState } from "./Player"; - -export interface RoomState { - players: PlayerState[] -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/map/newMap01.mtl b/examples/cocos-creator-multiplayer/frontend/assets/3d/map/newMap01.mtl index a2ea13c..f6505cb 100644 --- a/examples/cocos-creator-multiplayer/frontend/assets/3d/map/newMap01.mtl +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/map/newMap01.mtl @@ -4,52 +4,32 @@ "_objFlags": 0, "_native": "", "_effectAsset": { - "__uuid__": "1baf0fc9-befa-459c-8bdd-af1a450a0319" + "__uuid__": "a3cd009f-0ab0-420d-9278-b9fdab939bbc", + "__expectedType__": "cc.EffectAsset" }, "_techIdx": 0, "_defines": [ { - "USE_ALBEDO_MAP": true, - "ROUGHNESS_CHANNEL": "g", - "METALLIC_CHANNEL": "b", - "OCCLUSION_CHANNEL": "r" + "USE_TEXTURE": true } ], "_states": [ { + "rasterizerState": {}, + "depthStencilState": {}, "blendState": { "targets": [ {} ] - }, - "depthStencilState": {}, - "rasterizerState": {} + } } ], "_props": [ { - "albedoScale": { - "__type__": "cc.Vec4", - "x": 1, - "y": 1, - "z": 1, - "w": 1 - }, - "pbrScale": { - "__type__": "cc.Vec4", - "x": 1, - "y": 0.242535620927811, - "z": 0.400000005960464, - "w": 1 - }, - "alphaThreshold": 1, - "normalStrenth": 1, "mainTexture": { - "__uuid__": "27e1fcb7-5016-4252-8c43-ac9c1c97308e@6c48a" - }, - "occlusion": 1, - "roughness": 0.242535620927811, - "metallic": 0.400000005960464 + "__uuid__": "27e1fcb7-5016-4252-8c43-ac9c1c97308e@6c48a", + "__expectedType__": "cc.Texture2D" + } } ] -} +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01.meta b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01.meta new file mode 100644 index 0000000..6adfd90 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "40e7bad4-3fa9-45c6-9d50-ce41c40e8174", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl new file mode 100644 index 0000000..3c9ca99 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl @@ -0,0 +1,43 @@ +{ + "__type__": "cc.Material", + "_name": "Material #7", + "_objFlags": 0, + "_native": "", + "_effectAsset": { + "__uuid__": "1baf0fc9-befa-459c-8bdd-af1a450a0319", + "__expectedType__": "cc.EffectAsset" + }, + "_techIdx": 0, + "_defines": [ + { + "USE_ALBEDO_MAP": true + } + ], + "_states": [ + { + "rasterizerState": {}, + "blendState": { + "targets": [ + {} + ] + }, + "depthStencilState": {} + } + ], + "_props": [ + { + "mainTexture": { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@291d4", + "__expectedType__": "cc.Texture2D" + }, + "albedoScale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "metallic": 0.400000005960464, + "roughness": 0.70710676908493 + } + ] +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl.meta b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl.meta new file mode 100644 index 0000000..b0c1efc --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/Materials_soldier01/Material #7.mtl.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.9", + "importer": "material", + "imported": true, + "uuid": "bc711895-84b3-4729-85f8-978c46347d19", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl new file mode 100644 index 0000000..bd5c6e7 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl @@ -0,0 +1,36 @@ +{ + "__type__": "cc.Material", + "_name": "", + "_objFlags": 0, + "_native": "", + "_effectAsset": { + "__uuid__": "a3cd009f-0ab0-420d-9278-b9fdab939bbc", + "__expectedType__": "cc.EffectAsset" + }, + "_techIdx": 0, + "_defines": [ + { + "USE_INSTANCING": true, + "USE_TEXTURE": true + } + ], + "_states": [ + { + "rasterizerState": {}, + "depthStencilState": {}, + "blendState": { + "targets": [ + {} + ] + } + } + ], + "_props": [ + { + "mainTexture": { + "__uuid__": "e90ad74a-b668-4e2c-bf91-51a2a91b02aa@6c48a", + "__expectedType__": "cc.Texture2D" + } + } + ] +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl.meta b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl.meta new file mode 100644 index 0000000..1e1c27c --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/mat_soldier.mtl.meta @@ -0,0 +1,11 @@ +{ + "ver": "1.0.9", + "importer": "material", + "imported": true, + "uuid": "5cf1ff47-b589-490a-bc78-a88f743b9798", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/soldier01.FBX.meta b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/soldier01.FBX.meta index 6be8c4b..97046ae 100644 --- a/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/soldier01.FBX.meta +++ b/examples/cocos-creator-multiplayer/frontend/assets/3d/soldier/soldier01.FBX.meta @@ -72,7 +72,7 @@ "userData": { "gltfIndex": 0, "wrapMode": 2, - "sample": 60, + "sample": 30, "span": { "from": 0.8, "to": 1.5 @@ -95,7 +95,7 @@ "userData": { "gltfIndex": 0, "wrapMode": 2, - "sample": 60, + "sample": 30, "span": { "from": 1.5333333333333334, "to": 2.2 @@ -264,14 +264,12 @@ "name": "run", "from": 0.8, "to": 1.5, - "fps": 60, "wrapMode": 2 }, { "name": "attack", "from": 1.5333333333333334, "to": 2.2, - "fps": 60, "wrapMode": 2 }, { diff --git a/examples/cocos-creator-multiplayer/frontend/assets/mat.meta b/examples/cocos-creator-multiplayer/frontend/assets/mat.meta new file mode 100644 index 0000000..a70ecb3 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/mat.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "e8e5dc6d-bdfe-4c40-8e74-4f36361cee55", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground.meta b/examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground.meta new file mode 100644 index 0000000..60321e2 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "9aaf6024-7754-4b77-b5f5-7ca6d1ef973a", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/grass.png b/examples/cocos-creator-multiplayer/frontend/assets/mat/mat_ground/grass.png new file mode 100644 index 0000000000000000000000000000000000000000..fbaa5ac5dfb0cf17fce46b2eac2cd56b42bb22f4 GIT binary patch literal 179166 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 (IiuGal>j!Bh|r_m@Re8RU2eZ#D;uf? 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 qU{p$j$B2YmC void, onOperateEnd: () => void, @@ -38,7 +36,6 @@ export class Joystick extends Component { this._options = v; } - onLoad() { this.node.on(Node.EventType.TOUCH_START, this.onTouch, this); this.node.on(Node.EventType.TOUCH_MOVE, this.onTouch, this); @@ -49,6 +46,10 @@ export class Joystick extends Component { private _touchStartPos?: Vec2; onTouch(e: EventTouch) { + if (!e.touch) { + return; + } + this.disk.active = true; let loc = e.touch.getUILocation(); diff --git a/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Soldier.meta b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player.meta similarity index 100% rename from examples/cocos-creator-multiplayer/frontend/assets/prefabs/Soldier.meta rename to examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player.meta diff --git a/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab new file mode 100644 index 0000000..9cb5d59 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab @@ -0,0 +1,900 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false + }, + { + "__type__": "cc.Node", + "_name": "Player", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [ + { + "__id__": 31 + }, + { + "__id__": 33 + } + ], + "_prefab": { + "__id__": 35 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "RootNode", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 3 + }, + { + "__id__": 17 + }, + { + "__id__": 19 + }, + { + "__id__": 21 + }, + { + "__id__": 26 + }, + { + "__id__": 28 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 30 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Dummy01", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [ + { + "__id__": 4 + }, + { + "__id__": 8 + }, + { + "__id__": 10 + }, + { + "__id__": 12 + }, + { + "__id__": 14 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 16 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 4.31247441140831e-32, + "z": 2.27106511374586e-9 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 8.146034247147302e-8, + "y": 0, + "z": 0, + "w": 0.9999999999999967 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 2.53999996185303, + "y": 2.53999996185303, + "z": 2.53999996185303 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0.000009334667642611398, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Body", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [ + { + "__id__": 5 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 7 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -0.000466376630356535, + "y": 0.0555356666445732, + "z": -4.76837147544984e-9 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0.0000013147252531426701, + "y": 5.898311123805427e-7, + "z": 0.7037748466382776, + "w": 0.7104230888964633 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 0.256809949874878, + "y": 0.439815044403076, + "z": 0.0870304778218269 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 0.006324434041980695, + "y": -0.006170109051330866, + "z": 89.46130112452344 + }, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "head", + "_objFlags": 0, + "_parent": { + "__id__": 4 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 6 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0.931041061878204, + "y": -1.62124635494365e-7, + "z": 1.28416282052513e-8 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.000007869318285142453, + "y": -2.023334521019378e-7, + "z": -0.001340885290760051, + "w": 0.9999991009819308 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1.24272096157074, + "y": 1.03568971157074, + "z": 1.0696634054184 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -0.0009017909722726095, + "y": -0.00002439492589956044, + "z": -0.15365418180060705 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "1etT/vqTVXbIC6bSTTJON5" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "38UefSlhhbc7fGntsIPZh6" + }, + { + "__type__": "cc.Node", + "_name": "legRight", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 9 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -0.15381583571434, + "y": 0.0330642610788345, + "z": -4.76837147544984e-9 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0.6775014926325843, + "y": 0.20089959890094192, + "z": 0.6787423421146606, + "w": -0.19984972269874676 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 0.184104666113853, + "y": 0.347824722528458, + "z": 0.0710852295160294 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -147.07673505109858, + "y": -90.12052935501679, + "z": 0.05309133906220757 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "a7AVcLwkBZ46dzYAYb4QPx" + }, + { + "__type__": "cc.Node", + "_name": "legLeft", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 11 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0.150058135390282, + "y": 0.0330642610788345, + "z": -1.43051144263495e-8 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0.6356643535110694, + "y": 0.3106639432517853, + "z": 0.635291228429095, + "w": -0.3095541941561399 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 0.184104397892952, + "y": 0.347825288772583, + "z": 0.0710852593183517 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -127.97583425594252, + "y": -90.01226481486562, + "z": 0.09407173384696697 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "6egLmgEjJSxb7mZpFf7FSD" + }, + { + "__type__": "cc.Node", + "_name": "handRight", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 13 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -0.204364582896233, + "y": 0.240019470453262, + "z": -1.90734859017994e-8 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.00043949465228992625, + "y": -0.00002823252593632647, + "z": 0.9849262411574669, + "w": -0.17297429151986207 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 0.184104412794113, + "y": 0.347825288772583, + "z": 0.07108523696661 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 179.9873448759303, + "y": 179.94664434517173, + "z": -19.921588202819525 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "50DRmSLnFemalb9mhuT9XN" + }, + { + "__type__": "cc.Node", + "_name": "handLeft", + "_objFlags": 0, + "_parent": { + "__id__": 3 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 15 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0.203091412782669, + "y": 0.240019470453262, + "z": -1.90734859017994e-8 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.00001006337055508986, + "y": -0.0003337875805372209, + "z": -0.17397424484232848, + "w": 0.9847501462889564 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 0.184104338288307, + "y": 0.347825139760971, + "z": 0.0710852667689323 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -0.008291917560534557, + "y": -0.04030648567970078, + "z": -20.037940451355507 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "5eMcps3V1RoqefFsSsm8Sx" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "e14q0XOvhSf7Wwpr+JP8WX" + }, + { + "__type__": "cc.Node", + "_name": "Bip001", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 18 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -2.95868706703186, + "y": 0.568015873432159, + "z": 2.59012746810913 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.5000003129242964, + "y": -0.49999968707550774, + "z": -0.49999968707550774, + "w": 0.5000003129242964 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 6.45159912109375, + "y": 6.45159912109375, + "z": 6.45160007476807 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -90, + "y": -89.99992828301158, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "72wx+9XH9fS5Jsw9lb3u/+" + }, + { + "__type__": "cc.Node", + "_name": "mixamorig:HeadTop_End", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 20 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -12.6684627532959, + "y": 2.27624535560608, + "z": -0.396418631076813 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0.07992084217915124, + "y": 0.35555240038341984, + "z": 0.03850968875854815, + "w": 0.9304365391786178 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 65.5876159667969, + "y": 65.5876617431641, + "z": 65.587646484375 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 7.027884698082062, + "y": 41.37325087834414, + "z": 7.382559841159056 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "758sU4GMNYEaDn4WLPV8VV" + }, + { + "__type__": "cc.Node", + "_name": "soldier01", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 22 + } + ], + "_prefab": { + "__id__": 25 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.7071067811865476, + "y": 0, + "z": 0, + "w": 0.7071067811865476 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 2.53999996185303, + "y": 2.53999996185303, + "z": 2.53999996185303 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -90.00000000000003, + "y": 0, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.SkinnedMeshRenderer", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 21 + }, + "_enabled": true, + "__prefab": { + "__id__": 23 + }, + "_materials": [ + { + "__uuid__": "5cf1ff47-b589-490a-bc78-a88f743b9798", + "__expectedType__": "cc.Material" + } + ], + "_visFlags": 0, + "lightmapSettings": { + "__id__": 24 + }, + "_mesh": { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@6868c", + "__expectedType__": "cc.Mesh" + }, + "_shadowCastingMode": 0, + "_shadowReceivingMode": 1, + "_enableMorph": true, + "_skeleton": { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@438fe", + "__expectedType__": "cc.Skeleton" + }, + "_skinningRoot": { + "__id__": 1 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "01bZIFKkBZQ5BDP5OTFTyW" + }, + { + "__type__": "cc.ModelLightmapSettings", + "texture": null, + "uvParam": { + "__type__": "cc.Vec4", + "x": 0, + "y": 0, + "z": 0, + "w": 0 + }, + "_bakeable": false, + "_castShadow": false, + "_receiveShadow": false, + "_recieveShadow": false, + "_lightmapSize": 64 + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "61gKhO2zhY0LoTCP8qRD7M" + }, + { + "__type__": "cc.Node", + "_name": "Bip001(__autogen 4)", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 27 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": 9.61940002441406, + "y": 0.568015873432159, + "z": 1.51320099830627 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": -0.5000003129242964, + "y": -0.49999968707550774, + "z": -0.49999968707550774, + "w": 0.5000003129242964 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 6.45159912109375, + "y": 6.45159912109375, + "z": 6.45160007476807 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": -90, + "y": -89.99992828301158, + "z": 0 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "ceW5W7cCxbcIDrr7BHLBqe" + }, + { + "__type__": "cc.Node", + "_name": "mixamorig:HeadTop_End(__autogen 5)", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 29 + }, + "_lpos": { + "__type__": "cc.Vec3", + "x": -0.0903754904866219, + "y": 2.27624559402466, + "z": -1.47334516048431 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0.07992084217915124, + "y": 0.35555240038341984, + "z": 0.03850968875854815, + "w": 0.9304365391786178 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 65.5876159667969, + "y": 65.5876617431641, + "z": 65.587646484375 + }, + "_layer": 1073741824, + "_euler": { + "__type__": "cc.Vec3", + "x": 7.027884698082062, + "y": 41.37325087834414, + "z": 7.382559841159056 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "9evQBDrbhSio1m7RjvuLjN" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "30u7fnOj9WDp8SK/8khE/U" + }, + { + "__type__": "cc.SkeletalAnimation", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 32 + }, + "playOnLoad": false, + "_clips": [ + { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@1f586", + "__expectedType__": "cc.AnimationClip" + }, + { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@cf5ee", + "__expectedType__": "cc.AnimationClip" + }, + { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@989ed", + "__expectedType__": "cc.AnimationClip" + }, + { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@ee525", + "__expectedType__": "cc.AnimationClip" + }, + { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@5b2e9", + "__expectedType__": "cc.AnimationClip" + } + ], + "_defaultClip": { + "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@1f586", + "__expectedType__": "cc.AnimationClip" + }, + "_useBakedAnimation": false, + "_sockets": [], + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "71bamidCpRLIBqyoKSaXUX" + }, + { + "__type__": "720b7a4EnZJjYpzLWJrmvT/", + "_name": "", + "_objFlags": 0, + "__editorExtras__": {}, + "node": { + "__id__": 1 + }, + "_enabled": true, + "__prefab": { + "__id__": 34 + }, + "_id": "" + }, + { + "__type__": "cc.CompPrefabInfo", + "fileId": "fczHMULW9AAIJRjvl2FJiZ" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__id__": 0 + }, + "fileId": "71qfN53ihYmaSuBoR11P0t" + } +] \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab.meta b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab.meta new file mode 100644 index 0000000..845f068 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.prefab.meta @@ -0,0 +1,13 @@ +{ + "ver": "1.1.32", + "importer": "prefab", + "imported": true, + "uuid": "28c95a70-5b80-4b72-8f7b-93e2cefacc98", + "files": [ + ".json" + ], + "subMetas": {}, + "userData": { + "syncNodeName": "Player" + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts new file mode 100644 index 0000000..0431579 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts @@ -0,0 +1,22 @@ + +import { Component, _decorator } from 'cc'; +import { PlayerState } from '../../scripts/shared/game/state/PlayerState'; +const { ccclass, property } = _decorator; + +@ccclass('Player') +export class Player extends Component { + + playerId!: number; + isSelf = false; + + init(state: PlayerState) { + this.playerId = state.id; + this.setPos(state.pos); + } + + // 把 GameSystem 空间映射到游戏空间 + setPos(pos: { x: number, y: number }) { + this.node.setPosition(pos.y, 0, pos.x); + } + +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts.meta b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts.meta new file mode 100644 index 0000000..629e78f --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/prefabs/Player/Player.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.22", + "importer": "typescript", + "imported": true, + "uuid": "720b76b8-1276-498d-8a73-2d626b9af4ff", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.scene b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.scene index 9800ca9..3af1c4f 100644 --- a/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.scene +++ b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.scene @@ -17,99 +17,30 @@ { "__id__": 2 }, + { + "__id__": 6 + }, + { + "__id__": 9 + }, { "__id__": 5 }, { - "__id__": 7 - }, - { - "__id__": 15 + "__id__": 19 } ], "_active": true, "_components": [], - "_prefab": null, + "_prefab": { + "__id__": 43 + }, "autoReleaseAssets": false, "_globals": { - "__id__": 33 + "__id__": 46 }, "_id": "0d3889f6-dc9c-424e-b8cd-6fa78d63af15" }, - { - "__type__": "cc.Node", - "_name": "Main Light", - "_objFlags": 0, - "_parent": { - "__id__": 1 - }, - "_children": [], - "_active": true, - "_components": [ - { - "__id__": 3 - } - ], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.24999999999999997, - "y": -0.24999999999999997, - "z": -0.06698729810778066, - "w": 0.9330127018922194 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -30, - "y": -30, - "z": 0 - }, - "_id": "c0y6F5f+pAvI805TdmxIjx" - }, - { - "__type__": "cc.DirectionalLight", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 2 - }, - "_enabled": true, - "__prefab": null, - "_color": { - "__type__": "cc.Color", - "r": 255, - "g": 255, - "b": 255, - "a": 255 - }, - "_useColorTemperature": false, - "_colorTemperature": 6550, - "_staticSettings": { - "__id__": 4 - }, - "_illuminance": 100000, - "_id": "597uMYCbhEtJQc0ffJlcgA" - }, - { - "__type__": "cc.StaticLightSettings", - "_baked": false, - "_editorOnly": false, - "_bakeable": false, - "_castShadow": false - }, { "__type__": "cc.Node", "_name": "Main Camera", @@ -121,22 +52,25 @@ "_active": true, "_components": [ { - "__id__": 6 + "__id__": 3 + }, + { + "__id__": 4 } ], "_prefab": null, "_lpos": { "__type__": "cc.Vec3", - "x": -10, - "y": 10, - "z": 10 + "x": -35.352258452125874, + "y": 18.714107575144862, + "z": 5.2735593669694936e-15 }, "_lrot": { "__type__": "cc.Quat", - "x": -0.27781593346944056, - "y": -0.36497167621709875, - "z": -0.11507512748638377, - "w": 0.8811195706053617 + "x": -0.17043586674820901, + "y": -0.686259145895912, + "z": -0.170435866748209, + "w": 0.6862591458959121 }, "_lscale": { "__type__": "cc.Vec3", @@ -147,8 +81,8 @@ "_layer": 1073741824, "_euler": { "__type__": "cc.Vec3", - "x": -35, - "y": -45, + "x": -27.895, + "y": -90, "z": 0 }, "_id": "c9DMICJLFO5IeO07EPon7U" @@ -158,7 +92,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 5 + "__id__": 2 }, "_enabled": true, "__prefab": null, @@ -195,111 +129,20 @@ "_id": "7dWQTpwS5LrIHnc1zAPUtf" }, { - "__type__": "cc.Node", + "__type__": "db75bbNJnxHYIdxo63CSRnv", + "_name": "", "_objFlags": 0, - "_parent": { - "__id__": 1 + "node": { + "__id__": 2 }, - "_prefab": { - "__id__": 8 - } - }, - { - "__type__": "cc.PrefabInfo", - "root": { - "__id__": 7 + "_enabled": true, + "__prefab": null, + "focusTarget": { + "__id__": 5 }, - "asset": { - "__uuid__": "c26a63b9-5039-47ae-b027-ef2bce881f6f@fc11b", - "__expectedType__": "cc.Prefab" - }, - "fileId": "2cyg9D4KRTnaWvFuyUcwrn", - "instance": { - "__id__": 9 - } - }, - { - "__type__": "cc.PrefabInstance", - "fileId": "b9eQ3gXWlMR4eNhYoDs3g8", - "mountedChildren": [], - "mountedComponents": [], - "propertyOverrides": [ - { - "__id__": 10 - }, - { - "__id__": 12 - }, - { - "__id__": 13 - }, - { - "__id__": 14 - } - ], - "removedComponents": [] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 11 - }, - "propertyPath": [ - "_name" - ], - "value": "Map" - }, - { - "__type__": "cc.TargetInfo", - "localID": [ - "2cyg9D4KRTnaWvFuyUcwrn" - ] - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 11 - }, - "propertyPath": [ - "_lpos" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 11 - }, - "propertyPath": [ - "_lrot" - ], - "value": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - } - }, - { - "__type__": "CCPropertyOverrideInfo", - "targetInfo": { - "__id__": 11 - }, - "propertyPath": [ - "_euler" - ], - "value": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - } + "speedFactor": 0.05, + "_distance": 40, + "_id": "1dWVUNxhZInJr8wtkL8WaB" }, { "__type__": "cc.Node", @@ -308,11 +151,7 @@ "_parent": { "__id__": 1 }, - "_children": [ - { - "__id__": 16 - } - ], + "_children": [], "_active": true, "_components": [], "_prefab": null, @@ -346,81 +185,19 @@ }, { "__type__": "cc.Node", - "_name": "Soldier", + "_name": "Plane", "_objFlags": 0, "_parent": { - "__id__": 15 + "__id__": 1 }, - "_children": [ - { - "__id__": 17 - } - ], - "_active": true, + "_children": [], + "_active": false, "_components": [ { - "__id__": 32 + "__id__": 7 } ], "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0.941, - "y": 0, - "z": -0.76 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0, - "y": 0, - "z": 0, - "w": 1 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_id": "ebyWCPQhZMyLIE8q8DzQ3L" - }, - { - "__type__": "cc.Node", - "_name": "RootNode", - "_objFlags": 0, - "_parent": { - "__id__": 16 - }, - "_children": [ - { - "__id__": 18 - }, - { - "__id__": 25 - }, - { - "__id__": 26 - }, - { - "__id__": 27 - }, - { - "__id__": 30 - }, - { - "__id__": 31 - } - ], - "_active": true, - "_components": [], - "_prefab": null, "_lpos": { "__type__": "cc.Vec3", "x": 0, @@ -436,9 +213,9 @@ }, "_lscale": { "__type__": "cc.Vec3", - "x": 1, - "y": 1, - "z": 1 + "x": 100, + "y": 100, + "z": 100 }, "_layer": 1073741824, "_euler": { @@ -447,456 +224,36 @@ "y": 0, "z": 0 }, - "_id": "b1SPz5a7NMd4JcacHxKGsn" + "_id": "1erbampNxCKK1cr4qjZjeX" }, { - "__type__": "cc.Node", - "_name": "Dummy01", - "_objFlags": 0, - "_parent": { - "__id__": 17 - }, - "_children": [ - { - "__id__": 19 - }, - { - "__id__": 21 - }, - { - "__id__": 22 - }, - { - "__id__": 23 - }, - { - "__id__": 24 - } - ], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0, - "y": 4.31247441140831e-32, - "z": 2.27106511374586e-9 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 8.146034247147302e-8, - "y": 0, - "z": 0, - "w": 0.9999999999999967 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 2.53999996185303, - "y": 2.53999996185303, - "z": 2.53999996185303 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": 0.000009334667642611398, - "y": 0, - "z": 0 - }, - "_id": "63UEIV8jVH6JFCmENPuLUg" - }, - { - "__type__": "cc.Node", - "_name": "Body", - "_objFlags": 0, - "_parent": { - "__id__": 18 - }, - "_children": [ - { - "__id__": 20 - } - ], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": -0.000466376630356535, - "y": 0.0555356666445732, - "z": -4.76837147544984e-9 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0.0000013147252531426701, - "y": 5.898311123805427e-7, - "z": 0.7037748466382776, - "w": 0.7104230888964633 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 0.256809949874878, - "y": 0.439815044403076, - "z": 0.0870304778218269 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": 0.006324434041980695, - "y": -0.006170109051330866, - "z": 89.46130112452344 - }, - "_id": "c3Kc0wgrVLqLDbm0JqXiO4" - }, - { - "__type__": "cc.Node", - "_name": "head", - "_objFlags": 0, - "_parent": { - "__id__": 19 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0.931041061878204, - "y": -1.62124635494365e-7, - "z": 1.28416282052513e-8 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.000007869318285142453, - "y": -2.023334521019378e-7, - "z": -0.001340885290760051, - "w": 0.9999991009819308 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 1.24272096157074, - "y": 1.03568971157074, - "z": 1.0696634054184 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -0.0009017909722726095, - "y": -0.00002439492589956044, - "z": -0.15365418180060705 - }, - "_id": "b5X2VEA8RGd4hx8OiMzv/Z" - }, - { - "__type__": "cc.Node", - "_name": "legRight", - "_objFlags": 0, - "_parent": { - "__id__": 18 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": -0.15381583571434, - "y": 0.0330642610788345, - "z": -4.76837147544984e-9 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0.6775014926325843, - "y": 0.20089959890094192, - "z": 0.6787423421146606, - "w": -0.19984972269874676 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 0.184104666113853, - "y": 0.347824722528458, - "z": 0.0710852295160294 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -147.07673505109858, - "y": -90.12052935501679, - "z": 0.05309133906220757 - }, - "_id": "e1fluQIndNObRTN+XQDXHF" - }, - { - "__type__": "cc.Node", - "_name": "legLeft", - "_objFlags": 0, - "_parent": { - "__id__": 18 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0.150058135390282, - "y": 0.0330642610788345, - "z": -1.43051144263495e-8 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0.6356643535110694, - "y": 0.3106639432517853, - "z": 0.635291228429095, - "w": -0.3095541941561399 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 0.184104397892952, - "y": 0.347825288772583, - "z": 0.0710852593183517 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -127.97583425594252, - "y": -90.01226481486562, - "z": 0.09407173384696697 - }, - "_id": "68iMhCIVZK+7BrYtACLsh8" - }, - { - "__type__": "cc.Node", - "_name": "handRight", - "_objFlags": 0, - "_parent": { - "__id__": 18 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": -0.204364582896233, - "y": 0.240019470453262, - "z": -1.90734859017994e-8 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.00043949465228992625, - "y": -0.00002823252593632647, - "z": 0.9849262411574669, - "w": -0.17297429151986207 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 0.184104412794113, - "y": 0.347825288772583, - "z": 0.07108523696661 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": 179.9873448759303, - "y": 179.94664434517173, - "z": -19.921588202819525 - }, - "_id": "7bTKOHx6JFo6TQB1hhAXLX" - }, - { - "__type__": "cc.Node", - "_name": "handLeft", - "_objFlags": 0, - "_parent": { - "__id__": 18 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0.203091412782669, - "y": 0.240019470453262, - "z": -1.90734859017994e-8 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.00001006337055508986, - "y": -0.0003337875805372209, - "z": -0.17397424484232848, - "w": 0.9847501462889564 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 0.184104338288307, - "y": 0.347825139760971, - "z": 0.0710852667689323 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -0.008291917560534557, - "y": -0.04030648567970078, - "z": -20.037940451355507 - }, - "_id": "0cvPWKogRPMoUakKiazJUx" - }, - { - "__type__": "cc.Node", - "_name": "Bip001", - "_objFlags": 0, - "_parent": { - "__id__": 17 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": -2.95868706703186, - "y": 0.568015873432159, - "z": 2.59012746810913 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.5000003129242964, - "y": -0.49999968707550774, - "z": -0.49999968707550774, - "w": 0.5000003129242964 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 6.45159912109375, - "y": 6.45159912109375, - "z": 6.45160007476807 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -90, - "y": -89.99992828301158, - "z": 0 - }, - "_id": "31vrZWcK9HRp5vyFtVjdDB" - }, - { - "__type__": "cc.Node", - "_name": "mixamorig:HeadTop_End", - "_objFlags": 0, - "_parent": { - "__id__": 17 - }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": -12.6684627532959, - "y": 2.27624535560608, - "z": -0.396418631076813 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": 0.07992084217915124, - "y": 0.35555240038341984, - "z": 0.03850968875854815, - "w": 0.9304365391786178 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 65.5876159667969, - "y": 65.5876617431641, - "z": 65.587646484375 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": 7.027884698082062, - "y": 41.37325087834414, - "z": 7.382559841159056 - }, - "_id": "94wDRuucREC4GyndIAbp/E" - }, - { - "__type__": "cc.Node", - "_name": "soldier01", - "_objFlags": 0, - "_parent": { - "__id__": 17 - }, - "_children": [], - "_active": true, - "_components": [ - { - "__id__": 28 - } - ], - "_prefab": null, - "_lpos": { - "__type__": "cc.Vec3", - "x": 0, - "y": 0, - "z": 0 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.7071067811865476, - "y": 0, - "z": 0, - "w": 0.7071067811865476 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 2.53999996185303, - "y": 2.53999996185303, - "z": 2.53999996185303 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -90.00000000000003, - "y": 0, - "z": 0 - }, - "_id": "af/w/4nmxBA7EI7p6SWLJ+" - }, - { - "__type__": "cc.SkinnedMeshRenderer", - "_name": "", + "__type__": "cc.MeshRenderer", + "_name": "Plane", "_objFlags": 0, + "__editorExtras__": {}, "node": { - "__id__": 27 + "__id__": 6 }, "_enabled": true, "__prefab": null, "_materials": [ { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@95953", + "__uuid__": "00f711c1-6f4c-4de3-bc9b-52888e03f3ac", "__expectedType__": "cc.Material" } ], "_visFlags": 0, "lightmapSettings": { - "__id__": 29 + "__id__": 8 }, "_mesh": { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@6868c", + "__uuid__": "1263d74c-8167-4928-91a6-4e2672411f47@2e76e", "__expectedType__": "cc.Mesh" }, "_shadowCastingMode": 0, "_shadowReceivingMode": 1, "_enableMorph": true, - "_skeleton": { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@438fe", - "__expectedType__": "cc.Skeleton" - }, - "_skinningRoot": { - "__id__": 16 - }, - "_id": "30YHOawqJAk45mqt1Kv4o4" + "_id": "82T+4KKehOcqLqvINaID/a" }, { "__type__": "cc.ModelLightmapSettings", @@ -916,135 +273,608 @@ }, { "__type__": "cc.Node", - "_name": "Bip001(__autogen 4)", "_objFlags": 0, "_parent": { - "__id__": 17 + "__id__": 1 }, - "_children": [], - "_active": true, - "_components": [], - "_prefab": null, - "_lpos": { + "_prefab": { + "__id__": 10 + } + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 9 + }, + "asset": { + "__uuid__": "c26a63b9-5039-47ae-b027-ef2bce881f6f@fc11b", + "__expectedType__": "cc.Prefab" + }, + "fileId": "2cyg9D4KRTnaWvFuyUcwrn", + "instance": { + "__id__": 11 + } + }, + { + "__type__": "cc.PrefabInstance", + "fileId": "e7wpFdRzxFupYfDrzr/lg7", + "mountedChildren": [], + "mountedComponents": [], + "propertyOverrides": [ + { + "__id__": 12 + }, + { + "__id__": 14 + }, + { + "__id__": 15 + }, + { + "__id__": 16 + }, + { + "__id__": 17 + } + ], + "removedComponents": [] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 13 + }, + "propertyPath": [ + "_name" + ], + "value": "newMap01" + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "2cyg9D4KRTnaWvFuyUcwrn" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 13 + }, + "propertyPath": [ + "_lpos" + ], + "value": { "__type__": "cc.Vec3", - "x": 9.61940002441406, - "y": 0.568015873432159, - "z": 1.51320099830627 - }, - "_lrot": { - "__type__": "cc.Quat", - "x": -0.5000003129242964, - "y": -0.49999968707550774, - "z": -0.49999968707550774, - "w": 0.5000003129242964 - }, - "_lscale": { - "__type__": "cc.Vec3", - "x": 6.45159912109375, - "y": 6.45159912109375, - "z": 6.45160007476807 - }, - "_layer": 1073741824, - "_euler": { - "__type__": "cc.Vec3", - "x": -90, - "y": -89.99992828301158, + "x": 0, + "y": 0, "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 13 }, - "_id": "c9relHXCxD8buEcxdgkJHW" + "propertyPath": [ + "_lrot" + ], + "value": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 13 + }, + "propertyPath": [ + "_euler" + ], + "value": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 18 + }, + "propertyPath": [ + "_materials", + "0" + ], + "value": { + "__uuid__": "b7d6d595-6cd1-43c6-8bc7-3a92644870b9", + "__expectedType__": "cc.Material" + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "7cPmRsw4Ne67cKUY0ub3s2" + ] }, { "__type__": "cc.Node", - "_name": "mixamorig:HeadTop_End(__autogen 5)", + "_name": "Canvas", "_objFlags": 0, "_parent": { - "__id__": 17 + "__id__": 1 }, - "_children": [], + "_children": [ + { + "__id__": 20 + }, + { + "__id__": 22 + } + ], "_active": true, - "_components": [], + "_components": [ + { + "__id__": 39 + }, + { + "__id__": 40 + }, + { + "__id__": 41 + }, + { + "__id__": 42 + } + ], "_prefab": null, "_lpos": { "__type__": "cc.Vec3", - "x": -0.0903754904866219, - "y": 2.27624559402466, - "z": -1.47334516048431 + "x": 375, + "y": 667, + "z": 0 }, "_lrot": { "__type__": "cc.Quat", - "x": 0.07992084217915124, - "y": 0.35555240038341984, - "z": 0.03850968875854815, - "w": 0.9304365391786178 + "x": 0, + "y": 0, + "z": 0, + "w": 1 }, "_lscale": { "__type__": "cc.Vec3", - "x": 65.5876159667969, - "y": 65.5876617431641, - "z": 65.587646484375 + "x": 1, + "y": 1, + "z": 1 + }, + "_layer": 33554432, + "_euler": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_id": "2bu+Wz5ktPl5ljMhLdUST8" + }, + { + "__type__": "cc.Node", + "_name": "Camera", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 21 + } + ], + "_prefab": null, + "_lpos": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 1000 + }, + "_lrot": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + }, + "_lscale": { + "__type__": "cc.Vec3", + "x": 1, + "y": 1, + "z": 1 }, "_layer": 1073741824, "_euler": { "__type__": "cc.Vec3", - "x": 7.027884698082062, - "y": 41.37325087834414, - "z": 7.382559841159056 + "x": 0, + "y": 0, + "z": 0 }, - "_id": "18OPyREQRP0bZHBbgBDM0L" + "_id": "ccmFJo9bNJT7Wqp2Z77wkb" }, { - "__type__": "cc.SkeletalAnimation", + "__type__": "cc.Camera", "_name": "", "_objFlags": 0, "node": { - "__id__": 16 + "__id__": 20 }, "_enabled": true, "__prefab": null, - "playOnLoad": false, - "_clips": [ + "_projection": 0, + "_priority": 1073741824, + "_fov": 45, + "_fovAxis": 0, + "_orthoHeight": 667, + "_near": 1, + "_far": 2000, + "_color": { + "__type__": "cc.Color", + "r": 0, + "g": 0, + "b": 0, + "a": 255 + }, + "_depth": 1, + "_stencil": 0, + "_clearFlags": 6, + "_rect": { + "__type__": "cc.Rect", + "x": 0, + "y": 0, + "width": 1, + "height": 1 + }, + "_aperture": 19, + "_shutter": 7, + "_iso": 0, + "_screenScale": 1, + "_visibility": 41943040, + "_targetTexture": null, + "_id": "cbSLFrEq5ISoMAhCFPuoSv" + }, + { + "__type__": "cc.Node", + "_objFlags": 0, + "_parent": { + "__id__": 19 + }, + "_prefab": { + "__id__": 23 + } + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 22 + }, + "asset": { + "__uuid__": "0363f7f8-204e-410e-ade0-03adca6ea835", + "__expectedType__": "cc.Prefab" + }, + "fileId": "25fHuwytBN2qk6dH5oVJvO", + "instance": { + "__id__": 24 + } + }, + { + "__type__": "cc.PrefabInstance", + "fileId": "41rO7rBitC0KYZRU0Z4peA", + "mountedChildren": [], + "mountedComponents": [], + "propertyOverrides": [ { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@1f586", - "__expectedType__": "cc.AnimationClip" + "__id__": 25 }, { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@cf5ee", - "__expectedType__": "cc.AnimationClip" + "__id__": 27 }, { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@989ed", - "__expectedType__": "cc.AnimationClip" + "__id__": 28 }, { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@ee525", - "__expectedType__": "cc.AnimationClip" + "__id__": 29 }, { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@5b2e9", - "__expectedType__": "cc.AnimationClip" + "__id__": 30 + }, + { + "__id__": 32 + }, + { + "__id__": 33 + }, + { + "__id__": 35 + }, + { + "__id__": 37 } ], - "_defaultClip": { - "__uuid__": "57d4c4ef-3199-4596-bf79-7c065964ca9c@1f586", - "__expectedType__": "cc.AnimationClip" + "removedComponents": [] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 26 }, - "_useBakedAnimation": true, - "_sockets": [], - "_id": "d4kBjIp3xEdIVjRiQqSIsg" + "propertyPath": [ + "_name" + ], + "value": "Joystick" + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "25fHuwytBN2qk6dH5oVJvO" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 26 + }, + "propertyPath": [ + "_lpos" + ], + "value": { + "__type__": "cc.Vec3", + "x": -375, + "y": -667, + "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 26 + }, + "propertyPath": [ + "_lrot" + ], + "value": { + "__type__": "cc.Quat", + "x": 0, + "y": 0, + "z": 0, + "w": 1 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 26 + }, + "propertyPath": [ + "_euler" + ], + "value": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 31 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 750, + "height": 1334 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "03ZUWxyGxEKrRNfAAZAjfl" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 26 + }, + "propertyPath": [ + "_layer" + ], + "value": 33554432 + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 34 + }, + "propertyPath": [ + "_layer" + ], + "value": 33554432 + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "d0wZ2A2kRHRL52JXTqW2TD" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 36 + }, + "propertyPath": [ + "_layer" + ], + "value": 33554432 + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "99DpUW4QRIJ4zS/1nooi0x" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 38 + }, + "propertyPath": [ + "_layer" + ], + "value": 33554432 + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "ceQ/tc9/lBPIsW1Hwyb91a" + ] + }, + { + "__type__": "cc.UITransform", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_contentSize": { + "__type__": "cc.Size", + "width": 750, + "height": 1334 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_id": "26kd0+oj5JE6lQOL2JM9ql" + }, + { + "__type__": "cc.Canvas", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_cameraComponent": { + "__id__": 21 + }, + "_alignCanvasWithScreen": true, + "_id": "ebX9QTnS1AlKH1eI+/bdJk" + }, + { + "__type__": "cc.Widget", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "_alignFlags": 45, + "_target": null, + "_left": 0, + "_right": 0, + "_top": 0, + "_bottom": 0, + "_horizontalCenter": 0, + "_verticalCenter": 0, + "_isAbsLeft": true, + "_isAbsRight": true, + "_isAbsTop": true, + "_isAbsBottom": true, + "_isAbsHorizontalCenter": true, + "_isAbsVerticalCenter": true, + "_originalWidth": 0, + "_originalHeight": 0, + "_alignMode": 2, + "_lockFlags": 0, + "_id": "c97irTOvNCH7Mmyire8Buy" + }, + { + "__type__": "d4728cOzxlKHLMu5Xg48U8U", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 19 + }, + "_enabled": true, + "__prefab": null, + "joyStick": null, + "prefabPlayer": { + "__uuid__": "28c95a70-5b80-4b72-8f7b-93e2cefacc98", + "__expectedType__": "cc.Prefab" + }, + "players": { + "__id__": 5 + }, + "camera": { + "__id__": 4 + }, + "_id": "86PJf2PFRK5LGUONuKqmzS" + }, + { + "__type__": "cc.PrefabInfo", + "fileId": "", + "targetOverrides": [ + { + "__id__": 44 + } + ] + }, + { + "__type__": "cc.TargetOverrideInfo", + "source": { + "__id__": 42 + }, + "sourceInfo": null, + "propertyPath": [ + "joyStick" + ], + "target": { + "__id__": 22 + }, + "targetInfo": { + "__id__": 45 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "b6/h8KXgpAI6dQQRwusaRr" + ] }, { "__type__": "cc.SceneGlobals", "ambient": { - "__id__": 34 + "__id__": 47 }, "shadows": { - "__id__": 35 + "__id__": 48 }, "_skybox": { - "__id__": 36 + "__id__": 49 }, "fog": { - "__id__": 37 + "__id__": 50 } }, { diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts new file mode 100644 index 0000000..125b943 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts @@ -0,0 +1,115 @@ + +import { Component, instantiate, Node, Prefab, Vec2, _decorator } from 'cc'; +import { WsClient } from 'tsrpc-browser'; +import { Joystick } from '../../prefabs/Joystick/Joystick'; +import { Player } from '../../prefabs/Player/Player'; +import { FollowCamera } from '../../scripts/components/FollowCamera'; +import { GameManager } from '../../scripts/models/GameManager'; +import { gameConfig } from '../../scripts/shared/game/gameConfig'; +import { serviceProto, ServiceType } from '../../scripts/shared/protocols/serviceProto'; +const { ccclass, property } = _decorator; + +/** + * Predefined variables + * Name = GameScene + * DateTime = Thu Dec 02 2021 18:43:36 GMT+0800 (中国标准时间) + * Author = k8w + * FileBasename = GameScene.ts + * FileBasenameNoExtension = GameScene + * URL = db://assets/scenes/GameScene/GameScene.ts + * ManualUrl = https://docs.cocos.com/creator/3.3/manual/zh/ + * + */ + +@ccclass('GameScene') +export class GameScene extends Component { + + @property(Joystick) + joyStick!: Joystick; + + @property(Prefab) + prefabPlayer!: Prefab; + + @property(Node) + players!: Node; + + @property(FollowCamera) + camera: FollowCamera = null as any; + + client!: WsClient; + gameManager!: GameManager; + + private _playerInstances: { [playerId: number]: Player } = {}; + private _selfSpeed?: Vec2 = new Vec2(0, 0); + + onLoad() { + (window as any).game = this; + + this.joyStick.options = { + onOperate: v => { + if (!this._selfSpeed) { + this._selfSpeed = new Vec2; + } + this._selfSpeed.set(v.x, v.y); + }, + onOperateEnd: () => { + this._selfSpeed = undefined; + } + } + + this.client = new WsClient(serviceProto, { + server: 'ws://127.0.0.1:3000', + logger: console + }); + this.client.flows.postDisconnectFlow.push(v => { + location.reload() + return v; + }) + this.gameManager = new GameManager(this.client); + + this.gameManager.join(); + } + + update(dt: number) { + // Send Inputs + if (this._selfSpeed && this._selfSpeed.lengthSqr()) { + this._selfSpeed.normalize().multiplyScalar(gameConfig.moveSpeed); + this.gameManager.sendClientInput({ + type: 'PlayerMove', + speed: { + x: this._selfSpeed.x, + y: this._selfSpeed.y + }, + dt: dt + }) + } + + let gameState = this.gameManager.state; + + // console.log('update', gameState.players.length) + + // Update pos + for (let playerState of gameState.players) { + let player: Player = this._playerInstances[playerState.id]; + if (!player) { + let node = instantiate(this.prefabPlayer); + this.players.addChild(node); + player = node.getComponent(Player)!; + player.init(playerState); + + if (playerState.id === this.gameManager.selfPlayerId) { + this.camera.focusTarget = node; + } + + this._playerInstances[playerState.id] = player; + } + else { + // console.log('setPos', playerState.id, playerState.pos.x, playerState.pos.y) + player.setPos(playerState.pos); + } + } + + // Clear left players + } + +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts.meta b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts.meta new file mode 100644 index 0000000..bbe001a --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scenes/GameScene/GameScene.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.22", + "importer": "typescript", + "imported": true, + "uuid": "d472870e-cf19-4a1c-b32e-e57838f14f14", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/Room.ts b/examples/cocos-creator-multiplayer/frontend/assets/scripts/Room.ts deleted file mode 100644 index b111b9c..0000000 --- a/examples/cocos-creator-multiplayer/frontend/assets/scripts/Room.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { WsClient } from 'tsrpc-browser'; -import { MsgInput } from './shared/protocols/clientMsgs/MsgInput'; -import { MsgFrame } from './shared/protocols/serverMsgs/MsgFrame'; -import { ServiceType } from "./shared/protocols/serviceProto"; -import { applyPlayerInput, PlayerInput, PlayerState } from "./shared/states/Player"; -import { RoomState } from './shared/states/RoomState'; - -/** - * 客户端 - 房间 - 逻辑系统 - */ -export class Room { - - state: RoomState = { - players: [] - } - - client: WsClient; - - self?: { - uid: number, - // 最后一次权威状态 - lastServerState: PlayerState - } - private _lastSendInputSN = 0; - private _sendingMsgs: MsgInput[] = []; - - constructor(client: WsClient) { - this.client = client; - this.client.listenMsg('serverMsgs/Frame', msg => { - this.applyServerFrame(msg); - }); - this.client.listenMsg('serverMsgs/Join', msg => { - this.state.players.push(msg.player); - }); - this.client.listenMsg('serverMsgs/Leave', msg => { - this.state.players.removeOne(v => v.uid === msg.uid); - }); - } - - init(roomState: RoomState) { - - } - - /** 同步服务端的权威消息 */ - applyServerFrame(msg: MsgFrame) { - msg.inputs.forEach(({ uid, msgInput }) => { - let playerIndex = this.state.players.findIndex(v => v.uid === uid); - if (playerIndex === -1) { - return; - } - let newPlayer: PlayerState = this.state.players[playerIndex]; - - // 自己:和解 - if (uid === this.self?.uid) { - this._sendingMsgs.remove(v => v.sn <= msgInput.sn); - this.state.players[playerIndex] = this.self.lastServerState; - // 预测 - this._sendingMsgs.forEach(v => { - this.state.players[playerIndex] = applyPlayerInput(this.state.players[playerIndex], v); - }) - } - // 其它人:直接同步 - else { - this.state.players[playerIndex] = applyPlayerInput(this.state.players[playerIndex], msgInput); - } - }); - } - - /** 发送客户端输入,并执行本地预测 */ - sendInput(input: PlayerInput) { - if (!this.self) { - return; - } - - let msg: MsgInput = { - ...input, - sn: ++this._lastSendInputSN - } - this._sendingMsgs.push(msg); - this.client.sendMsg('clientMsgs/Input', msg); - } - - async joinRoom() { - let ret = await this.client.callApi('JoinRoom', { - nickname: 'xxx', - skinId: 1 - }); - - if (!ret.isSucc) { - alert(ret.err.message); - return; - } - - this.self = { - uid: ret.res.uid, - lastServerState: ret.res.roomState.players.find(v => v.uid === ret.res!.uid)! - } - this.state = ret.res.roomState; - } - -} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/components.meta b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components.meta new file mode 100644 index 0000000..1db4d3a --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "bb0fd50f-b641-4824-a798-1f06417e3e88", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts new file mode 100644 index 0000000..3a0450c --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts @@ -0,0 +1,94 @@ +import { _decorator, Component, Node, Vec3, Quat, Tween, tween } from "cc"; +import { MathUtil } from '../models/MathUtil'; +const { ccclass, property } = _decorator; + +const v3_1 = new Vec3; + +/** + * 跟随摄像机 + */ +@ccclass +export class FollowCamera extends Component { + + @property(Node) + focusTarget: Node = null as any; + + @property + speedFactor: number = 0.05; + + @property + private _distance: number = 15.0; + @property + public get distance(): number { + return this._distance; + } + public set distance(v: number) { + this._distance = v; + this._updateTargetWorldPos(); + } + + // Limit range + enableLimit: boolean = true; + minX = -Infinity; + maxX = Infinity; + minZ = -Infinity; + maxZ = Infinity; + + protected _tweenFollow?: Tween; + protected _targetWorldPos = new Vec3; + protected _lastTargetPos = new Vec3; + + start() { + this._lastTargetPos.set(this.focusTarget.worldPosition); + this._updateTargetWorldPos(); + this.node.setWorldPosition(this._targetWorldPos); + } + + protected _updateTargetWorldPos() { + this._targetWorldPos.set(this.focusTarget.worldPosition); + if (this.enableLimit) { + this._targetWorldPos.x = MathUtil.limit(this._targetWorldPos.x, this.minX, this.maxX); + this._targetWorldPos.z = MathUtil.limit(this._targetWorldPos.z, this.minZ, this.maxZ); + } + + this._targetWorldPos.add(this.node.forward.multiplyScalar(this.distance * -1)); + } + + update() { + if (!this._lastTargetPos.equals(this.focusTarget.worldPosition)) { + this._lastTargetPos.set(this.focusTarget.worldPosition); + this._updateTargetWorldPos(); + } + + // 向TargetWorldPos平滑逼近 + // Limit Range + v3_1.set(this._targetWorldPos); + let diff = v3_1.subtract(this.node.worldPosition); + if (diff.lengthSqr() > 0.01) { + this.node.worldPosition.add(diff.multiplyScalar(this.speedFactor)); + this.node.setWorldPosition(this.node.worldPosition); + } + } + + resetPos() { + this._updateTargetWorldPos(); + this.node.setWorldPosition(this._targetWorldPos); + } + + @property + get preview() { + return false; + } + set preview(v: boolean) { + this.resetPos(); + } + + @property + get autoSetDistance() { + return false; + } + set autuSetDistance(v: boolean) { + this.distance = this.node.worldPosition.clone().subtract(this.focusTarget.worldPosition).length(); + } + +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts.meta b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts.meta new file mode 100644 index 0000000..124f557 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/components/FollowCamera.ts.meta @@ -0,0 +1,13 @@ +{ + "ver": "4.0.22", + "importer": "typescript", + "imported": true, + "uuid": "db75b6cd-267c-4760-8771-a3adc24919ef", + "files": [], + "subMetas": {}, + "userData": { + "importAsPlugin": false, + "moduleId": "project:///assets/scripts/components/FollowCamera.js", + "simulateGlobals": [] + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/models.meta b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models.meta new file mode 100644 index 0000000..5ecdf64 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "7d1b93ce-3f28-40b7-9ad5-52f9fd2cae80", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts new file mode 100644 index 0000000..478cd39 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts @@ -0,0 +1,97 @@ +import { WsClient } from "tsrpc-browser"; +import { GameSystem, GameSystemState } from "../shared/game/GameSystem"; +import { ClientInput, MsgClientInput } from "../shared/protocols/client/MsgClientInput"; +import { MsgFrame } from "../shared/protocols/server/MsgFrame"; +import { ServiceType } from "../shared/protocols/serviceProto"; + +export class GameManager { + + client: WsClient; + + gameSystem = new GameSystem(); + lastServerState: GameSystemState = this.gameSystem.state; + selfPlayerId: number = -1; + lastSN = 0; + + get state() { + return this.gameSystem.state; + } + + constructor(client: WsClient) { + this.client = client; + client.listenMsg('server/Frame', msg => { this._onServerSync(msg) }); + + (window as any).gm = this; + } + + async join(): Promise { + if (!this.client.isConnected) { + let resConnect = await this.client.connect(); + if (!resConnect.isSucc) { + if (confirm('连接到服务器失败,是否重试')) { + return this.join(); + } + else { + return; + } + } + } + + let ret = await this.client.callApi('Join', {}); + + if (!ret.isSucc) { + if (confirm(`加入房间失败\n${ret.err.message}\n是否重试 ?`)) { + return this.join(); + } + else { + return; + } + } + + this.gameSystem.reset(ret.res.gameState); + this.lastServerState = Object.merge(ret.res.gameState); + this.selfPlayerId = ret.res.playerId; + } + + private _onServerSync(frame: MsgFrame) { + // 同步权威状态 + this.gameSystem.reset(this.lastServerState); + for (let input of frame.inputs) { + this.gameSystem.applyInput(input); + } + this.lastServerState = Object.merge({}, this.gameSystem.state); + + // 和解 + let lastSn = frame.lastSn ?? -1; + this.pendingInputMsgs.remove(v => v.sn <= lastSn); + this.pendingInputMsgs.forEach(m => { + m.inputs.forEach(v => { + this.gameSystem.applyInput({ + ...v, + playerId: this.selfPlayerId + }); + }) + }) + } + + pendingInputMsgs: MsgClientInput[] = []; + sendClientInput(input: ClientInput) { + if (!this.selfPlayerId) { + return; + } + + let msg: MsgClientInput = { + sn: ++this.lastSN, + inputs: [input] + } + this.pendingInputMsgs.push(msg); + this.client.sendMsg('client/ClientInput', msg); + + // 预测 + this.gameSystem.applyInput({ + ...input, + playerId: this.selfPlayerId + }); + } + +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts.meta b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts.meta new file mode 100644 index 0000000..2c59981 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/GameManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.22", + "importer": "typescript", + "imported": true, + "uuid": "977377fa-caaf-4e5e-8dac-0b429df3bdf6", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts new file mode 100644 index 0000000..4a81233 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts @@ -0,0 +1,7 @@ +export class MathUtil { + + static limit(src: number, min: number, max: number) { + return Math.min(max, Math.max(min, src)); + } + +} \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts.meta b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts.meta new file mode 100644 index 0000000..63762e2 --- /dev/null +++ b/examples/cocos-creator-multiplayer/frontend/assets/scripts/models/MathUtil.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.22", + "importer": "typescript", + "imported": true, + "uuid": "6fde67c5-0d09-4389-8c51-9b57bce87ee1", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/examples/cocos-creator-multiplayer/frontend/settings/v2/packages/project.json b/examples/cocos-creator-multiplayer/frontend/settings/v2/packages/project.json index 429e70c..e3be56d 100644 --- a/examples/cocos-creator-multiplayer/frontend/settings/v2/packages/project.json +++ b/examples/cocos-creator-multiplayer/frontend/settings/v2/packages/project.json @@ -5,5 +5,11 @@ "name": "canvas_19", "value": 524288 } - ] + ], + "general": { + "designResolution": { + "width": 750, + "height": 1334 + } + } } diff --git a/examples/cocos-creator-multiplayer/frontend/tsconfig.json b/examples/cocos-creator-multiplayer/frontend/tsconfig.json index d7049f6..8f1ede0 100644 --- a/examples/cocos-creator-multiplayer/frontend/tsconfig.json +++ b/examples/cocos-creator-multiplayer/frontend/tsconfig.json @@ -2,5 +2,7 @@ /* Base configuration. Do not edit this field. */ "extends": "./temp/tsconfig.cocos.json", /* Add your custom configuration here. */ - "compilerOptions": {} + "compilerOptions": { + "skipLibCheck": true + } } \ No newline at end of file