Level Proto Done, Pool done

This commit is contained in:
Sewmina Dilshan 2023-07-19 22:41:46 +05:30
parent 6918aec205
commit 7ad61c714d
16 changed files with 1489 additions and 135 deletions

File diff suppressed because it is too large Load Diff

View File

@ -12,4 +12,9 @@ public class Range{
public float GetRandom(){
return Random.Range(min,max);
}
public override string ToString()
{
return $"min:{min}, max:{max}";
}
}

View File

@ -8,7 +8,7 @@ public class LevelGeneratorV2 : MonoBehaviour
public LineRenderer debugLine;
[SerializeField]public Range amplitude = new Range(1,2);
[SerializeField]public Range distance = new Range(2,5);
[SerializeField]public Range height = new Range(3,6);
[SerializeField]public Range[] heights;
public float frequency = 0.1f;
@ -18,6 +18,15 @@ public class LevelGeneratorV2 : MonoBehaviour
List<SpriteShapeController> pooled,borrowed = new List<SpriteShapeController>();
public float tangentSmoothness = 1.5f;
float space =0;
[Header("Asteroids")]
public float asteroidGenerationHeightThreshold =6;
public GameObject[] asteroidPrefabs;
public Range asteroidScale = new Range(1,5);
public Range asteroidSpeed = new Range(0.1f,0.5f);
public Range asteroidTorque = new Range(0.1f,0.5f);
public Range asteroidsPerBlock = new Range(4,8);
// Start is called before the first frame update
@ -32,35 +41,56 @@ public class LevelGeneratorV2 : MonoBehaviour
pooled = new List<SpriteShapeController>();
borrowed = new List<SpriteShapeController>();
foreach(SpriteShapeController shape in shapes){pooled.Add(shape);}
GenerateNext(amount:100);
GenerateNext();
}
// Update is called once per frame
void Update()
{
if(PlayerController.position.x > lastStart){
if(PlayerController.position.x > lastStart + 50){
GenerateNext();
Debug.Log("Generating Next");
}
}
float lastStart;
List<Vector3> points = new List<Vector3>();
float a;
void GenerateNext(int amount = 100){
public float heightSmoothness = 0.1f;
void GenerateNext(int amount = 50){
Range height = heights[Random.Range(0,heights.Length)];
Debug.Log(height);
if(space <= 0){space = height.GetRandom();}
space = Mathf.Lerp(space, height.GetRandom(), heightSmoothness);
if(points.Count <= 0){points.Add(new Vector3(0,0));}
int startIndex = points.Count-1;
lastStart = points[startIndex].x;
int asteroids = 1;
int asteroidsLimit = (int)asteroidsPerBlock.GetRandom();
for(int i=0; i < amount; i++){
a+= frequency;
float y = Mathf.Sin(a) * amplitude.GetRandom();
float x = points[points.Count-1].x + distance.GetRandom();
points.Add(new Vector3(x,y));
if(asteroids < Mathf.CeilToInt(i / (amount/(float)asteroidsLimit)) && height.max > asteroidGenerationHeightThreshold){
// Rigidbody2D rb = Instantiate(asteroidPrefabs[Random.Range(0,asteroidPrefabs.Length)], new Vector3(x,y),Quaternion.identity).GetComponent<Rigidbody2D>();
Rigidbody2D rb = ObjectPool.Spawn(asteroidPrefabs[Random.Range(0,asteroidPrefabs.Length)], new Vector3(x,y)).GetComponent<Rigidbody2D>();
borrowedAsteroids.Add(rb.gameObject);
rb.AddForce(new Vector2(asteroidSpeed.GetRandom(), asteroidSpeed.GetRandom()));
rb.AddTorque(asteroidTorque.GetRandom());
rb.transform.localScale = rb.transform.localScale * asteroidScale.GetRandom();
asteroids++;
}
}
CleanupBorrowed();
//Bottom Terrain
SpriteShapeController bot_controller = pooled[0];
borrowed.Add(pooled[0]);
pooled.RemoveAt(0);
@ -68,23 +98,27 @@ public class LevelGeneratorV2 : MonoBehaviour
bot_controller.spline.Clear();
InsertNewPoint(bot_controller, points[startIndex]- new Vector3(0, 50));
for(int i=startIndex; i < points.Count; i++){
InsertNewPoint(bot_controller, points[i] - new Vector3(0, height.GetRandom()));
InsertNewPoint(bot_controller, points[i] - new Vector3(0, space));
}
InsertNewPoint(bot_controller, points[points.Count-1] - new Vector3(0,50));
bot_controller.GetComponent<PolygonCollider2D>().enabled=true;
bot_controller.transform.position = Vector3.zero;
bot_controller.gameObject.SetActive(false);
bot_controller.gameObject.SetActive(true);
//Top Terrain
SpriteShapeController top_controller = pooled[0];
borrowed.Add(pooled[0]);
pooled.RemoveAt(0);
top_controller.spline.Clear();
InsertNewPoint(top_controller, points[startIndex]+ new Vector3(0, 50));
for(int i=startIndex; i < points.Count; i++){
InsertNewPoint(top_controller, points[i] + new Vector3(0, height.GetRandom()));
InsertNewPoint(top_controller, points[i] + new Vector3(0, space));
}
InsertNewPoint(top_controller, points[points.Count-1] + new Vector3(0,50));
top_controller.GetComponent<PolygonCollider2D>().enabled=true;
top_controller.transform.position = Vector3.zero;
top_controller.gameObject.SetActive(false);
top_controller.gameObject.SetActive(true);
@ -92,13 +126,21 @@ public class LevelGeneratorV2 : MonoBehaviour
UpdateLine();
}
public List<GameObject> borrowedAsteroids = new List<GameObject>();
void CleanupBorrowed(){
for(int i= borrowed.Count-1; i > 0; i--){
if(borrowed[i].spline.GetPosition(borrowed[i].spline.GetPointCount()-1).x < PlayerController.position.x -30){
pooled.Add(borrowed[i]);
borrowed[i].GetComponent<PolygonCollider2D>().enabled = false;
borrowed.RemoveAt(i);
}
}
for(int i=borrowedAsteroids.Count-1; i> 0; i--){
if(borrowedAsteroids[i].transform.position.x + 20 < PlayerController.position.x){
ObjectPool.Despawn(borrowedAsteroids[i]);
borrowedAsteroids.RemoveAt(i);
}
}
}
void UpdateLine(){

View File

@ -0,0 +1,48 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public static ObjectPool instance;
public static Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>();
void Awake(){
pool = new Dictionary<string, List<GameObject>>();
instance= this;
}
public static GameObject Spawn(GameObject obj, Vector3 position){
if(pool.ContainsKey(obj.name)){
// Debug.Log($"Has key : {pool[obj.name].Count}");
//use from pool
if(pool[obj.name].Count <=0){
GameObject go = Instantiate(obj, position, Quaternion.identity);
return go;
}else{
GameObject chosen = pool[obj.name][0].gameObject;
chosen.gameObject.SetActive(true);
chosen.transform.position = position;
pool[obj.name].RemoveAt(0);
// Debug.Log("Reusing");
return chosen;
}
}else{
GameObject go = Instantiate(obj, position, Quaternion.identity);
return go;
}
}
public static void Despawn(GameObject obj){
string objName = obj.name.Replace("(Clone)","");
if(!pool.ContainsKey(objName)){
pool.Add(objName, new List<GameObject>());
}
pool[objName].Add(obj);
obj.SetActive(false);
// Debug.Log($"Adding {objName} back to pool, " + pool[objName].Count);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d98f34a73480bb4739a3c4e7e95afc19
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -27,9 +27,14 @@ public class PlayerController : MonoBehaviour
}
// float t2=0;
// Update is called once per frame
void FixedUpdate()
{
// if(t2 < 1){
// t2+=Time.deltaTime;
// return;
// }
transform.Translate(new Vector3(movingSpeed,0), Space.World);
input = Mathf.Lerp(input, dif / inputRange, inputSmoothness);
@ -37,7 +42,7 @@ public class PlayerController : MonoBehaviour
transform.Translate(new Vector3(0,input * verticalSpeed), Space.World);
transform.localEulerAngles = new Vector3(0,0,input * rotationRange);
txtScore.text = transform.position.x.ToString("n0");
txtScore.text = (transform.position.x < 0) ? "" : transform.position.x.ToString("n0");
movingSpeed += speedIncremental * Time.deltaTime;

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 0c4f87b7a900b34fdaf422ecb711ddcf
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 34318c68a5559633d985378e20f5b520
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 1060fc4c748557db48a42bfcf3fb9c71
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: bce168c6cbaba91828db46bf9116fbf3
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,11 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!62 &6200000
PhysicsMaterial2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: asteroid
friction: 0
bounciness: 1

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 974ddea486cdf95f7aedbce5e6db4edc
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 6200000
userData:
assetBundleName:
assetBundleVariant: