feat: add sound, UI

main
tiendat3699 2024-03-11 10:46:50 +07:00
parent cedd082852
commit 1c1aa7578e
27 changed files with 1760 additions and 92 deletions

View File

@ -1130,7 +1130,7 @@
"fileId": "9crXsAtjdEQIcD0a2IceFl" "fileId": "9crXsAtjdEQIcD0a2IceFl"
}, },
{ {
"__type__": "4630aSZqwlFqb6BUtrii+tV", "__type__": "2b7c2ePr+dMuYseum/QYECs",
"_name": "", "_name": "",
"_objFlags": 0, "_objFlags": 0,
"node": { "node": {
@ -1161,6 +1161,10 @@
"__uuid__": "6a432293-3852-4267-be19-c671f36fe9f0", "__uuid__": "6a432293-3852-4267-be19-c671f36fe9f0",
"__expectedType__": "cc.AudioClip" "__expectedType__": "cc.AudioClip"
}, },
"_ballThrowSound": {
"__uuid__": "97c8a166-c717-41bd-837f-bd1733e2ee1c",
"__expectedType__": "cc.AudioClip"
},
"_jumpCurve": { "_jumpCurve": {
"__id__": 79 "__id__": 79
}, },
@ -1168,7 +1172,7 @@
}, },
{ {
"__type__": "cc.CompPrefabInfo", "__type__": "cc.CompPrefabInfo",
"fileId": "43eN1N3HRBEa/ox7tb7ZPo" "fileId": "97rCl9CwBAEoDnKUvzZjGu"
}, },
{ {
"__type__": "cc.AnimationCurve", "__type__": "cc.AnimationCurve",
@ -1188,9 +1192,9 @@
"interpolationMode": 2, "interpolationMode": 2,
"tangentWeightMode": 0, "tangentWeightMode": 0,
"value": 0, "value": 0,
"rightTangent": 5.537037037037036, "rightTangent": 7.298245614035088,
"rightTangentWeight": 1, "rightTangentWeight": 1,
"leftTangent": 5.537037037037036, "leftTangent": 7.298245614035088,
"leftTangentWeight": 1, "leftTangentWeight": 1,
"easingMethod": 0, "easingMethod": 0,
"__editorExtras__": null "__editorExtras__": null
@ -1200,9 +1204,9 @@
"interpolationMode": 2, "interpolationMode": 2,
"tangentWeightMode": 0, "tangentWeightMode": 0,
"value": 0, "value": 0,
"rightTangent": -2.148148148148149, "rightTangent": -0.9629629629629626,
"rightTangentWeight": 1, "rightTangentWeight": 1,
"leftTangent": -2.148148148148149, "leftTangent": -0.9629629629629626,
"leftTangentWeight": 1, "leftTangentWeight": 1,
"easingMethod": 0, "easingMethod": 0,
"__editorExtras__": null "__editorExtras__": null

View File

@ -163,9 +163,9 @@
"__id__": 22 "__id__": 22
}, },
"duration": 1.5, "duration": 1.5,
"loop": true, "loop": false,
"simulationSpeed": 1, "simulationSpeed": 1,
"playOnAwake": true, "playOnAwake": false,
"gravityModifier": { "gravityModifier": {
"__id__": 23 "__id__": 23
}, },

View File

@ -318,7 +318,10 @@
"__id__": 16 "__id__": 16
}, },
"_score": 10, "_score": 10,
"_flySpeed": 1000, "_hitSound": {
"__uuid__": "1f602e14-2769-4903-b4d2-b0977eeaf36b",
"__expectedType__": "cc.AudioClip"
},
"_id": "" "_id": ""
}, },
{ {

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
import { import {
_decorator, _decorator,
Animation, Animation,
AudioClip,
CCFloat, CCFloat,
CCInteger, CCInteger,
Collider2D, Collider2D,
@ -18,6 +19,7 @@ import ObjectPool from '../Pool/ObjectPool';
import Utilities from '../Utilities'; import Utilities from '../Utilities';
import { EventManger } from '../Manager/EventManger'; import { EventManger } from '../Manager/EventManger';
import GameEvent from '../Events/GameEvent'; import GameEvent from '../Events/GameEvent';
import { SoundManager } from '../Manager/SoundManager';
const { ccclass, property, float } = _decorator; const { ccclass, property, float } = _decorator;
@ccclass('ScoreObject') @ccclass('ScoreObject')
@ -28,6 +30,8 @@ export class ScoreObject extends Component implements IPoolable {
private _sprite: Sprite; private _sprite: Sprite;
@property({ type: Animation, visible: true }) @property({ type: Animation, visible: true })
private _spawnAnimation: Animation; private _spawnAnimation: Animation;
@property({ type: AudioClip, visible: true })
private _hitSound: AudioClip;
@property({ type: CCInteger, visible: true }) @property({ type: CCInteger, visible: true })
private _score: number; private _score: number;
@ -67,6 +71,7 @@ export class ScoreObject extends Component implements IPoolable {
private onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) { private onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) {
if (this._isHit) return; if (this._isHit) return;
SoundManager.instance.playSfx(this._hitSound);
this._collider.enabled = false; this._collider.enabled = false;
let center = this.node.getWorldPosition(); let center = this.node.getWorldPosition();
let other = otherCollider.node.getWorldPosition(); let other = otherCollider.node.getWorldPosition();
@ -78,7 +83,7 @@ export class ScoreObject extends Component implements IPoolable {
this._flySpeed = otherCollider.getComponent(RigidBody2D).linearVelocity.length(); this._flySpeed = otherCollider.getComponent(RigidBody2D).linearVelocity.length();
this.node.setSiblingIndex(this.node.parent.children.length - 1); this.node.setSiblingIndex(this.node.parent.children.length - 1);
if (this._score > 0) { if (this._score > 0) {
GameManager.instance.destroyEnviromentsObject(this._score, this.node.getWorldPosition()); GameManager.instance.destroyEnvironmentObject(this._score, this.node.getWorldPosition());
} }
} }

View File

@ -12,7 +12,7 @@ enum GameEvent {
export interface GameEventCallbackMap { export interface GameEventCallbackMap {
[GameEvent.Score]: (score: number, type?: ScoreType) => void; [GameEvent.Score]: (score: number, type?: ScoreType) => void;
[GameEvent.BallOut]: () => void; [GameEvent.BallOut]: (ball: number) => void;
[GameEvent.MultiBall]: (active: boolean) => void; [GameEvent.MultiBall]: (active: boolean) => void;
[GameEvent.GameStateChange]: (state: GameState) => void; [GameEvent.GameStateChange]: (state: GameState) => void;
[GameEvent.ScoreObjectRelease]: (obj: Node) => void; [GameEvent.ScoreObjectRelease]: (obj: Node) => void;
@ -20,7 +20,7 @@ export interface GameEventCallbackMap {
export interface GameEventArgMap { export interface GameEventArgMap {
[GameEvent.Score]: [number, ScoreType]; [GameEvent.Score]: [number, ScoreType];
[GameEvent.BallOut]: null; [GameEvent.BallOut]: number;
[GameEvent.MultiBall]: boolean; [GameEvent.MultiBall]: boolean;
[GameEvent.GameStateChange]: GameState; [GameEvent.GameStateChange]: GameState;
[GameEvent.ScoreObjectRelease]: Node; [GameEvent.ScoreObjectRelease]: Node;

View File

@ -1,6 +1,6 @@
import { _decorator, CCInteger, Collider2D, Component, Contact2DType, EventHandler, tween, Vec2 } from 'cc'; import { _decorator, CCInteger, Collider2D, Component, Contact2DType, EventHandler, tween, Vec2 } from 'cc';
import { Ball } from './Ball';
import Utilities from '../Utilities'; import Utilities from '../Utilities';
import { Ball } from './Ball';
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@ccclass('Cannon') @ccclass('Cannon')

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "ba9083ce-8b19-4c6c-98bd-de3a9c918c2e", "uuid": "1f9704b7-db29-4e9e-87da-b4fa52808d59",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "c394b738-05e4-418d-a047-2b3df4d486aa", "uuid": "bed157ee-bcf2-4b22-9d4e-dc15a0e3769d",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "db6268f6-8d6d-4e9f-a908-f0c63885d157", "uuid": "3ff78da1-8ad4-494c-b153-029ed6fcb72a",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -1,9 +1,20 @@
import { _decorator, CCInteger, Collider2D, Component, Contact2DType, Node, RigidBody2D } from 'cc'; import {
_decorator,
AudioClip,
CCInteger,
Collider2D,
Component,
Contact2DType,
Node,
ParticleSystem,
Prefab,
} from 'cc';
import { GameManager } from '../Manager/GameManager'; import { GameManager } from '../Manager/GameManager';
import Utilities from '../Utilities'; import Utilities from '../Utilities';
import ObjectPool from '../Pool/ObjectPool'; import ObjectPool from '../Pool/ObjectPool';
import { Ball } from './Ball'; import { Ball } from './Ball';
const { ccclass, property, float } = _decorator; import { SoundManager } from '../Manager/SoundManager';
const { ccclass, property } = _decorator;
@ccclass('Goal') @ccclass('Goal')
export class Goal extends Component { export class Goal extends Component {
@ -11,9 +22,16 @@ export class Goal extends Component {
private _collider: Collider2D; private _collider: Collider2D;
@property({ type: CCInteger, visible: true }) @property({ type: CCInteger, visible: true })
private _score: number; private _score: number;
@property({ type: Prefab, visible: true })
private _goalFx: Prefab;
@property({ type: AudioClip, visible: true })
private _goalSound: AudioClip;
private _goalFxPool: ObjectPool;
protected onLoad(): void { protected onLoad(): void {
this._collider.on(Contact2DType.BEGIN_CONTACT, this.onContactBegin, this); this._collider.on(Contact2DType.BEGIN_CONTACT, this.onContactBegin, this);
this._goalFxPool = new ObjectPool(this._goalFx, 5, false);
} }
private async onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) { private async onContactBegin(selfCollider: Collider2D, otherCollider: Collider2D) {
@ -21,8 +39,16 @@ export class Goal extends Component {
if (ball) { if (ball) {
GameManager.instance.goal(this._score, ball.node.getWorldPosition()); GameManager.instance.goal(this._score, ball.node.getWorldPosition());
ball.setActiveRigi(false); ball.setActiveRigi(false);
const fx = this._goalFxPool.get(this.node, ParticleSystem);
const pos = ball.node.getWorldPosition();
pos.z = 10;
fx.node.setWorldPosition(pos);
fx.play();
SoundManager.instance.playSfx(this._goalSound);
await Utilities.delay(1000); await Utilities.delay(1000);
ObjectPool.release(ball.node); ObjectPool.release(ball.node);
await Utilities.waitUntil(() => fx.isStopped);
this._goalFxPool.release(fx.node);
} }
} }
} }

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "5339a157-2cf5-421d-aaa9-6c77cd05ac9d", "uuid": "ce7b77b4-77a0-4795-a445-a0a05937487f",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "02952a26-2842-48a0-af34-f4997260add9", "uuid": "e3b5f6bb-b54b-406c-adeb-409fc6d91a31",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "1.1.0", "ver": "1.1.0",
"importer": "directory", "importer": "directory",
"imported": true, "imported": true,
"uuid": "7ccc8c31-3541-418f-98a0-c2b46990d9d2", "uuid": "6f3c79a3-69f3-449e-8b6e-1c4028c2f7f3",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": { "userData": {

View File

@ -42,6 +42,8 @@ export class Ball extends Component implements IPoolable {
private _collider: CircleCollider2D; private _collider: CircleCollider2D;
@property({ type: AudioClip, visible: true }) @property({ type: AudioClip, visible: true })
private _hitSound: AudioClip; private _hitSound: AudioClip;
@property({ type: AudioClip, visible: true })
private _ballThrowSound: AudioClip;
@property({ type: geometry.AnimationCurve, visible: true }) @property({ type: geometry.AnimationCurve, visible: true })
private _jumpCurve: geometry.AnimationCurve = new geometry.AnimationCurve(); private _jumpCurve: geometry.AnimationCurve = new geometry.AnimationCurve();
@ -91,7 +93,6 @@ export class Ball extends Component implements IPoolable {
) { ) {
if (this._isHit) return; if (this._isHit) return;
this._isHit = true; this._isHit = true;
console.log(contact.getTangentSpeed());
if (this._rigidBody.linearVelocity.length() >= 5) { if (this._rigidBody.linearVelocity.length() >= 5) {
let hitPoint = contact.getWorldManifold().points[0]; let hitPoint = contact.getWorldManifold().points[0];
@ -128,6 +129,7 @@ export class Ball extends Component implements IPoolable {
} }
public throwBall(force: Vec2) { public throwBall(force: Vec2) {
SoundManager.instance.playSfx(this._ballThrowSound);
this._collider.group = PhysicsGroup.BALL_THROWING; this._collider.group = PhysicsGroup.BALL_THROWING;
this._rigidBody.group = PhysicsGroup.BALL_THROWING; this._rigidBody.group = PhysicsGroup.BALL_THROWING;
this._rigidBody.applyLinearImpulseToCenter(force, true); this._rigidBody.applyLinearImpulseToCenter(force, true);

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "4630a499-ab09-45a9-be81-52dae28beb55", "uuid": "2b7c278f-afe7-4cb9-8b1e-ba6fd06040ac",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "87072b4f-2c3c-48b0-86a9-7d1dc17a750e", "uuid": "85a1dbb8-da01-4cac-81d4-1baa9ebf497f",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -2,7 +2,7 @@
"ver": "4.0.23", "ver": "4.0.23",
"importer": "typescript", "importer": "typescript",
"imported": true, "imported": true,
"uuid": "bbe27534-d4c2-4d1c-bd39-07c2605e319c", "uuid": "ca8a0c78-2894-4634-915f-311944852103",
"files": [], "files": [],
"subMetas": {}, "subMetas": {},
"userData": {} "userData": {}

View File

@ -1,4 +1,16 @@
import { _decorator, Component, Node, Prefab, Vec2, Vec3, randomRangeInt, CCInteger } from 'cc'; import {
_decorator,
Component,
Node,
Prefab,
Vec2,
Vec3,
randomRangeInt,
CCInteger,
Director,
director,
AudioClip,
} from 'cc';
import ObjectPool from '../Pool/ObjectPool'; import ObjectPool from '../Pool/ObjectPool';
import { Ball } from '../GamePlay/Ball'; import { Ball } from '../GamePlay/Ball';
import Utilities from '../Utilities'; import Utilities from '../Utilities';
@ -7,6 +19,7 @@ import { EventManger } from './EventManger';
import GameEvent from '../Events/GameEvent'; import GameEvent from '../Events/GameEvent';
import ScoreType from '../Enum/ScoreType'; import ScoreType from '../Enum/ScoreType';
import { FloatingText } from '../Environments/FloatingText'; import { FloatingText } from '../Environments/FloatingText';
import { SoundManager } from './SoundManager';
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@ccclass('GameManager') @ccclass('GameManager')
@ -27,12 +40,18 @@ export class GameManager extends Component {
private _ballSpawnPosition: Vec3; private _ballSpawnPosition: Vec3;
@property({ type: CCInteger, visible: true }) @property({ type: CCInteger, visible: true })
private _balls = 3; private _balls = 3;
@property({ type: AudioClip, visible: true })
private _startSound: AudioClip;
@property({ type: AudioClip, visible: true })
private _backgroundMusic: AudioClip;
private _ballPool: ObjectPool; private _ballPool: ObjectPool;
private _FloatingScorePool: ObjectPool; private _FloatingScorePool: ObjectPool;
private _gameState = GameState.Init; private _gameState: GameState;
public highestStreak: number; public get balls() {
return this._balls;
}
private _score = 0; private _score = 0;
private _isMultiBall = false; private _isMultiBall = false;
private _currentBallInGame = 0; private _currentBallInGame = 0;
@ -47,9 +66,8 @@ export class GameManager extends Component {
this._FloatingScorePool = new ObjectPool(this._floatingScoreText, 10, true); this._FloatingScorePool = new ObjectPool(this._floatingScoreText, 10, true);
} }
protected start() { protected start(): void {
this.spawnBall(true); this.changeGameState(GameState.Init);
this.play();
} }
private changeGameState(state: GameState) { private changeGameState(state: GameState) {
@ -82,6 +100,7 @@ export class GameManager extends Component {
} }
public spawnBall(throwBall: boolean): Ball { public spawnBall(throwBall: boolean): Ball {
SoundManager.instance.playSfx(this._startSound);
this.setCurrentBallInGame(1); this.setCurrentBallInGame(1);
const ball = this._ballPool.get(this.node, Ball); const ball = this._ballPool.get(this.node, Ball);
ball.node.setPosition(this._ballSpawnPosition); ball.node.setPosition(this._ballSpawnPosition);
@ -99,8 +118,9 @@ export class GameManager extends Component {
this.setCurrentBallInGame(-1); this.setCurrentBallInGame(-1);
if (this._currentBallInGame <= 0) { if (this._currentBallInGame <= 0) {
this._balls--; this._balls--;
EventManger.instance.emit(GameEvent.BallOut, null); EventManger.instance.emit(GameEvent.BallOut, this._balls);
if (this._balls === 0) { if (this._balls === 0) {
await Utilities.delay(1000);
this.changeGameState(GameState.GameOver); this.changeGameState(GameState.GameOver);
return; return;
} }
@ -118,12 +138,25 @@ export class GameManager extends Component {
} }
} }
public destroyEnviromentsObject(bonusScore: number, position: Vec3) { public destroyEnvironmentObject(bonusScore: number, position: Vec3) {
this.addScore(bonusScore, ScoreType.DestroyObject, position); this.addScore(bonusScore, ScoreType.DestroyObject, position);
} }
public play() { public async play() {
SoundManager.instance.playBGM(this._backgroundMusic, 0.5);
this.changeGameState(GameState.Playing); this.changeGameState(GameState.Playing);
await Utilities.delay(1000);
this.spawnBall(true);
}
public async restart() {
this._balls = 3;
this._score = 0;
this._currentBallInGame = 0;
this._isMultiBall = false;
this.changeGameState(GameState.Playing);
await Utilities.delay(1000);
this.spawnBall(true);
} }
public onRevive() { public onRevive() {

View File

@ -68,7 +68,7 @@ export class SoundManager extends Component {
} }
public playBGM(audio: AudioClip, volume = 1, loop = true) { public playBGM(audio: AudioClip, volume = 1, loop = true) {
if (this._audioSourceBgm) { if (!this._audioSourceBgm) {
this._audioSourceBgm = new SoundSource(); this._audioSourceBgm = new SoundSource();
this._audioSourceBgm.source = new AudioSource('audioSourceBgm'); this._audioSourceBgm.source = new AudioSource('audioSourceBgm');
this._audioSourceBgm.source.playOnAwake = false; this._audioSourceBgm.source.playOnAwake = false;

View File

@ -76,7 +76,7 @@ export class EndGameUIController extends Component {
switch (this.currentState) { switch (this.currentState) {
case PanelState.CompareScore: case PanelState.CompareScore:
this.TurnOffAllPanels(this.compareScorePnl); this.TurnOffAllPanels(this.compareScorePnl);
var totalScore = GameManager.instance.score + GameManager.instance.highestStreak * 2; var totalScore = GameManager.instance.score;
this.yourScoreTxt.string = 'Your score: ' + totalScore; this.yourScoreTxt.string = 'Your score: ' + totalScore;
/// Todo: set top score here /// Todo: set top score here

View File

@ -1,14 +1,65 @@
import { _decorator, Component, Node } from 'cc'; import { _decorator, Component, Label, Node, tween } from 'cc';
import { EventManger } from '../Manager/EventManger';
import GameEvent from '../Events/GameEvent';
import ScoreType from '../Enum/ScoreType';
import Utilities from '../Utilities';
import GameState from '../Enum/GameState';
import { GameManager } from '../Manager/GameManager';
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@ccclass('UIController') @ccclass('UIController')
export class UIController extends Component { export class UIController extends Component {
start() { @property({ type: Label, visible: true })
private _scoreLabel: Label;
@property({ type: Label, visible: true })
private _ballLabel: Label;
@property({ type: Label, visible: true })
private _goalLabel: Label;
@property({ type: Label, visible: true })
private _resultLabel: Label;
@property({ type: Node, visible: true })
private _startPanel: Node;
@property({ type: Node, visible: true })
private _overPanel: Node;
protected onLoad(): void {
EventManger.instance.on(GameEvent.Score, this.onScore, this);
EventManger.instance.on(GameEvent.BallOut, this.onBallOut, this);
EventManger.instance.on(GameEvent.GameStateChange, this.onGameStateChange, this);
this._goalLabel.string = '';
} }
update(deltaTime: number) { private async onScore(score: number, type: ScoreType) {
this._scoreLabel.string = `Score: ${score}`;
if (type == ScoreType.Goal) {
this._goalLabel.string = 'Goal!!';
await Utilities.delay(1000);
this._goalLabel.string = '';
}
}
private async onBallOut(balls: number) {
this._ballLabel.string = `Ball ${balls}`;
this._goalLabel.string = 'Ball Out!!';
await Utilities.delay(1000);
this._goalLabel.string = '';
}
private onGameStateChange(state: GameState) {
switch (state) {
case GameState.Init:
this._startPanel.active = true;
break;
case GameState.Playing:
this._scoreLabel.string = 'Score: 0';
this._ballLabel.string = `Ball: ${GameManager.instance.balls}`;
this._startPanel.active = false;
this._overPanel.active = false;
break;
case GameState.GameOver:
this._overPanel.active = true;
this._resultLabel.string = this._scoreLabel.string;
break;
}
} }
} }

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "fc66df28-6c8c-4915-adbd-5a3da652cfc6",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "1f602e14-2769-4903-b4d2-b0977eeaf36b",
"files": [
".json",
".mp3"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

View File

@ -11,7 +11,7 @@
"6c48a": { "6c48a": {
"importer": "texture", "importer": "texture",
"uuid": "3edb092d-e894-4a3f-8a19-d1dcb1c80ff8@6c48a", "uuid": "3edb092d-e894-4a3f-8a19-d1dcb1c80ff8@6c48a",
"displayName": "Goal", "displayName": "goal",
"id": "6c48a", "id": "6c48a",
"name": "texture", "name": "texture",
"userData": { "userData": {
@ -35,7 +35,7 @@
"f9941": { "f9941": {
"importer": "sprite-frame", "importer": "sprite-frame",
"uuid": "3edb092d-e894-4a3f-8a19-d1dcb1c80ff8@f9941", "uuid": "3edb092d-e894-4a3f-8a19-d1dcb1c80ff8@f9941",
"displayName": "Goal", "displayName": "goal",
"id": "f9941", "id": "f9941",
"name": "spriteFrame", "name": "spriteFrame",
"userData": { "userData": {