feat: testing FishNet RigidBody prediction, Ship logic refactor

This commit is contained in:
Jakob Feldmann 2024-05-20 18:56:32 +02:00
parent 2879e82429
commit fc7d9a3004
137 changed files with 59074 additions and 1727 deletions

View File

@ -13,8 +13,8 @@ MonoBehaviour:
m_Name: Simulator Provider Settings m_Name: Simulator Provider Settings
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Logging: 1 m_Logging: 1
m_AutomaticPerformanceModeEnabled: 1 m_AutomaticPerformanceModeEnabled: 0
m_EnableBoostOnStartup: 1 m_EnableBoostOnStartup: 0
m_StatsLoggingFrequencyInFrames: 30 m_StatsLoggingFrequencyInFrames: 30
m_IndexerSettings: m_IndexerSettings:
m_Active: 1 m_Active: 1

View File

@ -13,18 +13,17 @@ MonoBehaviour:
m_Name: DefaultPrefabObjects m_Name: DefaultPrefabObjects
m_EditorClassIdentifier: m_EditorClassIdentifier:
_prefabs: _prefabs:
- {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3}
- {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
- {fileID: 4320456058255827552, guid: 65cd4fa5e050652409dd9b062365c7e8, type: 3} - {fileID: 4320456058255827552, guid: 65cd4fa5e050652409dd9b062365c7e8, type: 3}
- {fileID: 394654179909484550, guid: 9f3e27e33167d704e941e42ded557111, type: 3} - {fileID: 394654179909484550, guid: 9f3e27e33167d704e941e42ded557111, type: 3}
- {fileID: 394654179909484550, guid: 5934082513feac04a9b875fc86abe70b, type: 3} - {fileID: 394654179909484550, guid: 5934082513feac04a9b875fc86abe70b, type: 3}
- {fileID: 394654179909484550, guid: 46f84e56340e83e4ba7c6abbccd2ae3f, type: 3} - {fileID: 394654179909484550, guid: 46f84e56340e83e4ba7c6abbccd2ae3f, type: 3}
- {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3}
- {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
- {fileID: 6696145061262954739, guid: 6bef8667f8847d440b83722af55e8d58, type: 3}
- {fileID: 8475222101369129519, guid: 8cf33e8e99a9b0c4c8f29ff725650de6, type: 3} - {fileID: 8475222101369129519, guid: 8cf33e8e99a9b0c4c8f29ff725650de6, type: 3}
- {fileID: 4512293259955182956, guid: 44611030e61220d42ab7c37ba3c0ea92, type: 3} - {fileID: 4512293259955182956, guid: 44611030e61220d42ab7c37ba3c0ea92, type: 3}
- {fileID: 4512293259955182956, guid: 0d6d0f48b03b17f49a6340103cd9b9d0, type: 3} - {fileID: 4512293259955182956, guid: 0d6d0f48b03b17f49a6340103cd9b9d0, type: 3}
- {fileID: 4512293259955182956, guid: f32d4c19de900e64cb73cedcb8ba6f70, type: 3} - {fileID: 4512293259955182956, guid: f32d4c19de900e64cb73cedcb8ba6f70, type: 3}
- {fileID: 4512293259955182956, guid: 300370bdf7819da41937e0beac65b32c, type: 3} - {fileID: 4512293259955182956, guid: 300370bdf7819da41937e0beac65b32c, type: 3}
- {fileID: 611616139817875448, guid: bf5f023b4017a5e41a9815ec5745df3d, type: 3} - {fileID: 611616139817875448, guid: bf5f023b4017a5e41a9815ec5745df3d, type: 3}
- {fileID: 201277550, guid: 5b712878ecece354ba4ffb026c0a221c, type: 3}
- {fileID: 201277550, guid: 8ef354bfc16ca8a459074c3fa9b6727e, type: 3}
- {fileID: 8192566354860284824, guid: 6331b3542e64a564c81bc39cedf70c8d, type: 3} - {fileID: 8192566354860284824, guid: 6331b3542e64a564c81bc39cedf70c8d, type: 3}

View File

@ -107,7 +107,7 @@ Material:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _BaseColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} - _BaseColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0}
- _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0} - _CameraFadeParams: {r: 0, g: Infinity, b: 0, a: 0}
- _Color: {r: 0, g: 0.09206629, b: 1, a: 1} - _Color: {r: 0.13830546, g: 0.39991698, b: 0.6603774, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Offset: {r: 0, g: 0, b: 0, a: 0} - _Offset: {r: 0, g: 0, b: 0, a: 0}
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 148891fa06cd3324e94f99af935e05f1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 83319fcfeef06cf4288182309b1387d0
NativeFormatImporter:
userData:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 25381a5e43841e943a27b043442b2b4d
NativeFormatImporter:
userData:

View File

@ -0,0 +1,319 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &100000
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 400000}
- component: {fileID: 3300000}
- component: {fileID: 2300000}
m_Layer: 0
m_Name: Quad
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400000
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100000}
m_LocalRotation: {x: 0, y: -0.7071068, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0.7987106}
m_LocalScale: {x: 2.2, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 400004}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0}
--- !u!33 &3300000
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100000}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &2300000
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100000}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 931f12332f881b342980bc9900f15441, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!1 &100002
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 400002}
- component: {fileID: 3300002}
- component: {fileID: 2300002}
m_Layer: 0
m_Name: Quad
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400002
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100002}
m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5}
m_LocalPosition: {x: 0, y: 0, z: 0.7987106}
m_LocalScale: {x: 2.2, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 400004}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 90}
--- !u!33 &3300002
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100002}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &2300002
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100002}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 0
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 931f12332f881b342980bc9900f15441, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!1 &100004
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 400004}
- component: {fileID: 11400000}
- component: {fileID: 11400002}
m_Layer: 0
m_Name: seeker_bolt_muzzle_example
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400004
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100004}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 400002}
- {fileID: 400000}
- {fileID: 400006}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100004}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: af19da7458dc9174699d0b34f404eafc, type: 3}
m_Name:
m_EditorClassIdentifier:
DespawnDelay: 0.05
DespawnOnMouseUp: 0
--- !u!114 &11400002
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100004}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a5df3c5f0444ba74991107c0d882530e, type: 3}
m_Name:
m_EditorClassIdentifier:
RandomScale: 1
RandomRotation: 1
MinScale: 0.8
MaxScale: 1.1
MinRotation: -360
MaxRotaion: 360
--- !u!1 &100006
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 400006}
- component: {fileID: 10800000}
m_Layer: 0
m_Name: Point light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &400006
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100006}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0.6052952}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 400004}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!108 &10800000
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100006}
m_Enabled: 1
serializedVersion: 10
m_Type: 2
m_Shape: 0
m_Color: {r: 1, g: 0.82941175, b: 0.5735294, a: 1}
m_Intensity: 1.2311152
m_Range: 250
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 1
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 0.536
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 1
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_ShadowRadius: 0
m_ShadowAngle: 0

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 235092330dd93ce4ab3f64b4b4b9c354
NativeFormatImporter:
userData:

View File

@ -29,9 +29,9 @@ MonoBehaviour:
- {fileID: 400000, guid: e7b84dec6cdbfb646a33fd06b85cf64e, type: 3} - {fileID: 400000, guid: e7b84dec6cdbfb646a33fd06b85cf64e, type: 3}
- {fileID: 400000, guid: ec0fb8bef2fb8a5459c55c3700521b70, type: 3} - {fileID: 400000, guid: ec0fb8bef2fb8a5459c55c3700521b70, type: 3}
- {fileID: 400010, guid: 2e92e894e0311c14c87f9544b2c88693, type: 3} - {fileID: 400010, guid: 2e92e894e0311c14c87f9544b2c88693, type: 3}
- {fileID: 400000, guid: 49ca46ce7082ccf4c91329cd9b7c4b61, type: 3} - {fileID: 400000, guid: 83319fcfeef06cf4288182309b1387d0, type: 3}
- {fileID: 400010, guid: 762a17aff08aa1f40ac72b27c15fe2d1, type: 3} - {fileID: 400010, guid: 25381a5e43841e943a27b043442b2b4d, type: 3}
- {fileID: 400004, guid: 43a8e47b31adb9a47b81c4653b412e5c, type: 3} - {fileID: 400004, guid: 235092330dd93ce4ab3f64b4b4b9c354, type: 3}
- {fileID: 400000, guid: 5f10243d9632db04bb987838fb3b36b7, type: 3} - {fileID: 400000, guid: 5f10243d9632db04bb987838fb3b36b7, type: 3}
- {fileID: 400000, guid: 12e7c1b739173c946b6fa3d40e9f62d1, type: 3} - {fileID: 400000, guid: 12e7c1b739173c946b6fa3d40e9f62d1, type: 3}
- {fileID: 400004, guid: a980d2b7788c0ef489f3c79f44da79e1, type: 3} - {fileID: 400004, guid: a980d2b7788c0ef489f3c79f44da79e1, type: 3}

View File

@ -1,6 +1,7 @@
using UnityEngine; using UnityEngine;
using System.Collections; using System.Collections;
using System; using System;
using System.Linq;
namespace FORGE3D namespace FORGE3D
{ {
@ -60,18 +61,18 @@ namespace FORGE3D
public Transform shotGunImpact; public Transform shotGunImpact;
public float shotGunOffset; public float shotGunOffset;
[Header("Seeker")] public Transform seekerProjectile; [Header("Seeker")] public Transform seekerProjectile;
public Transform seekerMuzzle; public Transform seekerMuzzle;
public Transform seekerImpact; public Transform seekerImpact;
public float seekerOffset; public float seekerOffset;
[Header("Rail gun")] public Transform railgunBeam; [Header("Rail gun")] public Transform railgunBeam;
public Transform railgunMuzzle; public Transform railgunMuzzle;
public Transform railgunImpact; public Transform railgunImpact;
public float railgunOffset; public float railgunOffset;
[Header("Plasma gun")] public Transform plasmagunProjectile; [Header("Plasma gun")] public Transform plasmagunProjectile;
public Transform plasmagunMuzzle; public Transform plasmagunMuzzle;
public Transform plasmagunImpact; public Transform plasmagunImpact;
public float plasmaGunOffset; public float plasmaGunOffset;
@ -346,26 +347,34 @@ namespace FORGE3D
private void Seeker() private void Seeker()
{ {
var offset = Quaternion.Euler(UnityEngine.Random.onUnitSphere); var offset = Quaternion.Euler(UnityEngine.Random.onUnitSphere);
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerMuzzle, TurretSocket[curSocket].position, seekerMuzzle =
TurretSocket[curSocket].rotation, TurretSocket[curSocket]); F3DPoolManager.Pools["GeneratedPool"].templates.First(t => t.name == seekerMuzzle.name);
var newGO = seekerProjectile =
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerProjectile, TurretSocket[curSocket].position, F3DPoolManager.Pools["GeneratedPool"].templates.First(t => t.name == seekerProjectile.name);
offset * TurretSocket[curSocket].rotation, null).gameObject;
var proj = newGO.GetComponent<F3DProjectile>();
if (proj)
{
proj.SetOffset(seekerOffset);
}
F3DAudioController.instance.SeekerShot(TurretSocket[curSocket].position);
AdvanceSocket(); F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerMuzzle, TurretSocket[curSocket].position,
TurretSocket[curSocket].rotation, TurretSocket[curSocket]);
var newGO =
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerProjectile, TurretSocket[curSocket].position,
offset * TurretSocket[curSocket].rotation, null).gameObject;
var proj = newGO.GetComponent<F3DProjectile>();
if (proj)
{
proj.SetOffset(seekerOffset);
}
F3DAudioController.instance.SeekerShot(TurretSocket[curSocket].position);
AdvanceSocket();
} }
// Spawn seeker weapon impact // Spawn seeker weapon impact
public void SeekerImpact(Vector3 pos) public void SeekerImpact(Vector3 pos)
{ {
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerImpact, pos, Quaternion.identity, null); seekerImpact =
F3DAudioController.instance.SeekerHit(pos); F3DPoolManager.Pools["GeneratedPool"].templates.First(t => t.name == seekerImpact.name);
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerImpact, pos, Quaternion.identity, null);
F3DAudioController.instance.SeekerHit(pos);
} }
// Fire rail gun weapon // Fire rail gun weapon

View File

@ -25,12 +25,13 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 100000} m_GameObject: {fileID: 100000}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!82 &8200000 --- !u!82 &8200000
AudioSource: AudioSource:
@ -44,7 +45,7 @@ AudioSource:
OutputAudioMixerGroup: {fileID: 0} OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0} m_audioClip: {fileID: 0}
m_PlayOnAwake: 0 m_PlayOnAwake: 0
m_Volume: 1 m_Volume: 0.5
m_Pitch: 1 m_Pitch: 1
Loop: 0 Loop: 0
Mute: 0 Mute: 0

22
Assets/FishNet.Config.XML Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<ConfigurationData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Loaded>true</Loaded>
<PrefabGenerator>
<Enabled>true</Enabled>
<LogToConsole>true</LogToConsole>
<FullRebuild>false</FullRebuild>
<SpawnableOnly>true</SpawnableOnly>
<SaveChanges>true</SaveChanges>
<DefaultPrefabObjectsPath>Assets\DefaultPrefabObjects.asset</DefaultPrefabObjectsPath>
<SearchScope>0</SearchScope>
<ExcludedFolders />
<IncludedFolders />
</PrefabGenerator>
<CodeStripping>
<IsBuilding>false</IsBuilding>
<IsDevelopment>false</IsDevelopment>
<IsHeadless>false</IsHeadless>
<StripReleaseBuilds>false</StripReleaseBuilds>
<StrippingType>0</StrippingType>
</CodeStripping>
</ConfigurationData>

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 78426568fe449ce44b9aa64cef5c45df
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: baec5a367bebced4da1b56dbcedde312 guid: f1525dbf8ebd59e438b504fa19c4fd6c
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@ -1275,7 +1275,7 @@ namespace FishNet.Serializing
if (collection == null || collection.Length < count) if (collection == null || collection.Length < count)
collection = new T[count]; collection = new T[count];
/* Subtract count total minus 1 /* Subtract count total minus 1
* from starting tick. This sets the tick to what the first entry would be. * from starting tick. This sets the tick to what the first entry would be.
* EG packet came in as tick 100, so that was passed as tick. * EG packet came in as tick 100, so that was passed as tick.
* if there are 3 replicates then 2 would be subtracted (count - 1). * if there are 3 replicates then 2 would be subtracted (count - 1).
@ -1284,9 +1284,9 @@ namespace FishNet.Serializing
* newest as 98, 99, 100. Which is the correct result. In order for this to * newest as 98, 99, 100. Which is the correct result. In order for this to
* work properly past replicates cannot skip ticks. This will be ensured * work properly past replicates cannot skip ticks. This will be ensured
* in another part of the code. */ * in another part of the code. */
tick -= (uint)(count) - 1); tick -= (uint)(count) - 1;
int fullPackType = ReadByte(); int fullPackType = ReadByte();
//Read once and apply to all entries. //Read once and apply to all entries.
if (fullPackType > 0) if (fullPackType > 0)
{ {

View File

@ -122,7 +122,7 @@ Material:
- _QueueOffset: 0 - _QueueOffset: 0
- _ReceiveShadows: 0 - _ReceiveShadows: 0
- _Shininess: 0 - _Shininess: 0
- _Smoothness: 0.5 - _Smoothness: 0.493
- _SmoothnessSource: 0 - _SmoothnessSource: 0
- _SmoothnessTextureChannel: 0 - _SmoothnessTextureChannel: 0
- _SpecSource: 0 - _SpecSource: 0
@ -133,8 +133,8 @@ Material:
- _WorkflowMode: 1 - _WorkflowMode: 1
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 0, g: 0, b: 0, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0, g: 0, b: 0, a: 1}
- _EmissionColor: {r: 5.3403134, g: 0.24957718, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0.08780331, b: 0.3882353, a: 1}
- _SpecColor: {r: 0.19999993, g: 0.19999993, b: 0.19999993, a: 0.5} - _SpecColor: {r: 0, g: 0, b: 0, a: 0.493}
m_BuildTextureStacks: [] m_BuildTextureStacks: []

View File

@ -0,0 +1,31 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!200 &20000000
ShaderVariantCollection:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Shader Collection
m_Shaders:
- first: {fileID: -6465566751694194690, guid: a69f632f7605c4347b0ac15ec7b2d967, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: 676c73ca84fc6064085384deaab685d0, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: 04835c7ab02d8964881cf192fef1af4c, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: 55f71b482ad1a8a4bbe1290d8bb76e6e, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: 89754397a45ebd242a4116119466e163, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: b70c29244fb72de4ebed187b5a64fca3, type: 3}
second:
variants: []
- first: {fileID: -6465566751694194690, guid: 260ae9255e2be314db6940dc91f14e14, type: 3}
second:
variants: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cd39a7d3b77887345bffd293462e6b51
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 20000000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,13 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!200 &20000000
ShaderVariantCollection:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: URP PBR Ripples
m_Shaders:
- first: {fileID: 4800000, guid: 8a7f26cb4a0b4d446b2ca031d3ff37df, type: 3}
second:
variants: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e50b5a41e8c79fc46b134207b0323580
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 20000000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -21,16 +21,19 @@ Material:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: defaultMat m_Name: defaultMat
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
m_Parent: {fileID: 0} m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0 m_ModifiedSerializedProperties: 0
m_ValidKeywords: [] m_ValidKeywords:
- _RECEIVE_SHADOWS_OFF
- _SPECULAR_COLOR
m_InvalidKeywords: [] m_InvalidKeywords: []
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: 2000
stringTagMap: {} stringTagMap:
RenderType: Opaque
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties: m_LockedProperties:
m_SavedProperties: m_SavedProperties:
@ -110,23 +113,27 @@ Material:
- _EnvironmentReflections: 1 - _EnvironmentReflections: 1
- _GlossMapScale: 0 - _GlossMapScale: 0
- _Glossiness: 0 - _Glossiness: 0
- _GlossinessSource: 0
- _GlossyReflections: 0 - _GlossyReflections: 0
- _Metallic: 0 - _Metallic: 0
- _OcclusionStrength: 1 - _OcclusionStrength: 1
- _Parallax: 0.005 - _Parallax: 0.005
- _QueueOffset: 0 - _QueueOffset: 0
- _ReceiveShadows: 1 - _ReceiveShadows: 0
- _Shininess: 0
- _Smoothness: 0.5 - _Smoothness: 0.5
- _SmoothnessSource: 0
- _SmoothnessTextureChannel: 0 - _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1 - _SpecSource: 0
- _SpecularHighlights: 0
- _SrcBlend: 1 - _SrcBlend: 1
- _SrcBlendAlpha: 1 - _SrcBlendAlpha: 1
- _Surface: 0 - _Surface: 0
- _WorkflowMode: 1 - _WorkflowMode: 0
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} - _BaseColor: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1}
- _Color: {r: 0.8, g: 0.8, b: 0.8, a: 1} - _Color: {r: 0.9622641, g: 0.9622641, b: 0.9622641, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _SpecColor: {r: 0.19999993, g: 0.19999993, b: 0.19999993, a: 0.5}
m_BuildTextureStacks: [] m_BuildTextureStacks: []

8
Assets/ParrelSync.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 711bbd1e36ca42a4bad871eb6a3de1bc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a31ea7d0315594440839cdb0db6bc411
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b14e706b1e7cb044b23837e8a70cad9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
using UnityEditor;
namespace ParrelSync
{
[InitializeOnLoad]
public class EditorQuit
{
/// <summary>
/// Is editor being closed
/// </summary>
static public bool IsQuiting { get; private set; }
static void Quit()
{
IsQuiting = true;
}
static EditorQuit()
{
IsQuiting = false;
EditorApplication.quitting += Quit;
}
}
}

View File

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

View File

@ -0,0 +1,34 @@
using UnityEditor;
using UnityEngine;
namespace ParrelSync
{
/// <summary>
/// For preventing assets being modified from the clone instance.
/// </summary>
public class ParrelSyncAssetModificationProcessor : UnityEditor.AssetModificationProcessor
{
public static string[] OnWillSaveAssets(string[] paths)
{
if (ClonesManager.IsClone() && Preferences.AssetModPref.Value)
{
if (paths != null && paths.Length > 0 && !EditorQuit.IsQuiting)
{
EditorUtility.DisplayDialog(
ClonesManager.ProjectName + ": Asset modifications saving detected and blocked",
"Asset modifications saving are blocked in the clone instance. \n\n" +
"This is a clone of the original project. \n" +
"Making changes to asset files via the clone editor is not recommended. \n" +
"Please use the original editor window if you want to make changes to the project files.",
"ok"
);
foreach (var path in paths)
{
Debug.Log("Attempting to save " + path + " are blocked.");
}
}
return new string[0] { };
}
return paths;
}
}
}

View File

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

View File

@ -0,0 +1,692 @@
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEditor;
using System.Linq;
using System.IO;
using Debug = UnityEngine.Debug;
namespace ParrelSync
{
/// <summary>
/// Contains all required methods for creating a linked clone of the Unity project.
/// </summary>
public class ClonesManager
{
/// <summary>
/// Name used for an identifying file created in the clone project directory.
/// </summary>
/// <remarks>
/// (!) Do not change this after the clone was created, because then connection will be lost.
/// </remarks>
public const string CloneFileName = ".clone";
/// <summary>
/// Suffix added to the end of the project clone name when it is created.
/// </summary>
/// <remarks>
/// (!) Do not change this after the clone was created, because then connection will be lost.
/// </remarks>
public const string CloneNameSuffix = "_clone";
public const string ProjectName = "ParrelSync";
/// <summary>
/// The maximum number of clones
/// </summary>
public const int MaxCloneProjectCount = 10;
/// <summary>
/// Name of the file for storing clone's argument.
/// </summary>
public const string ArgumentFileName = ".parrelsyncarg";
/// <summary>
/// Default argument of the new clone
/// </summary>
public const string DefaultArgument = "client";
#region Managing clones
/// <summary>
/// Creates clone from the project currently open in Unity Editor.
/// </summary>
/// <returns></returns>
public static Project CreateCloneFromCurrent()
{
if (IsClone())
{
Debug.LogError("This project is already a clone. Cannot clone it.");
return null;
}
string currentProjectPath = ClonesManager.GetCurrentProjectPath();
return ClonesManager.CreateCloneFromPath(currentProjectPath);
}
/// <summary>
/// Creates clone of the project located at the given path.
/// </summary>
/// <param name="sourceProjectPath"></param>
/// <returns></returns>
public static Project CreateCloneFromPath(string sourceProjectPath)
{
Project sourceProject = new Project(sourceProjectPath);
string cloneProjectPath = null;
//Find available clone suffix id
for (int i = 0; i < MaxCloneProjectCount; i++)
{
string originalProjectPath = ClonesManager.GetCurrentProject().projectPath;
string possibleCloneProjectPath = originalProjectPath + ClonesManager.CloneNameSuffix + "_" + i;
if (!Directory.Exists(possibleCloneProjectPath))
{
cloneProjectPath = possibleCloneProjectPath;
break;
}
}
if (string.IsNullOrEmpty(cloneProjectPath))
{
Debug.LogError("The number of cloned projects has reach its limit. Limit: " + MaxCloneProjectCount);
return null;
}
Project cloneProject = new Project(cloneProjectPath);
Debug.Log("Start cloning project, original project: " + sourceProject + ", clone project: " + cloneProject);
ClonesManager.CreateProjectFolder(cloneProject);
//Copy Folders
Debug.Log("Library copy: " + cloneProject.libraryPath);
ClonesManager.CopyDirectoryWithProgressBar(sourceProject.libraryPath, cloneProject.libraryPath,
"Cloning Project Library '" + sourceProject.name + "'. ");
Debug.Log("Packages copy: " + cloneProject.libraryPath);
ClonesManager.CopyDirectoryWithProgressBar(sourceProject.packagesPath, cloneProject.packagesPath,
"Cloning Project Packages '" + sourceProject.name + "'. ");
//Link Folders
ClonesManager.LinkFolders(sourceProject.assetPath, cloneProject.assetPath);
ClonesManager.LinkFolders(sourceProject.projectSettingsPath, cloneProject.projectSettingsPath);
ClonesManager.LinkFolders(sourceProject.autoBuildPath, cloneProject.autoBuildPath);
ClonesManager.LinkFolders(sourceProject.localPackages, cloneProject.localPackages);
//Optional Link Folders
var optionalLinkPaths = Preferences.OptionalSymbolicLinkFolders.GetStoredValue();
var projectSettings = ParrelSyncProjectSettings.GetSerializedSettings();
var projectSettingsProperty = projectSettings.FindProperty("m_OptionalSymbolicLinkFolders");
if (projectSettingsProperty is { isArray: true, arrayElementType: "string" })
{
for (var i = 0; i < projectSettingsProperty.arraySize; ++i)
{
optionalLinkPaths.Add(projectSettingsProperty.GetArrayElementAtIndex(i).stringValue);
}
}
foreach (var path in optionalLinkPaths)
{
var sourceOptionalPath = sourceProjectPath + path;
var cloneOptionalPath = cloneProjectPath + path;
LinkFolders(sourceOptionalPath, cloneOptionalPath);
}
ClonesManager.RegisterClone(cloneProject);
return cloneProject;
}
/// <summary>
/// Registers a clone by placing an identifying ".clone" file in its root directory.
/// </summary>
/// <param name="cloneProject"></param>
private static void RegisterClone(Project cloneProject)
{
/// Add clone identifier file.
string identifierFile = Path.Combine(cloneProject.projectPath, ClonesManager.CloneFileName);
File.Create(identifierFile).Dispose();
//Add argument file with default argument
string argumentFilePath = Path.Combine(cloneProject.projectPath, ClonesManager.ArgumentFileName);
File.WriteAllText(argumentFilePath, DefaultArgument, System.Text.Encoding.UTF8);
/// Add collabignore.txt to stop the clone from messing with Unity Collaborate if it's enabled. Just in case.
string collabignoreFile = Path.Combine(cloneProject.projectPath, "collabignore.txt");
File.WriteAllText(collabignoreFile, "*"); /// Make it ignore ALL files in the clone.
}
/// <summary>
/// Opens a project located at the given path (if one exists).
/// </summary>
/// <param name="projectPath"></param>
public static void OpenProject(string projectPath)
{
if (!Directory.Exists(projectPath))
{
Debug.LogError("Cannot open the project - provided folder (" + projectPath + ") does not exist.");
return;
}
if (projectPath == ClonesManager.GetCurrentProjectPath())
{
Debug.LogError("Cannot open the project - it is already open.");
return;
}
//Validate (and update if needed) the "Packages" folder before opening clone project to ensure the clone project will have the
//same "compiling environment" as the original project
ValidateCopiedFoldersIntegrity.ValidateFolder(projectPath, GetOriginalProjectPath(), "Packages");
string fileName = GetApplicationPath();
string args = "-projectPath \"" + projectPath + "\"";
Debug.Log("Opening project \"" + fileName + " " + args + "\"");
ClonesManager.StartHiddenConsoleProcess(fileName, args);
}
private static string GetApplicationPath()
{
switch (Application.platform)
{
case RuntimePlatform.WindowsEditor:
return EditorApplication.applicationPath;
case RuntimePlatform.OSXEditor:
return EditorApplication.applicationPath + "/Contents/MacOS/Unity";
case RuntimePlatform.LinuxEditor:
return EditorApplication.applicationPath;
default:
throw new System.NotImplementedException("Platform has not supported yet ;(");
}
}
/// <summary>
/// Is this project being opened by an Unity editor?
/// </summary>
/// <param name="projectPath"></param>
/// <returns></returns>
public static bool IsCloneProjectRunning(string projectPath)
{
//Determine whether it is opened in another instance by checking the UnityLockFile
string UnityLockFilePath = new string[] { projectPath, "Temp", "UnityLockfile" }
.Aggregate(Path.Combine);
switch (Application.platform)
{
case (RuntimePlatform.WindowsEditor):
//Windows editor will lock "UnityLockfile" file when project is being opened.
//Sometime, for instance: windows editor crash, the "UnityLockfile" will not be deleted even the project
//isn't being opened, so a check to the "UnityLockfile" lock status may be necessary.
if (Preferences.AlsoCheckUnityLockFileStaPref.Value)
return File.Exists(UnityLockFilePath) && FileUtilities.IsFileLocked(UnityLockFilePath);
else
return File.Exists(UnityLockFilePath);
case (RuntimePlatform.OSXEditor):
//Mac editor won't lock "UnityLockfile" file when project is being opened
return File.Exists(UnityLockFilePath);
case (RuntimePlatform.LinuxEditor):
return File.Exists(UnityLockFilePath);
default:
throw new System.NotImplementedException("IsCloneProjectRunning: Unsupport Platfrom: " + Application.platform);
}
}
/// <summary>
/// Deletes the clone of the currently open project, if such exists.
/// </summary>
public static void DeleteClone(string cloneProjectPath)
{
/// Clone won't be able to delete itself.
if (ClonesManager.IsClone()) return;
///Extra precautions.
if (cloneProjectPath == string.Empty) return;
if (cloneProjectPath == ClonesManager.GetOriginalProjectPath()) return;
//Check what OS is
string identifierFile;
string args;
switch (Application.platform)
{
case (RuntimePlatform.WindowsEditor):
Debug.Log("Attempting to delete folder \"" + cloneProjectPath + "\"");
//The argument file will be deleted first at the beginning of the project deletion process
//to prevent any further reading and writing to it(There's a File.Exist() check at the (file)editor windows.)
//If there's any file in the directory being write/read during the deletion process, the directory can't be fully removed.
identifierFile = Path.Combine(cloneProjectPath, ClonesManager.ArgumentFileName);
File.Delete(identifierFile);
args = "/c " + @"rmdir /s/q " + string.Format("\"{0}\"", cloneProjectPath);
StartHiddenConsoleProcess("cmd.exe", args);
break;
case (RuntimePlatform.OSXEditor):
Debug.Log("Attempting to delete folder \"" + cloneProjectPath + "\"");
//The argument file will be deleted first at the beginning of the project deletion process
//to prevent any further reading and writing to it(There's a File.Exist() check at the (file)editor windows.)
//If there's any file in the directory being write/read during the deletion process, the directory can't be fully removed.
identifierFile = Path.Combine(cloneProjectPath, ClonesManager.ArgumentFileName);
File.Delete(identifierFile);
FileUtil.DeleteFileOrDirectory(cloneProjectPath);
break;
case (RuntimePlatform.LinuxEditor):
Debug.Log("Attempting to delete folder \"" + cloneProjectPath + "\"");
identifierFile = Path.Combine(cloneProjectPath, ClonesManager.ArgumentFileName);
File.Delete(identifierFile);
FileUtil.DeleteFileOrDirectory(cloneProjectPath);
break;
default:
Debug.LogWarning("Not in a known editor. Where are you!?");
break;
}
}
#endregion
#region Creating project folders
/// <summary>
/// Creates an empty folder using data in the given Project object
/// </summary>
/// <param name="project"></param>
public static void CreateProjectFolder(Project project)
{
string path = project.projectPath;
Debug.Log("Creating new empty folder at: " + path);
Directory.CreateDirectory(path);
}
/// <summary>
/// Copies the full contents of the unity library. We want to do this to avoid the lengthy re-serialization of the whole project when it opens up the clone.
/// </summary>
/// <param name="sourceProject"></param>
/// <param name="destinationProject"></param>
[System.Obsolete]
public static void CopyLibraryFolder(Project sourceProject, Project destinationProject)
{
if (Directory.Exists(destinationProject.libraryPath))
{
Debug.LogWarning("Library copy: destination path already exists! ");
return;
}
Debug.Log("Library copy: " + destinationProject.libraryPath);
ClonesManager.CopyDirectoryWithProgressBar(sourceProject.libraryPath, destinationProject.libraryPath,
"Cloning project '" + sourceProject.name + "'. ");
}
#endregion
#region Creating symlinks
/// <summary>
/// Creates a symlink between destinationPath and sourcePath (Mac version).
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="destinationPath"></param>
private static void CreateLinkMac(string sourcePath, string destinationPath)
{
sourcePath = sourcePath.Replace(" ", "\\ ");
destinationPath = destinationPath.Replace(" ", "\\ ");
var command = string.Format("ln -s {0} {1}", sourcePath, destinationPath);
Debug.Log("Mac hard link " + command);
ClonesManager.ExecuteBashCommand(command);
}
/// <summary>
/// Creates a symlink between destinationPath and sourcePath (Linux version).
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="destinationPath"></param>
private static void CreateLinkLinux(string sourcePath, string destinationPath)
{
sourcePath = sourcePath.Replace(" ", "\\ ");
destinationPath = destinationPath.Replace(" ", "\\ ");
var command = string.Format("ln -s {0} {1}", sourcePath, destinationPath);
Debug.Log("Linux Symlink " + command);
ClonesManager.ExecuteBashCommand(command);
}
/// <summary>
/// Creates a symlink between destinationPath and sourcePath (Windows version).
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="destinationPath"></param>
private static void CreateLinkWin(string sourcePath, string destinationPath)
{
string cmd = "/C mklink /J " + string.Format("\"{0}\" \"{1}\"", destinationPath, sourcePath);
Debug.Log("Windows junction: " + cmd);
ClonesManager.StartHiddenConsoleProcess("cmd.exe", cmd);
}
//TODO(?) avoid terminal calls and use proper api stuff. See below for windows!
////https://docs.microsoft.com/en-us/windows/desktop/api/ioapiset/nf-ioapiset-deviceiocontrol
//[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
//private static extern bool DeviceIoControl(System.IntPtr hDevice, uint dwIoControlCode,
// System.IntPtr InBuffer, int nInBufferSize,
// System.IntPtr OutBuffer, int nOutBufferSize,
// out int pBytesReturned, System.IntPtr lpOverlapped);
/// <summary>
/// Create a link / junction from the original project to it's clone.
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="destinationPath"></param>
public static void LinkFolders(string sourcePath, string destinationPath)
{
if ((Directory.Exists(destinationPath) == false) && (Directory.Exists(sourcePath) == true))
{
switch (Application.platform)
{
case (RuntimePlatform.WindowsEditor):
CreateLinkWin(sourcePath, destinationPath);
break;
case (RuntimePlatform.OSXEditor):
CreateLinkMac(sourcePath, destinationPath);
break;
case (RuntimePlatform.LinuxEditor):
CreateLinkLinux(sourcePath, destinationPath);
break;
default:
Debug.LogWarning("Not in a known editor. Application.platform: " + Application.platform);
break;
}
}
else
{
Debug.LogWarning("Skipping Asset link, it already exists: " + destinationPath);
}
}
#endregion
#region Utility methods
private static bool? isCloneFileExistCache = null;
/// <summary>
/// Returns true if the project currently open in Unity Editor is a clone.
/// </summary>
/// <returns></returns>
public static bool IsClone()
{
if (isCloneFileExistCache == null)
{
/// The project is a clone if its root directory contains an empty file named ".clone".
string cloneFilePath = Path.Combine(ClonesManager.GetCurrentProjectPath(), ClonesManager.CloneFileName);
isCloneFileExistCache = File.Exists(cloneFilePath);
}
return (bool)isCloneFileExistCache;
}
/// <summary>
/// Get the path to the current unityEditor project folder's info
/// </summary>
/// <returns></returns>
public static string GetCurrentProjectPath()
{
return Application.dataPath.Replace("/Assets", "");
}
/// <summary>
/// Return a project object that describes all the paths we need to clone it.
/// </summary>
/// <returns></returns>
public static Project GetCurrentProject()
{
string pathString = ClonesManager.GetCurrentProjectPath();
return new Project(pathString);
}
/// <summary>
/// Get the argument of this clone project.
/// If this is the original project, will return an empty string.
/// </summary>
/// <returns></returns>
public static string GetArgument()
{
string argument = "";
if (IsClone())
{
string argumentFilePath = Path.Combine(GetCurrentProjectPath(), ClonesManager.ArgumentFileName);
if (File.Exists(argumentFilePath))
{
argument = File.ReadAllText(argumentFilePath, System.Text.Encoding.UTF8);
}
}
return argument;
}
/// <summary>
/// Returns the path to the original project.
/// If currently open project is the original, returns its own path.
/// If the original project folder cannot be found, retuns an empty string.
/// </summary>
/// <returns></returns>
public static string GetOriginalProjectPath()
{
if (IsClone())
{
/// If this is a clone...
/// Original project path can be deduced by removing the suffix from the clone's path.
string cloneProjectPath = ClonesManager.GetCurrentProject().projectPath;
int index = cloneProjectPath.LastIndexOf(ClonesManager.CloneNameSuffix);
if (index > 0)
{
string originalProjectPath = cloneProjectPath.Substring(0, index);
if (Directory.Exists(originalProjectPath)) return originalProjectPath;
}
return string.Empty;
}
else
{
/// If this is the original, we return its own path.
return ClonesManager.GetCurrentProjectPath();
}
}
/// <summary>
/// Returns all clone projects path.
/// </summary>
/// <returns></returns>
public static List<string> GetCloneProjectsPath()
{
List<string> projectsPath = new List<string>();
for (int i = 0; i < MaxCloneProjectCount; i++)
{
string originalProjectPath = ClonesManager.GetCurrentProject().projectPath;
string cloneProjectPath = originalProjectPath + ClonesManager.CloneNameSuffix + "_" + i;
if (Directory.Exists(cloneProjectPath))
projectsPath.Add(cloneProjectPath);
}
return projectsPath;
}
/// <summary>
/// Copies directory located at sourcePath to destinationPath. Displays a progress bar.
/// </summary>
/// <param name="source">Directory to be copied.</param>
/// <param name="destination">Destination directory (created automatically if needed).</param>
/// <param name="progressBarPrefix">Optional string added to the beginning of the progress bar window header.</param>
public static void CopyDirectoryWithProgressBar(string sourcePath, string destinationPath,
string progressBarPrefix = "")
{
var source = new DirectoryInfo(sourcePath);
var destination = new DirectoryInfo(destinationPath);
long totalBytes = 0;
long copiedBytes = 0;
ClonesManager.CopyDirectoryWithProgressBarRecursive(source, destination, ref totalBytes, ref copiedBytes,
progressBarPrefix);
EditorUtility.ClearProgressBar();
}
/// <summary>
/// Copies directory located at sourcePath to destinationPath. Displays a progress bar.
/// Same as the previous method, but uses recursion to copy all nested folders as well.
/// </summary>
/// <param name="source">Directory to be copied.</param>
/// <param name="destination">Destination directory (created automatically if needed).</param>
/// <param name="totalBytes">Total bytes to be copied. Calculated automatically, initialize at 0.</param>
/// <param name="copiedBytes">To track already copied bytes. Calculated automatically, initialize at 0.</param>
/// <param name="progressBarPrefix">Optional string added to the beginning of the progress bar window header.</param>
private static void CopyDirectoryWithProgressBarRecursive(DirectoryInfo source, DirectoryInfo destination,
ref long totalBytes, ref long copiedBytes, string progressBarPrefix = "")
{
/// Directory cannot be copied into itself.
if (source.FullName.ToLower() == destination.FullName.ToLower())
{
Debug.LogError("Cannot copy directory into itself.");
return;
}
/// Calculate total bytes, if required.
if (totalBytes == 0)
{
totalBytes = ClonesManager.GetDirectorySize(source, true, progressBarPrefix);
}
/// Create destination directory, if required.
if (!Directory.Exists(destination.FullName))
{
Directory.CreateDirectory(destination.FullName);
}
/// Copy all files from the source.
foreach (FileInfo file in source.GetFiles())
{
// Ensure file exists before continuing.
if (!file.Exists)
{
continue;
}
try
{
file.CopyTo(Path.Combine(destination.ToString(), file.Name), true);
}
catch (IOException)
{
/// Some files may throw IOException if they are currently open in Unity editor.
/// Just ignore them in such case.
}
/// Account the copied file size.
copiedBytes += file.Length;
/// Display the progress bar.
float progress = (float)copiedBytes / (float)totalBytes;
bool cancelCopy = EditorUtility.DisplayCancelableProgressBar(
progressBarPrefix + "Copying '" + source.FullName + "' to '" + destination.FullName + "'...",
"(" + (progress * 100f).ToString("F2") + "%) Copying file '" + file.Name + "'...",
progress);
if (cancelCopy) return;
}
/// Copy all nested directories from the source.
foreach (DirectoryInfo sourceNestedDir in source.GetDirectories())
{
DirectoryInfo nextDestingationNestedDir = destination.CreateSubdirectory(sourceNestedDir.Name);
ClonesManager.CopyDirectoryWithProgressBarRecursive(sourceNestedDir, nextDestingationNestedDir,
ref totalBytes, ref copiedBytes, progressBarPrefix);
}
}
/// <summary>
/// Calculates the size of the given directory. Displays a progress bar.
/// </summary>
/// <param name="directory">Directory, which size has to be calculated.</param>
/// <param name="includeNested">If true, size will include all nested directories.</param>
/// <param name="progressBarPrefix">Optional string added to the beginning of the progress bar window header.</param>
/// <returns>Size of the directory in bytes.</returns>
private static long GetDirectorySize(DirectoryInfo directory, bool includeNested = false,
string progressBarPrefix = "")
{
EditorUtility.DisplayProgressBar(progressBarPrefix + "Calculating size of directories...",
"Scanning '" + directory.FullName + "'...", 0f);
/// Calculate size of all files in directory.
long filesSize = directory.GetFiles().Sum((FileInfo file) => file.Exists ? file.Length : 0);
/// Calculate size of all nested directories.
long directoriesSize = 0;
if (includeNested)
{
IEnumerable<DirectoryInfo> nestedDirectories = directory.GetDirectories();
foreach (DirectoryInfo nestedDir in nestedDirectories)
{
directoriesSize += ClonesManager.GetDirectorySize(nestedDir, true, progressBarPrefix);
}
}
return filesSize + directoriesSize;
}
/// <summary>
/// Starts process in the system console, taking the given fileName and args.
/// </summary>
/// <param name="fileName"></param>
/// <param name="args"></param>
private static void StartHiddenConsoleProcess(string fileName, string args)
{
System.Diagnostics.Process.Start(fileName, args);
}
/// <summary>
/// Thanks to https://github.com/karl-/unity-symlink-utility/blob/master/SymlinkUtility.cs
/// </summary>
/// <param name="command"></param>
private static void ExecuteBashCommand(string command)
{
command = command.Replace("\"", "\"\"");
var proc = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = "-c \"" + command + "\"",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
using (proc)
{
proc.Start();
proc.WaitForExit();
if (!proc.StandardError.EndOfStream)
{
UnityEngine.Debug.LogError(proc.StandardError.ReadToEnd());
}
}
}
public static void OpenProjectInFileExplorer(string path)
{
System.Diagnostics.Process.Start(@path);
}
#endregion
}
}

View File

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

View File

@ -0,0 +1,198 @@
using UnityEngine;
using UnityEditor;
using System.IO;
namespace ParrelSync
{
/// <summary>
///Clones manager Unity editor window
/// </summary>
public class ClonesManagerWindow : EditorWindow
{
/// <summary>
/// Returns true if project clone exists.
/// </summary>
public bool isCloneCreated
{
get { return ClonesManager.GetCloneProjectsPath().Count >= 1; }
}
[MenuItem("ParrelSync/Clones Manager", priority = 0)]
private static void InitWindow()
{
ClonesManagerWindow window = (ClonesManagerWindow)EditorWindow.GetWindow(typeof(ClonesManagerWindow));
window.titleContent = new GUIContent("Clones Manager");
window.Show();
}
/// <summary>
/// For storing the scroll position of clones list
/// </summary>
Vector2 clonesScrollPos;
private void OnGUI()
{
/// If it is a clone project...
if (ClonesManager.IsClone())
{
//Find out the original project name and show the help box
string originalProjectPath = ClonesManager.GetOriginalProjectPath();
if (originalProjectPath == string.Empty)
{
/// If original project cannot be found, display warning message.
EditorGUILayout.HelpBox(
"This project is a clone, but the link to the original seems lost.\nYou have to manually open the original and create a new clone instead of this one.\n",
MessageType.Warning);
}
else
{
/// If original project is present, display some usage info.
EditorGUILayout.HelpBox(
"This project is a clone of the project '" + Path.GetFileName(originalProjectPath) + "'.\nIf you want to make changes the project files or manage clones, please open the original project through Unity Hub.",
MessageType.Info);
}
//Clone project custom argument.
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Arguments", GUILayout.Width(70));
if (GUILayout.Button("?", GUILayout.Width(20)))
{
Application.OpenURL(ExternalLinks.CustomArgumentHelpLink);
}
GUILayout.EndHorizontal();
string argumentFilePath = Path.Combine(ClonesManager.GetCurrentProjectPath(), ClonesManager.ArgumentFileName);
//Need to be careful with file reading / writing since it will effect the deletion of
// the clone project(The directory won't be fully deleted if there's still file inside being read or write).
//The argument file will be deleted first at the beginning of the project deletion process
//to prevent any further being read and write.
//Will need to take some extra cautious if want to change the design of how file editing is handled.
if (File.Exists(argumentFilePath))
{
string argument = File.ReadAllText(argumentFilePath, System.Text.Encoding.UTF8);
string argumentTextAreaInput = EditorGUILayout.TextArea(argument,
GUILayout.Height(50),
GUILayout.MaxWidth(300)
);
File.WriteAllText(argumentFilePath, argumentTextAreaInput, System.Text.Encoding.UTF8);
}
else
{
EditorGUILayout.LabelField("No argument file found.");
}
}
else// If it is an original project...
{
if (isCloneCreated)
{
GUILayout.BeginVertical("HelpBox");
GUILayout.Label("Clones of this Project");
//List all clones
clonesScrollPos =
EditorGUILayout.BeginScrollView(clonesScrollPos);
var cloneProjectsPath = ClonesManager.GetCloneProjectsPath();
for (int i = 0; i < cloneProjectsPath.Count; i++)
{
GUILayout.BeginVertical("GroupBox");
string cloneProjectPath = cloneProjectsPath[i];
bool isOpenInAnotherInstance = ClonesManager.IsCloneProjectRunning(cloneProjectPath);
if (isOpenInAnotherInstance == true)
EditorGUILayout.LabelField("Clone " + i + " (Running)", EditorStyles.boldLabel);
else
EditorGUILayout.LabelField("Clone " + i);
GUILayout.BeginHorizontal();
EditorGUILayout.TextField("Clone project path", cloneProjectPath, EditorStyles.textField);
if (GUILayout.Button("View Folder", GUILayout.Width(80)))
{
ClonesManager.OpenProjectInFileExplorer(cloneProjectPath);
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Arguments", GUILayout.Width(70));
if (GUILayout.Button("?", GUILayout.Width(20)))
{
Application.OpenURL(ExternalLinks.CustomArgumentHelpLink);
}
GUILayout.EndHorizontal();
string argumentFilePath = Path.Combine(cloneProjectPath, ClonesManager.ArgumentFileName);
//Need to be careful with file reading/writing since it will effect the deletion of
//the clone project(The directory won't be fully deleted if there's still file inside being read or write).
//The argument file will be deleted first at the beginning of the project deletion process
//to prevent any further being read and write.
//Will need to take some extra cautious if want to change the design of how file editing is handled.
if (File.Exists(argumentFilePath))
{
string argument = File.ReadAllText(argumentFilePath, System.Text.Encoding.UTF8);
string argumentTextAreaInput = EditorGUILayout.TextArea(argument,
GUILayout.Height(50),
GUILayout.MaxWidth(300)
);
File.WriteAllText(argumentFilePath, argumentTextAreaInput, System.Text.Encoding.UTF8);
}
else
{
EditorGUILayout.LabelField("No argument file found.");
}
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUILayout.Space();
EditorGUI.BeginDisabledGroup(isOpenInAnotherInstance);
if (GUILayout.Button("Open in New Editor"))
{
ClonesManager.OpenProject(cloneProjectPath);
}
GUILayout.BeginHorizontal();
if (GUILayout.Button("Delete"))
{
bool delete = EditorUtility.DisplayDialog(
"Delete the clone?",
"Are you sure you want to delete the clone project '" + ClonesManager.GetCurrentProject().name + "_clone'?",
"Delete",
"Cancel");
if (delete)
{
ClonesManager.DeleteClone(cloneProjectPath);
}
}
GUILayout.EndHorizontal();
EditorGUI.EndDisabledGroup();
GUILayout.EndVertical();
}
EditorGUILayout.EndScrollView();
if (GUILayout.Button("Add new clone"))
{
ClonesManager.CreateCloneFromCurrent();
}
GUILayout.EndVertical();
GUILayout.FlexibleSpace();
}
else
{
/// If no clone created yet, we must create it.
EditorGUILayout.HelpBox("No project clones found. Create a new one!", MessageType.Info);
if (GUILayout.Button("Create new clone"))
{
ClonesManager.CreateCloneFromCurrent();
}
}
}
}
}
}

View File

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

View File

@ -0,0 +1,13 @@
namespace ParrelSync
{
public class ExternalLinks
{
public const string RemoteVersionURL = "https://raw.githubusercontent.com/VeriorPies/ParrelSync/master/VERSION.txt";
public const string Releases = "https://github.com/VeriorPies/ParrelSync/releases";
public const string CustomArgumentHelpLink = "https://github.com/VeriorPies/ParrelSync/wiki/Argument";
public const string GitHubHome = "https://github.com/VeriorPies/ParrelSync/";
public const string GitHubIssue = "https://github.com/VeriorPies/ParrelSync/issues";
public const string FAQ = "https://github.com/VeriorPies/ParrelSync/wiki/Troubleshooting-&-FAQs";
}
}

View File

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

View File

@ -0,0 +1,31 @@
using System.IO;
using UnityEngine;
namespace ParrelSync
{
public class FileUtilities
{
public static bool IsFileLocked(string path)
{
FileInfo file = new FileInfo(path);
try
{
using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
{
stream.Close();
}
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
//file is not locked
return false;
}
}
}

View File

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

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 74a7aa389726f964ab34c52e208c2a43
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,78 @@
namespace ParrelSync.NonCore
{
using UnityEditor;
using UnityEngine;
/// <summary>
/// A simple script to display feedback/star dialog after certain time of project being opened/re-compiled.
/// Will only pop-up once unless "Remind me next time" are chosen.
/// Removing this file from project wont effect any other functions.
/// </summary>
[InitializeOnLoad]
public class AskFeedbackDialog
{
const string InitializeOnLoadCountKey = "ParrelSync_InitOnLoadCount", StopShowingKey = "ParrelSync_StopShowFeedBack";
static AskFeedbackDialog()
{
if (EditorPrefs.HasKey(StopShowingKey)) { return; }
int InitializeOnLoadCount = EditorPrefs.GetInt(InitializeOnLoadCountKey, 0);
if (InitializeOnLoadCount > 20)
{
ShowDialog();
}
else
{
EditorPrefs.SetInt(InitializeOnLoadCountKey, InitializeOnLoadCount + 1);
}
}
//[MenuItem("ParrelSync/(Debug)Show AskFeedbackDialog ")]
private static void ShowDialog()
{
int option = EditorUtility.DisplayDialogComplex("Do you like " + ParrelSync.ClonesManager.ProjectName + "?",
"Do you like " + ParrelSync.ClonesManager.ProjectName + "?\n" +
"If so, please don't hesitate to star it on GitHub and contribute to the project!",
"Star on GitHub",
"Close",
"Remind me next time"
);
switch (option)
{
// First parameter.
case 0:
Debug.Log("AskFeedbackDialog: Star on GitHub selected");
EditorPrefs.SetBool(StopShowingKey, true);
EditorPrefs.DeleteKey(InitializeOnLoadCountKey);
Application.OpenURL(ExternalLinks.GitHubHome);
break;
// Second parameter.
case 1:
Debug.Log("AskFeedbackDialog: Close and never show again.");
EditorPrefs.SetBool(StopShowingKey, true);
EditorPrefs.DeleteKey(InitializeOnLoadCountKey);
break;
// Third parameter.
case 2:
Debug.Log("AskFeedbackDialog: Remind me next time");
EditorPrefs.SetInt(InitializeOnLoadCountKey, 0);
break;
default:
//Debug.Log("Close windows.");
break;
}
}
///// <summary>
///// For debug purpose
///// </summary>
//[MenuItem("ParrelSync/(Debug)Delete AskFeedbackDialog keys")]
//private static void DebugDeleteAllKeys()
//{
// EditorPrefs.DeleteKey(InitializeOnLoadCountKey);
// EditorPrefs.DeleteKey(StopShowingKey);
// Debug.Log("AskFeedbackDialog keys deleted");
//}
}
}

View File

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

View File

@ -0,0 +1,26 @@
namespace ParrelSync.NonCore
{
using UnityEditor;
using UnityEngine;
public class OtherMenuItem
{
[MenuItem("ParrelSync/GitHub/View this project on GitHub", priority = 10)]
private static void OpenGitHub()
{
Application.OpenURL(ExternalLinks.GitHubHome);
}
[MenuItem("ParrelSync/GitHub/View FAQ", priority = 11)]
private static void OpenFAQ()
{
Application.OpenURL(ExternalLinks.FAQ);
}
[MenuItem("ParrelSync/GitHub/View Issues", priority = 12)]
private static void OpenGitHubIssues()
{
Application.OpenURL(ExternalLinks.GitHubIssue);
}
}
}

View File

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

View File

@ -0,0 +1,140 @@
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace ParrelSync
{
// With ScriptableObject derived classes, .cs and .asset filenames MUST be identical
public class ParrelSyncProjectSettings : ScriptableObject
{
private const string ParrelSyncScriptableObjectsDirectory = "Assets/Plugins/ParrelSync/ScriptableObjects";
private const string ParrelSyncSettingsPath = ParrelSyncScriptableObjectsDirectory + "/" +
nameof(ParrelSyncProjectSettings) + ".asset";
[SerializeField]
[HideInInspector]
private List<string> m_OptionalSymbolicLinkFolders;
public const string NameOfOptionalSymbolicLinkFolders = nameof(m_OptionalSymbolicLinkFolders);
private static ParrelSyncProjectSettings GetOrCreateSettings()
{
ParrelSyncProjectSettings projectSettings;
if (File.Exists(ParrelSyncSettingsPath))
{
projectSettings = AssetDatabase.LoadAssetAtPath<ParrelSyncProjectSettings>(ParrelSyncSettingsPath);
if (projectSettings == null)
Debug.LogError("File Exists, but failed to load: " + ParrelSyncSettingsPath);
return projectSettings;
}
projectSettings = CreateInstance<ParrelSyncProjectSettings>();
projectSettings.m_OptionalSymbolicLinkFolders = new List<string>();
if (!Directory.Exists(ParrelSyncScriptableObjectsDirectory))
{
Directory.CreateDirectory(ParrelSyncScriptableObjectsDirectory);
}
AssetDatabase.CreateAsset(projectSettings, ParrelSyncSettingsPath);
AssetDatabase.SaveAssets();
return projectSettings;
}
public static SerializedObject GetSerializedSettings()
{
return new SerializedObject(GetOrCreateSettings());
}
}
public class ParrelSyncSettingsProvider : SettingsProvider
{
private const string MenuLocationInProjectSettings = "Project/ParrelSync";
private SerializedObject _parrelSyncProjectSettings;
private class Styles
{
public static readonly GUIContent SymlinkSectionHeading = new GUIContent("Optional Folders to Symbolically Link");
}
private ParrelSyncSettingsProvider(string path, SettingsScope scope = SettingsScope.User)
: base(path, scope)
{
}
public override void OnActivate(string searchContext, VisualElement rootElement)
{
// This function is called when the user clicks on the ParrelSyncSettings element in the Settings window.
_parrelSyncProjectSettings = ParrelSyncProjectSettings.GetSerializedSettings();
}
public override void OnGUI(string searchContext)
{
var property = _parrelSyncProjectSettings.FindProperty(ParrelSyncProjectSettings.NameOfOptionalSymbolicLinkFolders);
if (property is null || !property.isArray || property.arrayElementType != "string")
return;
var optionalFolderPaths = new List<string>(property.arraySize);
for (var i = 0; i < property.arraySize; ++i)
{
optionalFolderPaths.Add(property.GetArrayElementAtIndex(i).stringValue);
}
optionalFolderPaths.Add("");
GUILayout.BeginVertical("GroupBox");
GUILayout.Label(Styles.SymlinkSectionHeading);
GUILayout.Space(5);
var projectPath = ClonesManager.GetCurrentProjectPath();
var optionalFolderPathsIsDirty = false;
for (var i = 0; i < optionalFolderPaths.Count; ++i)
{
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField(optionalFolderPaths[i], EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight));
if (GUILayout.Button("Select", GUILayout.Width(60)))
{
var result = EditorUtility.OpenFolderPanel("Select Folder to Symbolically Link...", "", "");
if (result.Contains(projectPath))
{
optionalFolderPaths[i] = result.Replace(projectPath, "");
optionalFolderPathsIsDirty = true;
}
else if (result != "")
{
Debug.LogWarning("Symbolic Link folder must be within the project directory");
}
}
if (GUILayout.Button("Clear", GUILayout.Width(60)))
{
optionalFolderPaths[i] = "";
optionalFolderPathsIsDirty = true;
}
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
if (!optionalFolderPathsIsDirty)
return;
optionalFolderPaths.RemoveAll(str => str == "");
property.arraySize = optionalFolderPaths.Count;
for (var i = 0; i < property.arraySize; ++i)
{
property.GetArrayElementAtIndex(i).stringValue = optionalFolderPaths[i];
}
_parrelSyncProjectSettings.ApplyModifiedProperties();
AssetDatabase.SaveAssets();
}
// Register the SettingsProvider
[SettingsProvider]
public static SettingsProvider CreateParrelSyncSettingsProvider()
{
return new ParrelSyncSettingsProvider(MenuLocationInProjectSettings, SettingsScope.Project)
{
keywords = GetSearchKeywordsFromGUIContentProperties<Styles>()
};
}
}
}

View File

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

View File

@ -0,0 +1,215 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
namespace ParrelSync
{
/// <summary>
/// To add value caching for <see cref="EditorPrefs"/> functions
/// </summary>
public class BoolPreference
{
public string key { get; private set; }
public bool defaultValue { get; private set; }
public BoolPreference(string key, bool defaultValue)
{
this.key = key;
this.defaultValue = defaultValue;
}
private bool? valueCache = null;
public bool Value
{
get
{
if (valueCache == null)
valueCache = EditorPrefs.GetBool(key, defaultValue);
return (bool)valueCache;
}
set
{
if (valueCache == value)
return;
EditorPrefs.SetBool(key, value);
valueCache = value;
Debug.Log("Editor preference updated. key: " + key + ", value: " + value);
}
}
public void ClearValue()
{
EditorPrefs.DeleteKey(key);
valueCache = null;
}
}
/// <summary>
/// To add value caching for <see cref="EditorPrefs"/> functions
/// </summary>
public class ListOfStringsPreference
{
private static string serializationToken = "|||";
public string Key { get; private set; }
public ListOfStringsPreference(string key)
{
Key = key;
}
public List<string> GetStoredValue()
{
return this.Deserialize(EditorPrefs.GetString(Key));
}
public void SetStoredValue(List<string> strings)
{
EditorPrefs.SetString(Key, this.Serialize(strings));
}
public void ClearStoredValue()
{
EditorPrefs.DeleteKey(Key);
}
public string Serialize(List<string> data)
{
string result = string.Empty;
foreach (var item in data)
{
if (item.Contains(serializationToken))
{
Debug.LogError("Unable to serialize this value ["+item+"], it contains the serialization token ["+serializationToken+"]");
continue;
}
result += item + serializationToken;
}
return result;
}
public List<string> Deserialize(string data)
{
return data.Split(serializationToken).ToList();
}
}
public class Preferences : EditorWindow
{
[MenuItem("ParrelSync/Preferences", priority = 1)]
private static void InitWindow()
{
Preferences window = (Preferences)EditorWindow.GetWindow(typeof(Preferences));
window.titleContent = new GUIContent(ClonesManager.ProjectName + " Preferences");
window.minSize = new Vector2(550, 300);
window.Show();
}
/// <summary>
/// Disable asset saving in clone editors?
/// </summary>
public static BoolPreference AssetModPref = new BoolPreference("ParrelSync_DisableClonesAssetSaving", true);
/// <summary>
/// In addition of checking the existence of UnityLockFile,
/// also check is the is the UnityLockFile being opened.
/// </summary>
public static BoolPreference AlsoCheckUnityLockFileStaPref = new BoolPreference("ParrelSync_CheckUnityLockFileOpenStatus", true);
/// <summary>
/// A list of folders to create sybolic links for,
/// useful for data that lives outside of the assets folder
/// eg. Wwise project data
/// </summary>
public static ListOfStringsPreference OptionalSymbolicLinkFolders = new ListOfStringsPreference("ParrelSync_OptionalSymbolicLinkFolders");
private void OnGUI()
{
if (ClonesManager.IsClone())
{
EditorGUILayout.HelpBox(
"This is a clone project. Please use the original project editor to change preferences.",
MessageType.Info);
return;
}
GUILayout.BeginVertical("HelpBox");
GUILayout.Label("Preferences");
GUILayout.BeginVertical("GroupBox");
AssetModPref.Value = EditorGUILayout.ToggleLeft(
new GUIContent(
"(recommended) Disable asset saving in clone editors- require re-open clone editors",
"Disable asset saving in clone editors so all assets can only be modified from the original project editor"
),
AssetModPref.Value);
if (Application.platform == RuntimePlatform.WindowsEditor)
{
AlsoCheckUnityLockFileStaPref.Value = EditorGUILayout.ToggleLeft(
new GUIContent(
"Also check UnityLockFile lock status while checking clone projects running status",
"Disable this can slightly increase Clones Manager window performance, but will lead to in-correct clone project running status" +
"(the Clones Manager window show the clone project is still running even it's not) if the clone editor crashed"
),
AlsoCheckUnityLockFileStaPref.Value);
}
GUILayout.EndVertical();
GUILayout.BeginVertical("GroupBox");
GUILayout.Label("Optional Folders to Symbolically Link");
GUILayout.Space(5);
// cache the current value
List<string> optionalFolderPaths = OptionalSymbolicLinkFolders.GetStoredValue();
bool optionalFolderPathsAreDirty = false;
// append a new row if full
if (optionalFolderPaths.Last() != "")
{
optionalFolderPaths.Add("");
}
var projectPath = ClonesManager.GetCurrentProjectPath();
for (int i = 0; i < optionalFolderPaths.Count; ++i)
{
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField(optionalFolderPaths[i], EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight));
if (GUILayout.Button("Select Folder", GUILayout.Width(100)))
{
var result = EditorUtility.OpenFolderPanel("Select Folder to Symbolically Link...", "", "");
if (result.Contains(projectPath))
{
optionalFolderPaths[i] = result.Replace(projectPath,"");
optionalFolderPathsAreDirty = true;
}
else if( result != "")
{
Debug.LogWarning("Symbolic Link folder must be within the project directory");
}
}
if (GUILayout.Button("Clear", GUILayout.Width(100)))
{
optionalFolderPaths[i] = "";
optionalFolderPathsAreDirty = true;
}
GUILayout.EndHorizontal();
}
// only set the preference if the value is marked dirty
if (optionalFolderPathsAreDirty)
{
optionalFolderPaths.RemoveAll(str=> str == "");
OptionalSymbolicLinkFolders.SetStoredValue(optionalFolderPaths);
}
GUILayout.EndVertical();
if (GUILayout.Button("Reset to default"))
{
AssetModPref.ClearValue();
AlsoCheckUnityLockFileStaPref.ClearValue();
OptionalSymbolicLinkFolders.ClearStoredValue();
Debug.Log("Editor preferences cleared");
}
GUILayout.EndVertical();
}
}
}

View File

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

View File

@ -0,0 +1,112 @@
using System.Collections.Generic;
using System.Linq;
namespace ParrelSync
{
public class Project : System.ICloneable
{
public string name;
public string projectPath;
string rootPath;
public string assetPath;
public string projectSettingsPath;
public string libraryPath;
public string packagesPath;
public string autoBuildPath;
public string localPackages;
char[] separator = new char[1] { '/' };
/// <summary>
/// Default constructor
/// </summary>
public Project()
{
}
/// <summary>
/// Initialize the project object by parsing its full path returned by Unity into a bunch of individual folder names and paths.
/// </summary>
/// <param name="path"></param>
public Project(string path)
{
ParsePath(path);
}
/// <summary>
/// Create a new object with the same settings
/// </summary>
/// <returns></returns>
public object Clone()
{
Project newProject = new Project();
newProject.rootPath = rootPath;
newProject.projectPath = projectPath;
newProject.assetPath = assetPath;
newProject.projectSettingsPath = projectSettingsPath;
newProject.libraryPath = libraryPath;
newProject.name = name;
newProject.separator = separator;
newProject.packagesPath = packagesPath;
newProject.autoBuildPath = autoBuildPath;
newProject.localPackages = localPackages;
return newProject;
}
/// <summary>
/// Update the project object by renaming and reparsing it. Pass in the new name of a project, and it'll update the other member variables to match.
/// </summary>
/// <param name="name"></param>
public void updateNewName(string newName)
{
name = newName;
ParsePath(rootPath + "/" + name + "/Assets");
}
/// <summary>
/// Debug override so we can quickly print out the project info.
/// </summary>
/// <returns></returns>
public override string ToString()
{
string printString = name + "\n" +
rootPath + "\n" +
projectPath + "\n" +
assetPath + "\n" +
projectSettingsPath + "\n" +
packagesPath + "\n" +
autoBuildPath + "\n" +
localPackages + "\n" +
libraryPath;
return (printString);
}
private void ParsePath(string path)
{
//Unity's Application functions return the Assets path in the Editor.
projectPath = path;
//pop off the last part of the path for the project name, keep the rest for the root path
List<string> pathArray = projectPath.Split(separator).ToList<string>();
name = pathArray.Last();
pathArray.RemoveAt(pathArray.Count() - 1);
rootPath = string.Join(separator[0].ToString(), pathArray.ToArray());
assetPath = projectPath + "/Assets";
projectSettingsPath = projectPath + "/ProjectSettings";
libraryPath = projectPath + "/Library";
packagesPath = projectPath + "/Packages";
autoBuildPath = projectPath + "/AutoBuild";
localPackages = projectPath + "/LocalPackages";
}
}
}

View File

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

View File

@ -0,0 +1,60 @@
using System;
using UnityEditor;
using UnityEngine;
namespace ParrelSync.Update
{
/// <summary>
/// A simple update checker
/// </summary>
public class UpdateChecker
{
//const string LocalVersionFilePath = "Assets/ParrelSync/VERSION.txt";
public const string LocalVersion = "1.5.2";
[MenuItem("ParrelSync/Check for update", priority = 20)]
static void CheckForUpdate()
{
using (System.Net.WebClient client = new System.Net.WebClient())
{
try
{
//This won't work with UPM packages
//string localVersionText = AssetDatabase.LoadAssetAtPath<TextAsset>(LocalVersionFilePath).text;
string localVersionText = LocalVersion;
Debug.Log("Local version text : " + LocalVersion);
string latesteVersionText = client.DownloadString(ExternalLinks.RemoteVersionURL);
Debug.Log("latest version text got: " + latesteVersionText);
string messageBody = "Current Version: " + localVersionText +"\n"
+"Latest Version: " + latesteVersionText + "\n";
var latestVersion = new Version(latesteVersionText);
var localVersion = new Version(localVersionText);
if (latestVersion > localVersion)
{
Debug.Log("There's a newer version");
messageBody += "There's a newer version available";
if(EditorUtility.DisplayDialog("Check for update.", messageBody, "Get latest release", "Close"))
{
Application.OpenURL(ExternalLinks.Releases);
}
}
else
{
Debug.Log("Current version is up-to-date.");
messageBody += "Current version is up-to-date.";
EditorUtility.DisplayDialog("Check for update.", messageBody,"OK");
}
}
catch (Exception exp)
{
Debug.LogError("Error with checking update. Exception: " + exp);
EditorUtility.DisplayDialog("Update Error","Error with checking update. \nSee console for more details.",
"OK"
);
}
}
}
}
}

View File

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

View File

@ -0,0 +1,73 @@
namespace ParrelSync
{
using UnityEditor;
using UnityEngine;
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Linq;
[InitializeOnLoad]
public class ValidateCopiedFoldersIntegrity
{
const string SessionStateKey = "ValidateCopiedFoldersIntegrity_Init";
/// <summary>
/// Called once on editor startup.
/// Validate copied folders integrity in clone project
/// </summary>
static ValidateCopiedFoldersIntegrity()
{
if (!SessionState.GetBool(SessionStateKey, false))
{
SessionState.SetBool(SessionStateKey, true);
if (!ClonesManager.IsClone()) { return; }
ValidateFolder(ClonesManager.GetCurrentProjectPath(), ClonesManager.GetOriginalProjectPath(), "Packages");
}
}
public static void ValidateFolder(string targetRoot, string originalRoot, string folderName)
{
var targetFolderPath = Path.Combine(targetRoot, folderName);
var targetFolderHash = CreateMd5ForFolder(targetFolderPath);
var originalFolderPath = Path.Combine(originalRoot, folderName);
var originalFolderHash = CreateMd5ForFolder(originalFolderPath);
if (targetFolderHash != originalFolderHash)
{
Debug.Log("ParrelSync: Detected changes in '" + folderName + "' directory. Updating cloned project...");
FileUtil.ReplaceDirectory(originalFolderPath, targetFolderPath);
}
}
static string CreateMd5ForFolder(string path)
{
// assuming you want to include nested folders
var files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories)
.OrderBy(p => p).ToList();
MD5 md5 = MD5.Create();
for (int i = 0; i < files.Count; i++)
{
string file = files[i];
// hash path
string relativePath = file.Substring(path.Length + 1);
byte[] pathBytes = Encoding.UTF8.GetBytes(relativePath.ToLower());
md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);
// hash contents
byte[] contentBytes = File.ReadAllBytes(file);
if (i == files.Count - 1)
md5.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
else
md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes, 0);
}
return BitConverter.ToString(md5.Hash).Replace("-", "").ToLower();
}
}
}

View File

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

View File

@ -0,0 +1,10 @@
{
"name": "com.veriorpies.parrelsync",
"displayName": "ParrelSync",
"version": "1.5.2",
"unity": "2018.4",
"description": "ParrelSync is a Unity editor extension that allows users to test multiplayer gameplay without building the project by having another Unity editor window opened and mirror the changes from the original project.",
"license": "MIT",
"keywords": [ "Networking", "Utils", "Editor", "Extensions" ],
"dependencies": {}
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a2a889c264e34b47a7349cbcb2cbedd7
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,15 @@
{
"name": "ParrelSync",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 894a6cc6ed5cd2645bb542978cbed6a9
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 608c0e7df2f20134aab7dfec8778d7fc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fa6b4a3b25f629048bec9a7ab2a2ae8c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c0011418c9d75434988a06b6df93b283, type: 3}
m_Name: ParrelSyncProjectSettings
m_EditorClassIdentifier:
m_OptionalSymbolicLinkFolders: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 431b1ef546a3a1b45b9036b005739aa8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -64,7 +64,7 @@ AudioSource:
m_Volume: 0.07 m_Volume: 0.07
m_Pitch: 1 m_Pitch: 1
Loop: 0 Loop: 0
Mute: 0 Mute: 1
Spatialize: 0 Spatialize: 0
SpatializePostEffects: 0 SpatializePostEffects: 0
Priority: 128 Priority: 128

View File

@ -64,7 +64,7 @@ AudioSource:
m_Volume: 0.092 m_Volume: 0.092
m_Pitch: 1.05 m_Pitch: 1.05
Loop: 0 Loop: 0
Mute: 0 Mute: 1
Spatialize: 0 Spatialize: 0
SpatializePostEffects: 0 SpatializePostEffects: 0
Priority: 128 Priority: 128

View File

@ -64,7 +64,7 @@ AudioSource:
m_Volume: 0.025 m_Volume: 0.025
m_Pitch: 1 m_Pitch: 1
Loop: 0 Loop: 0
Mute: 0 Mute: 1
Spatialize: 0 Spatialize: 0
SpatializePostEffects: 0 SpatializePostEffects: 0
Priority: 128 Priority: 128

View File

@ -64,7 +64,7 @@ AudioSource:
m_Volume: 0.025 m_Volume: 0.025
m_Pitch: 1 m_Pitch: 1
Loop: 0 Loop: 0
Mute: 0 Mute: 1
Spatialize: 0 Spatialize: 0
SpatializePostEffects: 0 SpatializePostEffects: 0
Priority: 128 Priority: 128

View File

@ -64,7 +64,7 @@ AudioSource:
m_Volume: 0.025 m_Volume: 0.025
m_Pitch: 1 m_Pitch: 1
Loop: 0 Loop: 0
Mute: 0 Mute: 1
Spatialize: 0 Spatialize: 0
SpatializePostEffects: 0 SpatializePostEffects: 0
Priority: 128 Priority: 128

View File

@ -43,9 +43,9 @@ ParticleSystem:
m_GameObject: {fileID: 3749816391370857719} m_GameObject: {fileID: 3749816391370857719}
serializedVersion: 8 serializedVersion: 8
lengthInSec: 1000 lengthInSec: 1000
simulationSpeed: 0.55 simulationSpeed: 1
stopAction: 0 stopAction: 0
cullingMode: 1 cullingMode: 0
ringBufferMode: 0 ringBufferMode: 0
ringBufferLoopRange: {x: 0, y: 1} ringBufferLoopRange: {x: 0, y: 1}
emitterVelocityMode: 0 emitterVelocityMode: 0
@ -568,8 +568,8 @@ ParticleSystem:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
randomizeRotationDirection: 0 randomizeRotationDirection: 0
gravitySource: 0 gravitySource: 1
maxNumParticles: 4500 maxNumParticles: 3000
customEmitterVelocity: {x: 0, y: 0, z: 0} customEmitterVelocity: {x: 0, y: 0, z: 0}
size3D: 0 size3D: 0
rotation3D: 0 rotation3D: 0
@ -945,7 +945,7 @@ ParticleSystem:
countCurve: countCurve:
serializedVersion: 2 serializedVersion: 2
minMaxState: 0 minMaxState: 0
scalar: 4500 scalar: 3000
minScalar: 30 minScalar: 30
maxCurve: maxCurve:
serializedVersion: 2 serializedVersion: 2
@ -4746,11 +4746,11 @@ ParticleSystemRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3749816391370857719} m_GameObject: {fileID: 3749816391370857719}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 0
m_ReceiveShadows: 1 m_ReceiveShadows: 1
m_DynamicOccludee: 1 m_DynamicOccludee: 1
m_StaticShadowCaster: 0 m_StaticShadowCaster: 0
m_MotionVectors: 1 m_MotionVectors: 0
m_LightProbeUsage: 0 m_LightProbeUsage: 0
m_ReflectionProbeUsage: 0 m_ReflectionProbeUsage: 0
m_RayTracingMode: 0 m_RayTracingMode: 0

View File

@ -102,7 +102,7 @@ Rigidbody:
serializedVersion: 2 serializedVersion: 2
m_Bits: 0 m_Bits: 0
m_ImplicitCom: 1 m_ImplicitCom: 1
m_ImplicitTensor: 1 m_ImplicitTensor: 0
m_UseGravity: 0 m_UseGravity: 0
m_IsKinematic: 0 m_IsKinematic: 0
m_Interpolate: 0 m_Interpolate: 0

View File

@ -1,6 +1,6 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1 &7443408887813606051 --- !u!1 &9107523058192353959
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@ -8,69 +8,64 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 7443408887813606049} - component: {fileID: 6062897840459347938}
- component: {fileID: 7443408887813606050} - component: {fileID: 5145657825830850559}
- component: {fileID: 934570884} - component: {fileID: 6150396533785216161}
- component: {fileID: 7443408887813606060} - component: {fileID: 4579574864988307370}
- component: {fileID: 4427988724072666434} - component: {fileID: 8717846797815970315}
- component: {fileID: 937364350749304634} - component: {fileID: 7394165842500217854}
- component: {fileID: 4166310840977298591} - component: {fileID: 8967313222978449146}
- component: {fileID: 6354181707884201360} - component: {fileID: 112429329082885301}
- component: {fileID: 4931936926189112829} - component: {fileID: 6958248346439414807}
- component: {fileID: 5770411533141640352}
- component: {fileID: 2456202277866033903}
- component: {fileID: 4080293045635388376}
- component: {fileID: 1147000878988426880}
- component: {fileID: 6184982229728339744}
m_Layer: 0 m_Layer: 0
m_Name: NetworkManager m_Name: Network Manager
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!4 &7443408887813606049 --- !u!4 &6062897840459347938
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 4393252310584637084} - {fileID: 5432511641164911102}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7443408887813606050 --- !u!114 &5145657825830850559
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d2c95dfde7d73b54dbbdc23155d35d36, type: 3} m_Script: {fileID: 11500000, guid: d2c95dfde7d73b54dbbdc23155d35d36, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_refreshDefaultPrefabs: 1 _refreshDefaultPrefabs: 0
_runInBackground: 1 _runInBackground: 1
_dontDestroyOnLoad: 0 _dontDestroyOnLoad: 0
_objectPool: {fileID: 0} _objectPool: {fileID: 0}
_persistence: 0 _persistence: 0
_logging: {fileID: 11400000, guid: 1b221f26a1118094c81531b27f6fad43, type: 2} _logging: {fileID: 0}
_spawnablePrefabs: {fileID: 11400000, guid: bb50798712a8fcd40b22abbc470201fb, type: 2} _spawnablePrefabs: {fileID: 11400000, guid: bb50798712a8fcd40b22abbc470201fb, type: 2}
--- !u!114 &934570884 --- !u!114 &6150396533785216161
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7d331f979d46e8e4a9fc90070c596d44, type: 3} m_Script: {fileID: 11500000, guid: 7d331f979d46e8e4a9fc90070c596d44, type: 3}
@ -80,87 +75,50 @@ MonoBehaviour:
_levelOfDetailDistances: [] _levelOfDetailDistances: []
_updateHostVisibility: 1 _updateHostVisibility: 1
_maximumTimedObserversDuration: 10 _maximumTimedObserversDuration: 10
_defaultConditions: [] _defaultConditions:
--- !u!114 &7443408887813606060 - {fileID: 0}
--- !u!114 &4579574864988307370
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 0 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 211a9f6ec51ddc14f908f5acc0cd0423, type: 3} m_Script: {fileID: 11500000, guid: 211a9f6ec51ddc14f908f5acc0cd0423, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_playerPrefab: {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3} _playerPrefab: {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3}
_addToDefaultScene: 1 _addToDefaultScene: 1
Spawns: [] Spawns:
--- !u!114 &4427988724072666434 - {fileID: 6062897840459347938}
--- !u!114 &8717846797815970315
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e08bb003fce297d4086cf8cba5aa459a, type: 3} m_Script: {fileID: 11500000, guid: ebee11279046f334d88e559c5c2ff08e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_queuedInputs: 1 lobbyNetworkPrefab: {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
_dropExcessiveReplicates: 1 --- !u!114 &7394165842500217854
_maximumServerReplicates: 15
_redundancyCount: 2
_allowPredictedSpawning: 0
_reservedObjectIds: 15
--- !u!114 &937364350749304634
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3fdaae44044276a49a52229c1597e33b, type: 3}
m_Name:
m_EditorClassIdentifier:
_updateOrder: 0
_timingType: 0
_allowTickDropping: 0
_maximumFrameTicks: 2
_tickRate: 30
_pingInterval: 1
_physicsMode: 0
--- !u!114 &4166310840977298591
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f9b6b565cd9533c4ebc18003f0fc18a2, type: 3}
m_Name:
m_EditorClassIdentifier:
_color: {r: 1, g: 1, b: 1, a: 1}
_placement: 1
_hideTickRate: 1
--- !u!114 &6354181707884201360
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 34e4a322dca349547989b14021da4e23, type: 3} m_Script: {fileID: 11500000, guid: 34e4a322dca349547989b14021da4e23, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
Transport: {fileID: 2456202277866033903} Transport: {fileID: 8967313222978449146}
_intermediateLayer: {fileID: 0} _intermediateLayer: {fileID: 0}
_latencySimulator: _latencySimulator:
_enabled: 0 _enabled: 0
@ -168,13 +126,29 @@ MonoBehaviour:
_latency: 0 _latency: 0
_outOfOrder: 0 _outOfOrder: 0
_packetLoss: 0 _packetLoss: 0
--- !u!114 &4931936926189112829 --- !u!114 &8967313222978449146
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 314b449d3505bd24487ba69b61c2fda5, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalServerActions: 1
_transports:
- {fileID: 112429329082885301}
- {fileID: 6958248346439414807}
--- !u!114 &112429329082885301
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6f48f002b825cbd45a19bd96d90f9edb, type: 3} m_Script: {fileID: 11500000, guid: 6f48f002b825cbd45a19bd96d90f9edb, type: 3}
@ -188,13 +162,13 @@ MonoBehaviour:
_port: 7770 _port: 7770
_maximumClients: 4095 _maximumClients: 4095
_clientAddress: localhost _clientAddress: localhost
--- !u!114 &5770411533141640352 --- !u!114 &6958248346439414807
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051} m_GameObject: {fileID: 9107523058192353959}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 362dfd7e6009fb44c90beec3df0ad853, type: 3} m_Script: {fileID: 11500000, guid: 362dfd7e6009fb44c90beec3df0ad853, type: 3}
@ -210,82 +184,13 @@ MonoBehaviour:
_port: 443 _port: 443
_maximumClients: 2000 _maximumClients: 2000
_clientAddress: localhost _clientAddress: localhost
--- !u!114 &2456202277866033903 --- !u!1001 &8616475966689417040
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 314b449d3505bd24487ba69b61c2fda5, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalServerActions: 1
_transports:
- {fileID: 4931936926189112829}
- {fileID: 5770411533141640352}
--- !u!114 &4080293045635388376
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 68828c85278210948b9d50a8db3aab74, type: 3}
m_Name:
m_EditorClassIdentifier:
_authenticator: {fileID: 0}
_remoteClientTimeout: 2
_remoteClientTimeoutDuration: 60
_syncTypeRate: 0.1
SpawnPacking:
Position: 0
Rotation: 2
Scale: 2
_changeFrameRate: 1
_frameRate: 500
_shareIds: 1
_startOnHeadless: 1
--- !u!114 &1147000878988426880
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aca43cf6f20e77c4f8fcc078fd85081f, type: 3}
m_Name:
m_EditorClassIdentifier:
_remoteServerTimeout: 2
_remoteServerTimeoutDuration: 60
_changeFrameRate: 1
_frameRate: 500
--- !u!114 &6184982229728339744
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7443408887813606051}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ebee11279046f334d88e559c5c2ff08e, type: 3}
m_Name:
m_EditorClassIdentifier:
lobbyNetworkPrefab: {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
--- !u!1001 &2130063410
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Modification: m_Modification:
serializedVersion: 3 serializedVersion: 3
m_TransformParent: {fileID: 7443408887813606049} m_TransformParent: {fileID: 6062897840459347938}
m_Modifications: m_Modifications:
- target: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3} - target: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
propertyPath: m_Pivot.x propertyPath: m_Pivot.x
@ -371,17 +276,40 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4393252310969058994, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
propertyPath: _serverIndicator
value:
objectReference: {fileID: 4655116237963646792}
- target: {fileID: 4393252310969058995, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3} - target: {fileID: 4393252310969058995, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
propertyPath: m_Name propertyPath: m_Name
value: NetworkHudCanvas value: NetworkHudCanvas
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4393252311501663114, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
propertyPath: m_Navigation.m_Mode
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4393252311652982282, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
propertyPath: m_Navigation.m_Mode
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
m_AddedComponents: [] m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
--- !u!224 &4393252310584637084 stripped --- !u!114 &4655116237963646792 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3965864433427628056, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
m_PrefabInstance: {fileID: 8616475966689417040}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!224 &5432511641164911102 stripped
RectTransform: RectTransform:
m_CorrespondingSourceObject: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3} m_CorrespondingSourceObject: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
m_PrefabInstance: {fileID: 2130063410} m_PrefabInstance: {fileID: 8616475966689417040}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 0b650fca685f2eb41a86538aa883e4c1 guid: 804560ce9f2dde14882eb0cc1c63544c
PrefabImporter: PrefabImporter:
externalObjects: {} externalObjects: {}
userData: userData:

View File

@ -0,0 +1,188 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3680835022977216242
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5300185106086715317}
- component: {fileID: 2919080977001261938}
- component: {fileID: 8730031123856442731}
- component: {fileID: 1363271203475156987}
m_Layer: 3
m_Name: Nimble Zone
m_TagString: Zone
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5300185106086715317
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3680835022977216242}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 30, y: 30, z: 30}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 4237693564968936802}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &2919080977001261938
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3680835022977216242}
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
--- !u!135 &8730031123856442731
SphereCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3680835022977216242}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Radius: 0.5
m_Center: {x: 0, y: 0, z: 0}
--- !u!114 &1363271203475156987
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3680835022977216242}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 456d6ebbd09c16d488cbe8451ae0e5f6, type: 3}
m_Name:
m_EditorClassIdentifier:
forcesManager: {fileID: 0}
renderedZoneObject: {fileID: 5479003418548602625}
NimbleZoneColors:
- gravity: 0
color: {r: 0.20188677, g: 1, b: 0.27700332, a: 0.27450982}
- gravity: 1
color: {r: 0.81708485, g: 0.20943397, b: 1, a: 0.27450982}
- gravity: 2
color: {r: 1, g: 0.2396226, b: 0.55570096, a: 0.27450982}
- gravity: 3
color: {r: 0.25471687, g: 0.77203095, b: 1, a: 0.27450982}
- gravity: 4
color: {r: 1, g: 0.4656382, b: 0.2471698, a: 0.27450982}
outsideGravityFunction: 0
zone: 0
rippleFrequency: 12
rippleDensity: 14
rippleAmplitude: 0.1
rippleRadius: 1.62
rippleDuration: 1.2
impactVelocityModifier: 1
minImpact: 0.5
maxVelocity: 70
--- !u!1001 &4415206198913254025
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 5300185106086715317}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalScale.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalScale.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalScale.z
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: -7635826562936255635, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_Materials.Array.data[0]
value:
objectReference: {fileID: 2100000, guid: 78cb0d90576fe15439f3fd294d5eaaba, type: 2}
- target: {fileID: 919132149155446097, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
propertyPath: m_Name
value: Hex Sphere
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
--- !u!4 &4237693564968936802 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
m_PrefabInstance: {fileID: 4415206198913254025}
m_PrefabAsset: {fileID: 0}
--- !u!1 &5479003418548602625 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8164078558771037576, guid: 24300c11f962a8e4f9f8125bd2843705, type: 3}
m_PrefabInstance: {fileID: 4415206198913254025}
m_PrefabAsset: {fileID: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a8cbef7225a60ab49ae0eebd0704a068
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -342,15 +342,14 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2b6244fd2a6ceee4ab8504fadf75ae20, type: 3} m_Script: {fileID: 11500000, guid: 2b6244fd2a6ceee4ab8504fadf75ae20, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
props: {fileID: 0} Props: {fileID: 0}
boostUI: {fileID: 0} CameraOperator: {fileID: 0}
cameraOperator: {fileID: 0} BoostEffect: {fileID: 7234768050496314884}
boostEffect: {fileID: 7234768050496314884} GravityEffect: {fileID: 4872706334040053047}
gravityEffect: {fileID: 4872706334040053047} JetFlameEffect: {fileID: 4832079438170929303}
jetFlameEffect: {fileID: 4832079438170929303} SmokeTrailEffect: {fileID: 3500843490324877803}
smokeTrailEffect: {fileID: 3500843490324877803} FireController: {fileID: 6551228186126772357}
fireController: {fileID: 6551228186126772357} BodyMeshRenderer: {fileID: 8803443673514485770}
bodyMeshRenderer: {fileID: 8803443673514485770}
--- !u!114 &6551228186126772357 --- !u!114 &6551228186126772357
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 6bef8667f8847d440b83722af55e8d58
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -123,6 +123,90 @@ NavMeshSettings:
debug: debug:
m_Flags: 0 m_Flags: 0
m_NavMeshData: {fileID: 0} m_NavMeshData: {fileID: 0}
--- !u!1001 &274956924
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4579574864988307370, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_Enabled
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5145657825830850559, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5145657825830850559, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: _runInBackground
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5432511641164911075, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6062897840459347938, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8717846797815970315, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 9107523058192353959, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_Name
value: Network Manager
objectReference: {fileID: 0}
- target: {fileID: 9107523058192353959, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 9107523058192353959, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
insertIndex: -1
addedObject: {fileID: 1342452924}
m_SourcePrefab: {fileID: 100100000, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
--- !u!1 &618141847 --- !u!1 &618141847
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -510,9 +594,34 @@ MonoBehaviour:
TestScene: 4 TestScene: 4
TestSceneRule: 0 TestSceneRule: 0
TestSceneArena: 2 TestSceneArena: 2
--- !u!1 &1342452914 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 9107523058192353959, guid: 804560ce9f2dde14882eb0cc1c63544c, type: 3}
m_PrefabInstance: {fileID: 274956924}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1342452924
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1342452914}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3fdaae44044276a49a52229c1597e33b, type: 3}
m_Name:
m_EditorClassIdentifier:
_updateOrder: 0
_timingType: 0
_allowTickDropping: 1
_maximumFrameTicks: 3
_tickRate: 60
_pingInterval: 1
_physicsMode: 0
--- !u!1660057539 &9223372036854775807 --- !u!1660057539 &9223372036854775807
SceneRoots: SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_Roots: m_Roots:
- {fileID: 274956924}
- {fileID: 1196590533} - {fileID: 1196590533}
- {fileID: 1164443747} - {fileID: 1164443747}

View File

@ -1386,7 +1386,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 493939003} m_GameObject: {fileID: 493939003}
m_Enabled: 0 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name: m_Name:
@ -2615,7 +2615,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_RenderShadows: 1 m_RenderShadows: 0
m_RequiresDepthTextureOption: 2 m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2 m_RequiresOpaqueTextureOption: 2
m_CameraType: 0 m_CameraType: 0
@ -2627,7 +2627,7 @@ MonoBehaviour:
m_VolumeTrigger: {fileID: 0} m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2 m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 1 m_RenderPostProcessing: 1
m_Antialiasing: 2 m_Antialiasing: 0
m_AntialiasingQuality: 2 m_AntialiasingQuality: 2
m_StopNaN: 0 m_StopNaN: 0
m_Dithering: 0 m_Dithering: 0
@ -5572,7 +5572,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_RenderShadows: 1 m_RenderShadows: 0
m_RequiresDepthTextureOption: 2 m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2 m_RequiresOpaqueTextureOption: 2
m_CameraType: 0 m_CameraType: 0
@ -5584,7 +5584,7 @@ MonoBehaviour:
m_VolumeTrigger: {fileID: 0} m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2 m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 1 m_RenderPostProcessing: 1
m_Antialiasing: 2 m_Antialiasing: 0
m_AntialiasingQuality: 2 m_AntialiasingQuality: 2
m_StopNaN: 0 m_StopNaN: 0
m_Dithering: 0 m_Dithering: 0

View File

@ -7308,6 +7308,7 @@ RectTransform:
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 947241301} - {fileID: 947241301}
- {fileID: 1171990001}
- {fileID: 741838669} - {fileID: 741838669}
- {fileID: 1819197327} - {fileID: 1819197327}
- {fileID: 518253459} - {fileID: 518253459}
@ -11403,14 +11404,14 @@ MonoBehaviour:
m_RequiresOpaqueTextureOption: 2 m_RequiresOpaqueTextureOption: 2
m_CameraType: 0 m_CameraType: 0
m_Cameras: [] m_Cameras: []
m_RendererIndex: -1 m_RendererIndex: 0
m_VolumeLayerMask: m_VolumeLayerMask:
serializedVersion: 2 serializedVersion: 2
m_Bits: 1 m_Bits: 1
m_VolumeTrigger: {fileID: 0} m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2 m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 1 m_RenderPostProcessing: 1
m_Antialiasing: 2 m_Antialiasing: 0
m_AntialiasingQuality: 2 m_AntialiasingQuality: 2
m_StopNaN: 0 m_StopNaN: 0
m_Dithering: 0 m_Dithering: 0
@ -15817,6 +15818,190 @@ MeshRenderer:
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!1001 &1171990000
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 517324376}
m_Modifications:
- target: {fileID: 3132460205455581372, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_text
value: 'Online Test Scene
'
objectReference: {fileID: 0}
- target: {fileID: 3132460205455581372, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_fontSize
value: 45.55
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_SizeDelta.y
value: 77.3
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalPosition.z
value: 0.00002980232
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalRotation.z
value: 1.1641532e-10
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5206892685566439831, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_AnchoredPosition.y
value: -3.9999924
objectReference: {fileID: 0}
- target: {fileID: 5388172141496654257, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Delegates.Array.data[0].callback.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 938928009}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Navigation.m_SelectOnDown
value:
objectReference: {fileID: 741838670}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Navigation.m_SelectOnLeft
value:
objectReference: {fileID: 1876351060}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 3
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 938928009}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: LoadOnlineScene
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: SlimUI.ModernMenu.SlimUIMainMenu, Assembly-CSharp
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_IntArgument
value: 3
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument
value:
objectReference: {fileID: 0}
- target: {fileID: 5388222474218088325, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 5389521700824258581, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_text
value: Online Random (1v1)
objectReference: {fileID: 0}
- target: {fileID: 5389521700824258581, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_textInfo.lineCount
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5389521700824258581, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_textInfo.pageCount
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5389521700824258581, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_textInfo.wordCount
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5389521700824258581, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_textInfo.characterCount
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5429341922959870843, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
propertyPath: m_Name
value: Btn_OnlineMatch
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
--- !u!224 &1171990001 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 5206668379868315107, guid: 817319833dd713d45af5c2121e9649c7, type: 3}
m_PrefabInstance: {fileID: 1171990000}
m_PrefabAsset: {fileID: 0}
--- !u!1 &1178560131 --- !u!1 &1178560131
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -290,165 +290,104 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &963194225 --- !u!1001 &958399869
GameObject: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 963194228}
- component: {fileID: 963194227}
- component: {fileID: 963194226}
- component: {fileID: 963194229}
- component: {fileID: 963194230}
m_Layer: 0
m_Name: Match Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &963194226
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
--- !u!20 &963194227
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_ClearFlags: 1 m_Modification:
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} serializedVersion: 3
m_projectionMatrixMode: 1 m_TransformParent: {fileID: 1533660267}
m_GateFitMode: 2 m_Modifications:
m_FOVAxisMode: 0 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_Iso: 200 propertyPath: FarOutBias
m_ShutterSpeed: 0.005 value: 0.8
m_Aperture: 16 objectReference: {fileID: 0}
m_FocusDistance: 10 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_FocalLength: 17.185572 propertyPath: TiltFactor
m_BladeCount: 5 value: 2
m_Curvature: {x: 2, y: 11} objectReference: {fileID: 0}
m_BarrelClipping: 0.25 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_Anamorphism: 0 propertyPath: ZoomInSpeed
m_SensorSize: {x: 36, y: 24} value: 0.8
m_LensShift: {x: 0, y: 0} objectReference: {fileID: 0}
m_NormalizedViewPortRect: - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
serializedVersion: 2 propertyPath: ZoomInMargin
x: 0 value: 0.3
y: 0 objectReference: {fileID: 0}
width: 1 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
height: 1 propertyPath: ZoomOutSpeed
near clip plane: 0.01 value: 0.6
far clip plane: 200 objectReference: {fileID: 0}
field of view: 60 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
orthographic: 0 propertyPath: ZoomOutMargin
orthographic size: 100 value: 0.5
m_Depth: -1 objectReference: {fileID: 0}
m_CullingMask: - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
serializedVersion: 2 propertyPath: TimeUntilZoomIn
m_Bits: 4294967295 value: 0.2
m_RenderingPath: -1 objectReference: {fileID: 0}
m_TargetTexture: {fileID: 0} - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_TargetDisplay: 0 propertyPath: MaxFollowDistance
m_TargetEye: 3 value: 30
m_HDR: 1 objectReference: {fileID: 0}
m_AllowMSAA: 1 - target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_AllowDynamicResolution: 0 propertyPath: MaxAdditionalDistance
m_ForceIntoRT: 0 value: 45
m_OcclusionCulling: 1 objectReference: {fileID: 0}
m_StereoConvergence: 10 - target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_StereoSeparation: 0.022 propertyPath: m_LocalPosition.x
--- !u!4 &963194228 value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalPosition.z
value: -35
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8410204819688929699, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
propertyPath: m_Name
value: Match Camera
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
--- !u!4 &958399870 stripped
Transform: Transform:
m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 958399869}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -30}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1533660267}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &963194229
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20df0926ff00f0e4dab5fd8ea03a31d2, type: 3}
m_Name:
m_EditorClassIdentifier:
MaxAdditionalDistance: 30
FarOutBias: 0.3
MaxFollowDistance: 100
FollowSpeed: 2
TiltFactor: 1.5
ZoomOutMargin: 142
ZoomInMargin: 190
MinZoomSpeed: 0.4
MaxZoomSpeed: 0.5
--- !u!114 &963194230
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier:
m_RenderShadows: 0
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 1
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
m_TaaSettings:
quality: 3
frameInfluence: 0.1
jitterScale: 1
mipBias: 0
varianceClampScale: 0.9
contrastAdaptiveSharpening: 0
--- !u!1 &1185564589 --- !u!1 &1185564589
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -722,7 +661,7 @@ RectTransform:
- {fileID: 1185564593} - {fileID: 1185564593}
- {fileID: 1361581067} - {fileID: 1361581067}
- {fileID: 3628763} - {fileID: 3628763}
- {fileID: 963194228} - {fileID: 958399870}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: -16.463, y: -183.163, z: -8.528} m_LocalEulerAnglesHint: {x: -16.463, y: -183.163, z: -8.528}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}

View File

@ -26,7 +26,7 @@ RenderSettings:
m_AmbientIntensity: 1 m_AmbientIntensity: 1
m_AmbientMode: 0 m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} m_SkyboxMaterial: {fileID: 2100000, guid: 16bc8a9d5451ca44d8f70575adbece3a, type: 2}
m_HaloStrength: 0.5 m_HaloStrength: 0.5
m_FlareStrength: 1 m_FlareStrength: 1
m_FlareFadeSpeed: 3 m_FlareFadeSpeed: 3
@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1 m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0} m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0} m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1} m_IndirectSpecularColor: {r: 0.16326728, g: 0.16644119, b: 0.17437215, a: 1}
m_UseRadianceAmbientProbe: 0 m_UseRadianceAmbientProbe: 0
--- !u!157 &3 --- !u!157 &3
LightmapSettings: LightmapSettings:
@ -324,91 +324,6 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &241643520
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 934570884, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: _defaultConditions.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 934570884, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: _defaultConditions.Array.data[0]
value:
objectReference: {fileID: 0}
- target: {fileID: 4393252309867130424, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_Navigation.m_Mode
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4393252310051871672, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_Navigation.m_Mode
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4393252310584637056, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: _serverIndicator
value:
objectReference: {fileID: 1159814493}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606049, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606051, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_Name
value: Network Manager
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606060, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: m_Enabled
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7443408887813606060, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
propertyPath: Spawns.Array.size
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
--- !u!1 &273314532 --- !u!1 &273314532
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -551,7 +466,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
m_Navigation: m_Navigation:
m_Mode: 4 m_Mode: 3
m_WrapAround: 0 m_WrapAround: 0
m_SelectOnUp: {fileID: 0} m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0} m_SelectOnDown: {fileID: 0}
@ -891,7 +806,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 0 m_IsActive: 1
--- !u!224 &698819973 --- !u!224 &698819973
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -954,7 +869,7 @@ MonoBehaviour:
m_FallbackScreenDPI: 96 m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96 m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1 m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0 m_PresetInfoIsWorld: 1
--- !u!223 &698819976 --- !u!223 &698819976
Canvas: Canvas:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2025,17 +1940,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1146012455} m_GameObject: {fileID: 1146012455}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!114 &1159814493 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3965864434055344170, guid: 0b650fca685f2eb41a86538aa883e4c1, type: 3}
m_PrefabInstance: {fileID: 241643520}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1171547945 --- !u!1 &1171547945
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2204,10 +2108,10 @@ RectTransform:
- {fileID: 1171547946} - {fileID: 1171547946}
m_Father: {fileID: 1906078487} m_Father: {fileID: 1906078487}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 200, y: -264} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 400, y: 100} m_SizeDelta: {x: 0, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1187019822 --- !u!114 &1187019822
MonoBehaviour: MonoBehaviour:
@ -2838,10 +2742,10 @@ RectTransform:
- {fileID: 1439418891} - {fileID: 1439418891}
m_Father: {fileID: 1906078487} m_Father: {fileID: 1906078487}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 200, y: -157} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 400, y: 100} m_SizeDelta: {x: 0, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1499696674 --- !u!114 &1499696674
MonoBehaviour: MonoBehaviour:
@ -3412,10 +3316,10 @@ RectTransform:
- {fileID: 1063802635} - {fileID: 1063802635}
m_Father: {fileID: 1906078487} m_Father: {fileID: 1906078487}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 200, y: -50} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 400, y: 100} m_SizeDelta: {x: 0, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2056023513 --- !u!114 &2056023513
MonoBehaviour: MonoBehaviour:
@ -3515,6 +3419,5 @@ CanvasRenderer:
SceneRoots: SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_Roots: m_Roots:
- {fileID: 241643520}
- {fileID: 221455202} - {fileID: 221455202}
- {fileID: 1237651455} - {fileID: 1237651455}

View File

@ -1,3 +1,5 @@
using System.Collections.Generic;
using log4net.Config;
using ShipHandling; using ShipHandling;
using UnityEngine; using UnityEngine;
@ -8,24 +10,28 @@ using UnityEngine;
[CreateAssetMenu(fileName = "BaseShip", menuName = "ScriptableObjects/BaseShip")] [CreateAssetMenu(fileName = "BaseShip", menuName = "ScriptableObjects/BaseShip")]
public class BaseShipProperties : ScriptableObject public class BaseShipProperties : ScriptableObject
{ {
[Header("Basic Movement")]
[Tooltip("The acceleration applied on thrust input.")] [Tooltip("The acceleration applied on thrust input.")]
public float thrustAcceleration = 2000; public float thrustAcceleration = 2000;
[Tooltip("The velocity with which the character can rotate around it's center.")] [Tooltip("The velocity with which the character can rotate around it's center.")]
public float steerVelocity = 360; public float steerVelocity = 360;
[Header("Max Velocity & Drag")]
[Tooltip("The standard limit of character velocity.")] [Tooltip("The standard limit of character velocity.")]
public float normalMaxVelocity = 15f; public float normalMaxVelocity = 15f;
[Tooltip("The absolute maximum of character velocity (enforced by drag).")] [Tooltip("The absolute maximum of character velocity (enforced by drag).")]
public float absolutMaxVelocity = 25f; public float absolutMaxVelocity = 25f;
[Tooltip("The amount to which the drift of the character is reduced when anti-drift is active.")]
public float antiDriftAmount = 12;
[Tooltip("The amount to which the drift of the character is always reduced.")]
public float minAntiDriftFactor = 0.03f;
[Tooltip("The drag which acts opposite to the characters movement direction normally.")] [Tooltip("The drag which acts opposite to the characters movement direction normally.")]
public float normalDrag = 5f; public float normalDrag = 5f;
[Tooltip("The maximum drag which can act opposite to the characters movement direction.")] [Tooltip("The maximum drag which can act opposite to the characters movement direction.")]
public float maximumDrag = 10f; public float maximumDrag = 10f;
[Tooltip("The drag which acts opposite to the characters rotation direction normally.")] [Tooltip("The drag which acts opposite to the characters rotation direction normally.")]
public float torqueDrag = 0.2f; public float torqueDrag = 0.2f;
[Header("Anti-Drift")]
[Tooltip("The amount to which the drift of the character is reduced when anti-drift is active.")]
public float antiDriftAmount = 12;
[Tooltip("The amount to which the drift of the character is always reduced.")]
public float minAntiDriftFactor = 0.03f;
[Header("Boost")]
[Tooltip("The time which is used up when a player uses boost.")] [Tooltip("The time which is used up when a player uses boost.")]
public float maxBoostCapacity = 3.3f; public float maxBoostCapacity = 3.3f;
[Tooltip("The point at which a player can boost again when boost is reloading.")] [Tooltip("The point at which a player can boost again when boost is reloading.")]
@ -36,6 +42,7 @@ public class BaseShipProperties : ScriptableObject
public float outsideBoostRate = 0.0f; public float outsideBoostRate = 0.0f;
[Tooltip("The factor of gravity which is eliminated by boosting (1 = no gravity).")] [Tooltip("The factor of gravity which is eliminated by boosting (1 = no gravity).")]
public float boostAntiGravityFactor = 0.33f; public float boostAntiGravityFactor = 0.33f;
[Header("Stun & Tackle")]
[Tooltip("The factor by which the player looses control over the character when being stunned (0 = no control).")] [Tooltip("The factor by which the player looses control over the character when being stunned (0 = no control).")]
public float stunLooseControlFactor = 0.1f; public float stunLooseControlFactor = 0.1f;
[Tooltip("Time until the tackling player can be tackled again")] [Tooltip("Time until the tackling player can be tackled again")]
@ -50,4 +57,6 @@ public class BaseShipProperties : ScriptableObject
public float criticalTacklePowerFactor = 60f; public float criticalTacklePowerFactor = 60f;
[Tooltip("The power with which the character is tackled away, when hit normally.")] [Tooltip("The power with which the character is tackled away, when hit normally.")]
public float normalTacklePowerFactor = 40f; public float normalTacklePowerFactor = 40f;
[Header("Ship sounds")]
public ShipAudio audio;
} }

View File

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using log4net.Config;
using ShipHandling;
using UnityEngine;
/// <summary>
/// Maps all the types of sounds a ship can make,
/// to the names of the sounds that will be used.
/// </summary>
[CreateAssetMenu(fileName = "ShipSounds", menuName = "ScriptableObjects/ShipSounds")]
[ExecuteInEditMode]
public class ShipAudio : ScriptableObject
{
public List<ShipSoundToName> shipSounds = new()
{
new ShipSoundToName(ShipSound.Thruster, "thruster"),
new ShipSoundToName(ShipSound.Booster, "booster"),
new ShipSoundToName(ShipSound.Tackling, "normal_tackle"),
new ShipSoundToName(ShipSound.TacklingCritical, "critical_tackle"),
new ShipSoundToName(ShipSound.EnterZone, "zone_change_in"),
new ShipSoundToName(ShipSound.LeaveZone, "zone_change_out")
};
}
[Serializable]
public class ShipSoundToName
{
public ShipSound sound;
public string soundName;
public ShipSoundToName(ShipSound s, string name)
{
sound = s;
soundName = name;
}
}
public enum ShipSound
{
Thruster,
Booster,
LeaveZone,
EnterZone,
Tackling,
TacklingCritical,
BeingTackled,
BeingTackledCritical,
Dying
}

View File

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

View File

@ -1,3 +1,4 @@
using System.Runtime.InteropServices.WindowsRuntime;
using ShipHandling; using ShipHandling;
using UnityEngine; using UnityEngine;
@ -19,91 +20,91 @@ public class ShipProperties : ScriptableObject
public Color shipHullColor = Color.magenta; public Color shipHullColor = Color.magenta;
[Tooltip("The acceleration applied on thrust input.")] [Tooltip("The acceleration applied on thrust input.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float thrustAccelerationModifier = 1; public float thrustAccelerationModifier = 1;
[HideInInspector] [HideInInspector]
public float thrustAcceleration public float thrustAcceleration
{ get => baseProps.thrustAcceleration * thrustAccelerationModifier; } { get => baseProps.thrustAcceleration * thrustAccelerationModifier; }
[Tooltip("The velocity with which the character can rotate around it's center.")] [Tooltip("The velocity with which the character can rotate around it's center.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float steerVelocityModifier = 1; public float steerVelocityModifier = 1;
[HideInInspector] [HideInInspector]
public float steerVelocity public float steerVelocity
{ get => baseProps.steerVelocity * steerVelocityModifier; } { get => baseProps.steerVelocity * steerVelocityModifier; }
[Tooltip("The standard limit of character velocity.")] [Tooltip("The standard limit of character velocity.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float normalMaxVelocityModifier = 1; public float normalMaxVelocityModifier = 1;
[HideInInspector] [HideInInspector]
public float normalMaxVelocity public float normalMaxVelocity
{ get => baseProps.normalMaxVelocity * normalMaxVelocityModifier; } { get => baseProps.normalMaxVelocity * normalMaxVelocityModifier; }
[Tooltip("The absolute maximum of character velocity (enforced by drag).")] [Tooltip("The absolute maximum of character velocity (enforced by drag).")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float absolutMaxVelocityModifier = 1; public float absolutMaxVelocityModifier = 1;
[HideInInspector] [HideInInspector]
public float absolutMaxVelocity public float absolutMaxVelocity
{ get => baseProps.absolutMaxVelocity * absolutMaxVelocityModifier; } { get => baseProps.absolutMaxVelocity * absolutMaxVelocityModifier; }
[Tooltip("The amount to which the drift of the character is reduced when anti-drift is active.")] [Tooltip("The amount to which the drift of the character is reduced when anti-drift is active.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float antiDriftAmountModifier = 1; public float antiDriftAmountModifier = 1;
[HideInInspector] [HideInInspector]
public float antiDriftAmount public float antiDriftAmount
{ get => baseProps.antiDriftAmount * antiDriftAmountModifier; } { get => baseProps.antiDriftAmount * antiDriftAmountModifier; }
[Tooltip("The amount to which the drift of the character is always reduced.")] [Tooltip("The amount to which the drift of the character is always reduced.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float minAntiDriftFactorModifier = 1; public float minAntiDriftFactorModifier = 1;
[HideInInspector] [HideInInspector]
public float minAntiDriftFactor public float minAntiDriftFactor
{ get => baseProps.minAntiDriftFactor * minAntiDriftFactorModifier; } { get => baseProps.minAntiDriftFactor * minAntiDriftFactorModifier; }
[Tooltip("The drag which acts opposite to the characters movement direction normally.")] [Tooltip("The drag which acts opposite to the characters movement direction normally.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float normalDragModifier = 1; public float normalDragModifier = 1;
[HideInInspector] [HideInInspector]
public float normalDrag public float normalDrag
{ get => baseProps.normalDrag * normalDragModifier; } { get => baseProps.normalDrag * normalDragModifier; }
[Tooltip("The maximum drag which can act opposite to the characters movement direction.")] [Tooltip("The maximum drag which can act opposite to the characters movement direction.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float maximumDragModifier = 1; public float maximumDragModifier = 1;
[HideInInspector] [HideInInspector]
public float maximumDrag public float maximumDrag
{ get => baseProps.maximumDrag * maximumDragModifier; } { get => baseProps.maximumDrag * maximumDragModifier; }
[Tooltip("The drag which acts opposite to the characters rotation direction normally.")] [Tooltip("The drag which acts opposite to the characters rotation direction normally.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float torqueDragModifier = 1; public float torqueDragModifier = 1;
[HideInInspector] [HideInInspector]
public float torqueDrag public float torqueDrag
{ get => baseProps.torqueDrag * torqueDragModifier; } { get => baseProps.torqueDrag * torqueDragModifier; }
[Tooltip("The time which is used up when a player uses boost.")] [Tooltip("The time which is used up when a player uses boost.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float maxBoostCapacityModifier = 1; public float maxBoostCapacityModifier = 1;
[HideInInspector] [HideInInspector]
public float maxBoostCapacity public float maxBoostCapacity
{ get => baseProps.maxBoostCapacity * maxBoostCapacityModifier; } { get => baseProps.maxBoostCapacity * maxBoostCapacityModifier; }
[Tooltip("The point at which a player can boost again when boost is reloading.")] [Tooltip("The point at which a player can boost again when boost is reloading.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float minBoostCapacityModifier = 1; public float minBoostCapacityModifier = 1;
[HideInInspector] [HideInInspector]
public float minBoostCapacity public float minBoostCapacity
{ get => baseProps.minBoostCapacity * minBoostCapacityModifier; } { get => baseProps.minBoostCapacity * minBoostCapacityModifier; }
[Tooltip("The factor with which the thrust is multiplied while boosting.")] [Tooltip("The factor with which the thrust is multiplied while boosting.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float boostMagnitudeModifier = 1; public float boostMagnitudeModifier = 1;
[HideInInspector] [HideInInspector]
public float boostMagnitude public float boostMagnitude
{ get => baseProps.boostMagnitude * boostMagnitudeModifier; } { get => baseProps.boostMagnitude * boostMagnitudeModifier; }
[Tooltip("The flat tax on the boost when outside of a recharging zone (capacity -= rate * time in seconds).")] [Tooltip("The flat tax on the boost when outside of a recharging zone (capacity -= rate * time in seconds).")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float outsideBoostRateModifier = 1; public float outsideBoostRateModifier = 1;
[HideInInspector] [HideInInspector]
public float outsideBoostRate public float outsideBoostRate
@ -111,59 +112,74 @@ public class ShipProperties : ScriptableObject
[Tooltip("The factor of gravity which is eliminated by boosting (1 = no gravity).")] [Tooltip("The factor of gravity which is eliminated by boosting (1 = no gravity).")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float boostAntiGravityFactorModifier = 1; public float boostAntiGravityFactorModifier = 1;
[HideInInspector] [HideInInspector]
public float boostAntiGravityFactor public float boostAntiGravityFactor
{ get => baseProps.boostAntiGravityFactor * boostAntiGravityFactorModifier; } { get => baseProps.boostAntiGravityFactor * boostAntiGravityFactorModifier; }
[Tooltip("The factor by which the player looses control over the character when being stunned (0 = no control).")] [Tooltip("The factor by which the player looses control over the character when being stunned (0 = no control).")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float stunLooseControlFactorModifier = 1; public float stunLooseControlFactorModifier = 1;
[HideInInspector] [HideInInspector]
public float stunLooseControlFactor public float stunLooseControlFactor
{ get => baseProps.stunLooseControlFactor * stunLooseControlFactorModifier; } { get => baseProps.stunLooseControlFactor * stunLooseControlFactorModifier; }
[Tooltip("Time until the tackling player can be tackled again")] [Tooltip("Time until the tackling player can be tackled again")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float tacklingGraceTimeModifier = 1; public float tacklingGraceTimeModifier = 1;
[HideInInspector] [HideInInspector]
public float tacklingGraceTime public float tacklingGraceTime
{ get => baseProps.tacklingGraceTime * tacklingGraceTimeModifier; } { get => baseProps.tacklingGraceTime * tacklingGraceTimeModifier; }
[Tooltip("Time until the tackled player can be tackled again")] [Tooltip("Time until the tackled player can be tackled again")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float tackledGraceTimeModifier = 1; public float tackledGraceTimeModifier = 1;
[HideInInspector] [HideInInspector]
public float tackledGraceTime public float tackledGraceTime
{ get => baseProps.tackledGraceTime * tackledGraceTimeModifier; } { get => baseProps.tackledGraceTime * tackledGraceTimeModifier; }
[Tooltip("The time it takes for a critically stunned character to be controlable again.")] [Tooltip("The time it takes for a critically stunned character to be controlable again.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float tackleCriticalStunTimeModifier = 1; public float tackleCriticalStunTimeModifier = 1;
[HideInInspector] [HideInInspector]
public float tackledCriticalStunTime public float tackledCriticalStunTime
{ get => baseProps.tackledCriticalStunTime * tackleCriticalStunTimeModifier; } { get => baseProps.tackledCriticalStunTime * tackleCriticalStunTimeModifier; }
[Tooltip("The time it takes for a normally stunned character to be controlable again.")] [Tooltip("The time it takes for a normally stunned character to be controlable again.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float tackleBodyStunTimeModifier = 1; public float tackleBodyStunTimeModifier = 1;
[HideInInspector] [HideInInspector]
public float tackledBodyStunTime public float tackledBodyStunTime
{ get => baseProps.tackledBodyStunTime * tackleBodyStunTimeModifier; } { get => baseProps.tackledBodyStunTime * tackleBodyStunTimeModifier; }
[Tooltip("The power with which the character is tackled away, when hit critically.")] [Tooltip("The power with which the character is tackled away, when hit critically.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float criticalTacklePowerFactorModifier = 1; public float criticalTacklePowerFactorModifier = 1;
[HideInInspector] [HideInInspector]
public float criticalTacklePowerFactor public float criticalTacklePowerFactor
{ get => baseProps.criticalTacklePowerFactor * criticalTacklePowerFactorModifier; } { get => baseProps.criticalTacklePowerFactor * criticalTacklePowerFactorModifier; }
[Tooltip("The power with which the character is tackled away, when hit normally.")] [Tooltip("The power with which the character is tackled away, when hit normally.")]
[Range(0.0f, 2.0f)] [Range(0.0f, 10.0f)]
public float normalTacklePowerFactorModifier = 1; public float normalTacklePowerFactorModifier = 1;
[HideInInspector] [HideInInspector]
public float normalTacklePowerFactor public float normalTacklePowerFactor
{ get => baseProps.normalTacklePowerFactor * normalTacklePowerFactorModifier; } { get => baseProps.normalTacklePowerFactor * normalTacklePowerFactorModifier; }
[Tooltip("Overwrite the default ship sounds or leave empty")]
public ShipAudio alternativeShipSounds;
[HideInInspector]
public ShipAudio audio
{
get
{
if (alternativeShipSounds == null)
{
return baseProps.audio;
}
return alternativeShipSounds;
}
}
} }

View File

@ -12,24 +12,25 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d4e63b7217e6a2f499d6da3911f6da33, type: 3} m_Script: {fileID: 11500000, guid: d4e63b7217e6a2f499d6da3911f6da33, type: 3}
m_Name: BaseShip m_Name: BaseShip
m_EditorClassIdentifier: m_EditorClassIdentifier:
thrustAcceleration: 1200 thrustAcceleration: 1300
steerVelocity: 360 steerVelocity: 360
normalMaxVelocity: 18 normalMaxVelocity: 19
absolutMaxVelocity: 27 absolutMaxVelocity: 29
antiDriftAmount: 8
minAntiDriftFactor: 0.01
normalDrag: 5 normalDrag: 5
maximumDrag: 10 maximumDrag: 10
torqueDrag: 0.2 torqueDrag: 0.2
antiDriftAmount: 8
minAntiDriftFactor: 0.5
maxBoostCapacity: 4 maxBoostCapacity: 4
minBoostCapacity: 0.5 minBoostCapacity: 0.5
boostMagnitude: 2 boostMagnitude: 2
outsideBoostRate: 0 outsideBoostRate: 0
boostAntiGravityFactor: 0.62 boostAntiGravityFactor: 0.8
stunLooseControlFactor: 0.1 stunLooseControlFactor: 0.1
tacklingGraceTime: 0.6 tacklingGraceTime: 0.6
tackledGraceTime: 0.3 tackledGraceTime: 0.3
tackledCriticalStunTime: 0.6 tackledCriticalStunTime: 0.6
tackledBodyStunTime: 0.3 tackledBodyStunTime: 0.3
criticalTacklePowerFactor: 300 criticalTacklePowerFactor: 300
normalTacklePowerFactor: 100 normalTacklePowerFactor: 300
audio: {fileID: 11400000, guid: 96db7e9f041aed7459cb776fddee1741, type: 2}

View File

@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 24c3a6ed575143341a4945810b63ab04, type: 3}
m_Name: BaseShipSounds
m_EditorClassIdentifier:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 96db7e9f041aed7459cb776fddee1741
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More