feat: testing FishNet RigidBody prediction, Ship logic refactor
This commit is contained in:
parent
2879e82429
commit
fc7d9a3004
@ -13,8 +13,8 @@ MonoBehaviour:
|
||||
m_Name: Simulator Provider Settings
|
||||
m_EditorClassIdentifier:
|
||||
m_Logging: 1
|
||||
m_AutomaticPerformanceModeEnabled: 1
|
||||
m_EnableBoostOnStartup: 1
|
||||
m_AutomaticPerformanceModeEnabled: 0
|
||||
m_EnableBoostOnStartup: 0
|
||||
m_StatsLoggingFrequencyInFrames: 30
|
||||
m_IndexerSettings:
|
||||
m_Active: 1
|
||||
|
||||
@ -13,18 +13,17 @@ MonoBehaviour:
|
||||
m_Name: DefaultPrefabObjects
|
||||
m_EditorClassIdentifier:
|
||||
_prefabs:
|
||||
- {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3}
|
||||
- {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
|
||||
- {fileID: 4320456058255827552, guid: 65cd4fa5e050652409dd9b062365c7e8, type: 3}
|
||||
- {fileID: 394654179909484550, guid: 9f3e27e33167d704e941e42ded557111, type: 3}
|
||||
- {fileID: 394654179909484550, guid: 5934082513feac04a9b875fc86abe70b, 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: 4512293259955182956, guid: 44611030e61220d42ab7c37ba3c0ea92, type: 3}
|
||||
- {fileID: 4512293259955182956, guid: 0d6d0f48b03b17f49a6340103cd9b9d0, type: 3}
|
||||
- {fileID: 4512293259955182956, guid: f32d4c19de900e64cb73cedcb8ba6f70, type: 3}
|
||||
- {fileID: 4512293259955182956, guid: 300370bdf7819da41937e0beac65b32c, 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}
|
||||
|
||||
@ -107,7 +107,7 @@ Material:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _BaseColorAddSubDiff: {r: 0, g: 0, 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}
|
||||
- _Offset: {r: 0, g: 0, b: 0, a: 0}
|
||||
- _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0}
|
||||
|
||||
8
Assets/FORGE3D Used/Prefabs.meta
Normal file
8
Assets/FORGE3D Used/Prefabs.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 148891fa06cd3324e94f99af935e05f1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
9852
Assets/FORGE3D Used/Prefabs/seeker_bolt_flare_example.prefab
Normal file
9852
Assets/FORGE3D Used/Prefabs/seeker_bolt_flare_example.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,4 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 83319fcfeef06cf4288182309b1387d0
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
37625
Assets/FORGE3D Used/Prefabs/seeker_bolt_hit_example.prefab
Normal file
37625
Assets/FORGE3D Used/Prefabs/seeker_bolt_hit_example.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,4 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 25381a5e43841e943a27b043442b2b4d
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
319
Assets/FORGE3D Used/Prefabs/seeker_bolt_muzzle_example.prefab
Normal file
319
Assets/FORGE3D Used/Prefabs/seeker_bolt_muzzle_example.prefab
Normal 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
|
||||
@ -0,0 +1,4 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 235092330dd93ce4ab3f64b4b4b9c354
|
||||
NativeFormatImporter:
|
||||
userData:
|
||||
@ -29,9 +29,9 @@ MonoBehaviour:
|
||||
- {fileID: 400000, guid: e7b84dec6cdbfb646a33fd06b85cf64e, type: 3}
|
||||
- {fileID: 400000, guid: ec0fb8bef2fb8a5459c55c3700521b70, type: 3}
|
||||
- {fileID: 400010, guid: 2e92e894e0311c14c87f9544b2c88693, type: 3}
|
||||
- {fileID: 400000, guid: 49ca46ce7082ccf4c91329cd9b7c4b61, type: 3}
|
||||
- {fileID: 400010, guid: 762a17aff08aa1f40ac72b27c15fe2d1, type: 3}
|
||||
- {fileID: 400004, guid: 43a8e47b31adb9a47b81c4653b412e5c, type: 3}
|
||||
- {fileID: 400000, guid: 83319fcfeef06cf4288182309b1387d0, type: 3}
|
||||
- {fileID: 400010, guid: 25381a5e43841e943a27b043442b2b4d, type: 3}
|
||||
- {fileID: 400004, guid: 235092330dd93ce4ab3f64b4b4b9c354, type: 3}
|
||||
- {fileID: 400000, guid: 5f10243d9632db04bb987838fb3b36b7, type: 3}
|
||||
- {fileID: 400000, guid: 12e7c1b739173c946b6fa3d40e9f62d1, type: 3}
|
||||
- {fileID: 400004, guid: a980d2b7788c0ef489f3c79f44da79e1, type: 3}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace FORGE3D
|
||||
{
|
||||
@ -60,18 +61,18 @@ namespace FORGE3D
|
||||
public Transform shotGunImpact;
|
||||
public float shotGunOffset;
|
||||
|
||||
[Header("Seeker")] public Transform seekerProjectile;
|
||||
public Transform seekerMuzzle;
|
||||
public Transform seekerImpact;
|
||||
public float seekerOffset;
|
||||
[Header("Seeker")] public Transform seekerProjectile;
|
||||
public Transform seekerMuzzle;
|
||||
public Transform seekerImpact;
|
||||
public float seekerOffset;
|
||||
|
||||
[Header("Rail gun")] public Transform railgunBeam;
|
||||
public Transform railgunMuzzle;
|
||||
public Transform railgunImpact;
|
||||
public float railgunOffset;
|
||||
[Header("Rail gun")] public Transform railgunBeam;
|
||||
public Transform railgunMuzzle;
|
||||
public Transform railgunImpact;
|
||||
public float railgunOffset;
|
||||
|
||||
[Header("Plasma gun")] public Transform plasmagunProjectile;
|
||||
public Transform plasmagunMuzzle;
|
||||
[Header("Plasma gun")] public Transform plasmagunProjectile;
|
||||
public Transform plasmagunMuzzle;
|
||||
public Transform plasmagunImpact;
|
||||
public float plasmaGunOffset;
|
||||
|
||||
@ -346,26 +347,34 @@ namespace FORGE3D
|
||||
private void Seeker()
|
||||
{
|
||||
var offset = Quaternion.Euler(UnityEngine.Random.onUnitSphere);
|
||||
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);
|
||||
}
|
||||
seekerMuzzle =
|
||||
F3DPoolManager.Pools["GeneratedPool"].templates.First(t => t.name == seekerMuzzle.name);
|
||||
seekerProjectile =
|
||||
F3DPoolManager.Pools["GeneratedPool"].templates.First(t => t.name == seekerProjectile.name);
|
||||
|
||||
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
|
||||
public void SeekerImpact(Vector3 pos)
|
||||
{
|
||||
F3DPoolManager.Pools["GeneratedPool"].Spawn(seekerImpact, pos, Quaternion.identity, null);
|
||||
F3DAudioController.instance.SeekerHit(pos);
|
||||
seekerImpact =
|
||||
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
|
||||
|
||||
@ -25,12 +25,13 @@ Transform:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 100000}
|
||||
serializedVersion: 2
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!82 &8200000
|
||||
AudioSource:
|
||||
@ -44,7 +45,7 @@ AudioSource:
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_PlayOnAwake: 0
|
||||
m_Volume: 1
|
||||
m_Volume: 0.5
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
|
||||
22
Assets/FishNet.Config.XML
Normal file
22
Assets/FishNet.Config.XML
Normal 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>
|
||||
7
Assets/FishNet.Config.XML.meta
Normal file
7
Assets/FishNet.Config.XML.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78426568fe449ce44b9aa64cef5c45df
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: baec5a367bebced4da1b56dbcedde312
|
||||
guid: f1525dbf8ebd59e438b504fa19c4fd6c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
|
||||
@ -1275,7 +1275,7 @@ namespace FishNet.Serializing
|
||||
if (collection == null || collection.Length < 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.
|
||||
* 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).
|
||||
@ -1284,9 +1284,9 @@ namespace FishNet.Serializing
|
||||
* 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
|
||||
* 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.
|
||||
if (fullPackType > 0)
|
||||
{
|
||||
|
||||
@ -122,7 +122,7 @@ Material:
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 0
|
||||
- _Shininess: 0
|
||||
- _Smoothness: 0.5
|
||||
- _Smoothness: 0.493
|
||||
- _SmoothnessSource: 0
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecSource: 0
|
||||
@ -133,8 +133,8 @@ Material:
|
||||
- _WorkflowMode: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 5.3403134, g: 0.24957718, b: 0, a: 1}
|
||||
- _SpecColor: {r: 0.19999993, g: 0.19999993, b: 0.19999993, a: 0.5}
|
||||
- _BaseColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _Color: {r: 0, g: 0, b: 0, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0.08780331, b: 0.3882353, a: 1}
|
||||
- _SpecColor: {r: 0, g: 0, b: 0, a: 0.493}
|
||||
m_BuildTextureStacks: []
|
||||
|
||||
31
Assets/Materials/Shader Collection.shadervariants
Normal file
31
Assets/Materials/Shader Collection.shadervariants
Normal 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: []
|
||||
8
Assets/Materials/Shader Collection.shadervariants.meta
Normal file
8
Assets/Materials/Shader Collection.shadervariants.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cd39a7d3b77887345bffd293462e6b51
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 20000000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
13
Assets/Materials/URP PBR Ripples.shadervariants
Normal file
13
Assets/Materials/URP PBR Ripples.shadervariants
Normal 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: []
|
||||
8
Assets/Materials/URP PBR Ripples.shadervariants.meta
Normal file
8
Assets/Materials/URP PBR Ripples.shadervariants.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e50b5a41e8c79fc46b134207b0323580
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 20000000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -21,16 +21,19 @@ Material:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: defaultMat
|
||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
||||
m_Shader: {fileID: 4800000, guid: 8d2bb70cbf9db8d4da26e15b26e74248, type: 3}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_ValidKeywords:
|
||||
- _RECEIVE_SHADOWS_OFF
|
||||
- _SPECULAR_COLOR
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
m_CustomRenderQueue: 2000
|
||||
stringTagMap:
|
||||
RenderType: Opaque
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
@ -110,23 +113,27 @@ Material:
|
||||
- _EnvironmentReflections: 1
|
||||
- _GlossMapScale: 0
|
||||
- _Glossiness: 0
|
||||
- _GlossinessSource: 0
|
||||
- _GlossyReflections: 0
|
||||
- _Metallic: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.005
|
||||
- _QueueOffset: 0
|
||||
- _ReceiveShadows: 1
|
||||
- _ReceiveShadows: 0
|
||||
- _Shininess: 0
|
||||
- _Smoothness: 0.5
|
||||
- _SmoothnessSource: 0
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SpecSource: 0
|
||||
- _SpecularHighlights: 0
|
||||
- _SrcBlend: 1
|
||||
- _SrcBlendAlpha: 1
|
||||
- _Surface: 0
|
||||
- _WorkflowMode: 1
|
||||
- _WorkflowMode: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
|
||||
- _Color: {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.9622641, g: 0.9622641, b: 0.9622641, 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: []
|
||||
|
||||
8
Assets/ParrelSync.meta
Normal file
8
Assets/ParrelSync.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 711bbd1e36ca42a4bad871eb6a3de1bc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/ParrelSync/Editor.meta
Normal file
8
Assets/ParrelSync/Editor.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a31ea7d0315594440839cdb0db6bc411
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/ParrelSync/Editor/AssetModBlock.meta
Normal file
8
Assets/ParrelSync/Editor/AssetModBlock.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b14e706b1e7cb044b23837e8a70cad9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
22
Assets/ParrelSync/Editor/AssetModBlock/EditorQuit.cs
Normal file
22
Assets/ParrelSync/Editor/AssetModBlock/EditorQuit.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/AssetModBlock/EditorQuit.cs.meta
Normal file
11
Assets/ParrelSync/Editor/AssetModBlock/EditorQuit.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bf2888ff90706904abc2d851c3e59e00
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 755e570bd21b39440a923056e60f1450
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
692
Assets/ParrelSync/Editor/ClonesManager.cs
Normal file
692
Assets/ParrelSync/Editor/ClonesManager.cs
Normal 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
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/ClonesManager.cs.meta
Normal file
11
Assets/ParrelSync/Editor/ClonesManager.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6148e48ed6b61d748b187d06d3687b83
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
198
Assets/ParrelSync/Editor/ClonesManagerWindow.cs
Normal file
198
Assets/ParrelSync/Editor/ClonesManagerWindow.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/ClonesManagerWindow.cs.meta
Normal file
11
Assets/ParrelSync/Editor/ClonesManagerWindow.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a041d83486c20b84bbf5077ddfbbca37
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
13
Assets/ParrelSync/Editor/ExternalLinks.cs
Normal file
13
Assets/ParrelSync/Editor/ExternalLinks.cs
Normal 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";
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/ExternalLinks.cs.meta
Normal file
11
Assets/ParrelSync/Editor/ExternalLinks.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 65daf17fbe5101b41977305639f30c65
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
31
Assets/ParrelSync/Editor/FileUtilities.cs
Normal file
31
Assets/ParrelSync/Editor/FileUtilities.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/FileUtilities.cs.meta
Normal file
11
Assets/ParrelSync/Editor/FileUtilities.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 11fdc6f78f8c965499a870ca06dca6bc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/ParrelSync/Editor/NonCore.meta
Normal file
8
Assets/ParrelSync/Editor/NonCore.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 74a7aa389726f964ab34c52e208c2a43
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
78
Assets/ParrelSync/Editor/NonCore/AskFeedbackDialog.cs
Normal file
78
Assets/ParrelSync/Editor/NonCore/AskFeedbackDialog.cs
Normal 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");
|
||||
//}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/NonCore/AskFeedbackDialog.cs.meta
Normal file
11
Assets/ParrelSync/Editor/NonCore/AskFeedbackDialog.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 894412a5b602e6c4ba2cf2d01f4f92b5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
26
Assets/ParrelSync/Editor/NonCore/OtherMenuItem.cs
Normal file
26
Assets/ParrelSync/Editor/NonCore/OtherMenuItem.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/NonCore/OtherMenuItem.cs.meta
Normal file
11
Assets/ParrelSync/Editor/NonCore/OtherMenuItem.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7191fa4bfa12ae749b27f73ed292eaf1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
140
Assets/ParrelSync/Editor/ParrelSyncProjectSettings.cs
Normal file
140
Assets/ParrelSync/Editor/ParrelSyncProjectSettings.cs
Normal 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>()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/ParrelSyncProjectSettings.cs.meta
Normal file
11
Assets/ParrelSync/Editor/ParrelSyncProjectSettings.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c0011418c9d75434988a06b6df93b283
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
215
Assets/ParrelSync/Editor/Preferences.cs
Normal file
215
Assets/ParrelSync/Editor/Preferences.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/Preferences.cs.meta
Normal file
11
Assets/ParrelSync/Editor/Preferences.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24641be1c0410a745b529e61b508679f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
112
Assets/ParrelSync/Editor/Project.cs
Normal file
112
Assets/ParrelSync/Editor/Project.cs
Normal 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";
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/Project.cs.meta
Normal file
11
Assets/ParrelSync/Editor/Project.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ec8d3a1577179ef44815739178cf75b4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
60
Assets/ParrelSync/Editor/UpdateChecker.cs
Normal file
60
Assets/ParrelSync/Editor/UpdateChecker.cs
Normal 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"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/ParrelSync/Editor/UpdateChecker.cs.meta
Normal file
11
Assets/ParrelSync/Editor/UpdateChecker.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3453b3f1a20ea148b5028f8556a7be5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
73
Assets/ParrelSync/Editor/ValidateCopiedFoldersIntegrity.cs
Normal file
73
Assets/ParrelSync/Editor/ValidateCopiedFoldersIntegrity.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8fb344b9abf5274abd744833474b087
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
10
Assets/ParrelSync/package.json
Normal file
10
Assets/ParrelSync/package.json
Normal 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": {}
|
||||
}
|
||||
7
Assets/ParrelSync/package.json.meta
Normal file
7
Assets/ParrelSync/package.json.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a2a889c264e34b47a7349cbcb2cbedd7
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
15
Assets/ParrelSync/projectCloner.asmdef
Normal file
15
Assets/ParrelSync/projectCloner.asmdef
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "ParrelSync",
|
||||
"references": [],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
7
Assets/ParrelSync/projectCloner.asmdef.meta
Normal file
7
Assets/ParrelSync/projectCloner.asmdef.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 894a6cc6ed5cd2645bb542978cbed6a9
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Plugins/ParrelSync.meta
Normal file
8
Assets/Plugins/ParrelSync.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 608c0e7df2f20134aab7dfec8778d7fc
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Plugins/ParrelSync/ScriptableObjects.meta
Normal file
8
Assets/Plugins/ParrelSync/ScriptableObjects.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa6b4a3b25f629048bec9a7ab2a2ae8c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -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: []
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 431b1ef546a3a1b45b9036b005739aa8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -64,7 +64,7 @@ AudioSource:
|
||||
m_Volume: 0.07
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Mute: 1
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
|
||||
@ -64,7 +64,7 @@ AudioSource:
|
||||
m_Volume: 0.092
|
||||
m_Pitch: 1.05
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Mute: 1
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
|
||||
@ -64,7 +64,7 @@ AudioSource:
|
||||
m_Volume: 0.025
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Mute: 1
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
|
||||
@ -64,7 +64,7 @@ AudioSource:
|
||||
m_Volume: 0.025
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Mute: 1
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
|
||||
@ -64,7 +64,7 @@ AudioSource:
|
||||
m_Volume: 0.025
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Mute: 1
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
|
||||
@ -43,9 +43,9 @@ ParticleSystem:
|
||||
m_GameObject: {fileID: 3749816391370857719}
|
||||
serializedVersion: 8
|
||||
lengthInSec: 1000
|
||||
simulationSpeed: 0.55
|
||||
simulationSpeed: 1
|
||||
stopAction: 0
|
||||
cullingMode: 1
|
||||
cullingMode: 0
|
||||
ringBufferMode: 0
|
||||
ringBufferLoopRange: {x: 0, y: 1}
|
||||
emitterVelocityMode: 0
|
||||
@ -568,8 +568,8 @@ ParticleSystem:
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
randomizeRotationDirection: 0
|
||||
gravitySource: 0
|
||||
maxNumParticles: 4500
|
||||
gravitySource: 1
|
||||
maxNumParticles: 3000
|
||||
customEmitterVelocity: {x: 0, y: 0, z: 0}
|
||||
size3D: 0
|
||||
rotation3D: 0
|
||||
@ -945,7 +945,7 @@ ParticleSystem:
|
||||
countCurve:
|
||||
serializedVersion: 2
|
||||
minMaxState: 0
|
||||
scalar: 4500
|
||||
scalar: 3000
|
||||
minScalar: 30
|
||||
maxCurve:
|
||||
serializedVersion: 2
|
||||
@ -4746,11 +4746,11 @@ ParticleSystemRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3749816391370857719}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_CastShadows: 0
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_MotionVectors: 0
|
||||
m_LightProbeUsage: 0
|
||||
m_ReflectionProbeUsage: 0
|
||||
m_RayTracingMode: 0
|
||||
|
||||
@ -102,7 +102,7 @@ Rigidbody:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_ImplicitTensor: 0
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &7443408887813606051
|
||||
--- !u!1 &9107523058192353959
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
@ -8,69 +8,64 @@ GameObject:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7443408887813606049}
|
||||
- component: {fileID: 7443408887813606050}
|
||||
- component: {fileID: 934570884}
|
||||
- component: {fileID: 7443408887813606060}
|
||||
- component: {fileID: 4427988724072666434}
|
||||
- component: {fileID: 937364350749304634}
|
||||
- component: {fileID: 4166310840977298591}
|
||||
- component: {fileID: 6354181707884201360}
|
||||
- component: {fileID: 4931936926189112829}
|
||||
- component: {fileID: 5770411533141640352}
|
||||
- component: {fileID: 2456202277866033903}
|
||||
- component: {fileID: 4080293045635388376}
|
||||
- component: {fileID: 1147000878988426880}
|
||||
- component: {fileID: 6184982229728339744}
|
||||
- component: {fileID: 6062897840459347938}
|
||||
- component: {fileID: 5145657825830850559}
|
||||
- component: {fileID: 6150396533785216161}
|
||||
- component: {fileID: 4579574864988307370}
|
||||
- component: {fileID: 8717846797815970315}
|
||||
- component: {fileID: 7394165842500217854}
|
||||
- component: {fileID: 8967313222978449146}
|
||||
- component: {fileID: 112429329082885301}
|
||||
- component: {fileID: 6958248346439414807}
|
||||
m_Layer: 0
|
||||
m_Name: NetworkManager
|
||||
m_Name: Network Manager
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7443408887813606049
|
||||
m_IsActive: 0
|
||||
--- !u!4 &6062897840459347938
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7443408887813606051}
|
||||
m_GameObject: {fileID: 9107523058192353959}
|
||||
serializedVersion: 2
|
||||
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_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 4393252310584637084}
|
||||
- {fileID: 5432511641164911102}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &7443408887813606050
|
||||
--- !u!114 &5145657825830850559
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {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: d2c95dfde7d73b54dbbdc23155d35d36, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_refreshDefaultPrefabs: 1
|
||||
_refreshDefaultPrefabs: 0
|
||||
_runInBackground: 1
|
||||
_dontDestroyOnLoad: 0
|
||||
_objectPool: {fileID: 0}
|
||||
_persistence: 0
|
||||
_logging: {fileID: 11400000, guid: 1b221f26a1118094c81531b27f6fad43, type: 2}
|
||||
_logging: {fileID: 0}
|
||||
_spawnablePrefabs: {fileID: 11400000, guid: bb50798712a8fcd40b22abbc470201fb, type: 2}
|
||||
--- !u!114 &934570884
|
||||
--- !u!114 &6150396533785216161
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {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: 7d331f979d46e8e4a9fc90070c596d44, type: 3}
|
||||
@ -80,87 +75,50 @@ MonoBehaviour:
|
||||
_levelOfDetailDistances: []
|
||||
_updateHostVisibility: 1
|
||||
_maximumTimedObserversDuration: 10
|
||||
_defaultConditions: []
|
||||
--- !u!114 &7443408887813606060
|
||||
_defaultConditions:
|
||||
- {fileID: 0}
|
||||
--- !u!114 &4579574864988307370
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7443408887813606051}
|
||||
m_Enabled: 0
|
||||
m_GameObject: {fileID: 9107523058192353959}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 211a9f6ec51ddc14f908f5acc0cd0423, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_playerPrefab: {fileID: 6141811525297683108, guid: abf4376f1c6f28241b1125c0eac87199, type: 3}
|
||||
_addToDefaultScene: 1
|
||||
Spawns: []
|
||||
--- !u!114 &4427988724072666434
|
||||
Spawns:
|
||||
- {fileID: 6062897840459347938}
|
||||
--- !u!114 &8717846797815970315
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {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: e08bb003fce297d4086cf8cba5aa459a, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: ebee11279046f334d88e559c5c2ff08e, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_queuedInputs: 1
|
||||
_dropExcessiveReplicates: 1
|
||||
_maximumServerReplicates: 15
|
||||
_redundancyCount: 2
|
||||
_allowPredictedSpawning: 0
|
||||
_reservedObjectIds: 15
|
||||
--- !u!114 &937364350749304634
|
||||
lobbyNetworkPrefab: {fileID: 6527384552577148640, guid: 7b71eecaf6568a847b4b8415852f9e98, type: 3}
|
||||
--- !u!114 &7394165842500217854
|
||||
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: 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_GameObject: {fileID: 9107523058192353959}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 34e4a322dca349547989b14021da4e23, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Transport: {fileID: 2456202277866033903}
|
||||
Transport: {fileID: 8967313222978449146}
|
||||
_intermediateLayer: {fileID: 0}
|
||||
_latencySimulator:
|
||||
_enabled: 0
|
||||
@ -168,13 +126,29 @@ MonoBehaviour:
|
||||
_latency: 0
|
||||
_outOfOrder: 0
|
||||
_packetLoss: 0
|
||||
--- !u!114 &4931936926189112829
|
||||
--- !u!114 &8967313222978449146
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {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_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6f48f002b825cbd45a19bd96d90f9edb, type: 3}
|
||||
@ -188,13 +162,13 @@ MonoBehaviour:
|
||||
_port: 7770
|
||||
_maximumClients: 4095
|
||||
_clientAddress: localhost
|
||||
--- !u!114 &5770411533141640352
|
||||
--- !u!114 &6958248346439414807
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {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: 362dfd7e6009fb44c90beec3df0ad853, type: 3}
|
||||
@ -210,82 +184,13 @@ MonoBehaviour:
|
||||
_port: 443
|
||||
_maximumClients: 2000
|
||||
_clientAddress: localhost
|
||||
--- !u!114 &2456202277866033903
|
||||
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
|
||||
--- !u!1001 &8616475966689417040
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 7443408887813606049}
|
||||
m_TransformParent: {fileID: 6062897840459347938}
|
||||
m_Modifications:
|
||||
- target: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
|
||||
propertyPath: m_Pivot.x
|
||||
@ -371,17 +276,40 @@ PrefabInstance:
|
||||
propertyPath: m_LocalEulerAnglesHint.z
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4393252310969058994, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
|
||||
propertyPath: _serverIndicator
|
||||
value:
|
||||
objectReference: {fileID: 4655116237963646792}
|
||||
- target: {fileID: 4393252310969058995, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
|
||||
propertyPath: m_Name
|
||||
value: NetworkHudCanvas
|
||||
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_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
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:
|
||||
m_CorrespondingSourceObject: {fileID: 4393252310969058990, guid: 0570b6f7f713dc44a90463654bbcd8d0, type: 3}
|
||||
m_PrefabInstance: {fileID: 2130063410}
|
||||
m_PrefabInstance: {fileID: 8616475966689417040}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b650fca685f2eb41a86538aa883e4c1
|
||||
guid: 804560ce9f2dde14882eb0cc1c63544c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
188
Assets/Prefabs/Nimble Zone.prefab
Normal file
188
Assets/Prefabs/Nimble Zone.prefab
Normal 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}
|
||||
7
Assets/Prefabs/Nimble Zone.prefab.meta
Normal file
7
Assets/Prefabs/Nimble Zone.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8cbef7225a60ab49ae0eebd0704a068
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -342,15 +342,14 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 2b6244fd2a6ceee4ab8504fadf75ae20, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
props: {fileID: 0}
|
||||
boostUI: {fileID: 0}
|
||||
cameraOperator: {fileID: 0}
|
||||
boostEffect: {fileID: 7234768050496314884}
|
||||
gravityEffect: {fileID: 4872706334040053047}
|
||||
jetFlameEffect: {fileID: 4832079438170929303}
|
||||
smokeTrailEffect: {fileID: 3500843490324877803}
|
||||
fireController: {fileID: 6551228186126772357}
|
||||
bodyMeshRenderer: {fileID: 8803443673514485770}
|
||||
Props: {fileID: 0}
|
||||
CameraOperator: {fileID: 0}
|
||||
BoostEffect: {fileID: 7234768050496314884}
|
||||
GravityEffect: {fileID: 4872706334040053047}
|
||||
JetFlameEffect: {fileID: 4832079438170929303}
|
||||
SmokeTrailEffect: {fileID: 3500843490324877803}
|
||||
FireController: {fileID: 6551228186126772357}
|
||||
BodyMeshRenderer: {fileID: 8803443673514485770}
|
||||
--- !u!114 &6551228186126772357
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
1120
Assets/Prefabs/Ships/Network Ship.prefab
Normal file
1120
Assets/Prefabs/Ships/Network Ship.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/Ships/Network Ship.prefab.meta
Normal file
7
Assets/Prefabs/Ships/Network Ship.prefab.meta
Normal 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
@ -123,6 +123,90 @@ NavMeshSettings:
|
||||
debug:
|
||||
m_Flags: 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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -510,9 +594,34 @@ MonoBehaviour:
|
||||
TestScene: 4
|
||||
TestSceneRule: 0
|
||||
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
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 274956924}
|
||||
- {fileID: 1196590533}
|
||||
- {fileID: 1164443747}
|
||||
|
||||
@ -1386,7 +1386,7 @@ MonoBehaviour:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 493939003}
|
||||
m_Enabled: 0
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
@ -2615,7 +2615,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_RenderShadows: 1
|
||||
m_RenderShadows: 0
|
||||
m_RequiresDepthTextureOption: 2
|
||||
m_RequiresOpaqueTextureOption: 2
|
||||
m_CameraType: 0
|
||||
@ -2627,7 +2627,7 @@ MonoBehaviour:
|
||||
m_VolumeTrigger: {fileID: 0}
|
||||
m_VolumeFrameworkUpdateModeOption: 2
|
||||
m_RenderPostProcessing: 1
|
||||
m_Antialiasing: 2
|
||||
m_Antialiasing: 0
|
||||
m_AntialiasingQuality: 2
|
||||
m_StopNaN: 0
|
||||
m_Dithering: 0
|
||||
@ -5572,7 +5572,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_RenderShadows: 1
|
||||
m_RenderShadows: 0
|
||||
m_RequiresDepthTextureOption: 2
|
||||
m_RequiresOpaqueTextureOption: 2
|
||||
m_CameraType: 0
|
||||
@ -5584,7 +5584,7 @@ MonoBehaviour:
|
||||
m_VolumeTrigger: {fileID: 0}
|
||||
m_VolumeFrameworkUpdateModeOption: 2
|
||||
m_RenderPostProcessing: 1
|
||||
m_Antialiasing: 2
|
||||
m_Antialiasing: 0
|
||||
m_AntialiasingQuality: 2
|
||||
m_StopNaN: 0
|
||||
m_Dithering: 0
|
||||
|
||||
@ -7308,6 +7308,7 @@ RectTransform:
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 947241301}
|
||||
- {fileID: 1171990001}
|
||||
- {fileID: 741838669}
|
||||
- {fileID: 1819197327}
|
||||
- {fileID: 518253459}
|
||||
@ -11403,14 +11404,14 @@ MonoBehaviour:
|
||||
m_RequiresOpaqueTextureOption: 2
|
||||
m_CameraType: 0
|
||||
m_Cameras: []
|
||||
m_RendererIndex: -1
|
||||
m_RendererIndex: 0
|
||||
m_VolumeLayerMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 1
|
||||
m_VolumeTrigger: {fileID: 0}
|
||||
m_VolumeFrameworkUpdateModeOption: 2
|
||||
m_RenderPostProcessing: 1
|
||||
m_Antialiasing: 2
|
||||
m_Antialiasing: 0
|
||||
m_AntialiasingQuality: 2
|
||||
m_StopNaN: 0
|
||||
m_Dithering: 0
|
||||
@ -15817,6 +15818,190 @@ MeshRenderer:
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@ -290,165 +290,104 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &963194225
|
||||
GameObject:
|
||||
--- !u!1001 &958399869
|
||||
PrefabInstance:
|
||||
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
|
||||
m_ClearFlags: 1
|
||||
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
|
||||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
m_FOVAxisMode: 0
|
||||
m_Iso: 200
|
||||
m_ShutterSpeed: 0.005
|
||||
m_Aperture: 16
|
||||
m_FocusDistance: 10
|
||||
m_FocalLength: 17.185572
|
||||
m_BladeCount: 5
|
||||
m_Curvature: {x: 2, y: 11}
|
||||
m_BarrelClipping: 0.25
|
||||
m_Anamorphism: 0
|
||||
m_SensorSize: {x: 36, y: 24}
|
||||
m_LensShift: {x: 0, y: 0}
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1
|
||||
height: 1
|
||||
near clip plane: 0.01
|
||||
far clip plane: 200
|
||||
field of view: 60
|
||||
orthographic: 0
|
||||
orthographic size: 100
|
||||
m_Depth: -1
|
||||
m_CullingMask:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
m_RenderingPath: -1
|
||||
m_TargetTexture: {fileID: 0}
|
||||
m_TargetDisplay: 0
|
||||
m_TargetEye: 3
|
||||
m_HDR: 1
|
||||
m_AllowMSAA: 1
|
||||
m_AllowDynamicResolution: 0
|
||||
m_ForceIntoRT: 0
|
||||
m_OcclusionCulling: 1
|
||||
m_StereoConvergence: 10
|
||||
m_StereoSeparation: 0.022
|
||||
--- !u!4 &963194228
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 1533660267}
|
||||
m_Modifications:
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: FarOutBias
|
||||
value: 0.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: TiltFactor
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: ZoomInSpeed
|
||||
value: 0.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: ZoomInMargin
|
||||
value: 0.3
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: ZoomOutSpeed
|
||||
value: 0.6
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: ZoomOutMargin
|
||||
value: 0.5
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: TimeUntilZoomIn
|
||||
value: 0.2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: MaxFollowDistance
|
||||
value: 30
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3108387510587612718, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: MaxAdditionalDistance
|
||||
value: 45
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
propertyPath: m_LocalPosition.x
|
||||
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:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_CorrespondingSourceObject: {fileID: 3759513694494416429, guid: 6d819d49a851e2c47b79a5964f456027, type: 3}
|
||||
m_PrefabInstance: {fileID: 958399869}
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -722,7 +661,7 @@ RectTransform:
|
||||
- {fileID: 1185564593}
|
||||
- {fileID: 1361581067}
|
||||
- {fileID: 3628763}
|
||||
- {fileID: 963194228}
|
||||
- {fileID: 958399870}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: -16.463, y: -183.163, z: -8.528}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
|
||||
@ -26,7 +26,7 @@ RenderSettings:
|
||||
m_AmbientIntensity: 1
|
||||
m_AmbientMode: 0
|
||||
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_FlareStrength: 1
|
||||
m_FlareFadeSpeed: 3
|
||||
@ -38,7 +38,7 @@ RenderSettings:
|
||||
m_ReflectionIntensity: 1
|
||||
m_CustomReflection: {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
|
||||
--- !u!157 &3
|
||||
LightmapSettings:
|
||||
@ -324,91 +324,6 @@ Transform:
|
||||
m_Children: []
|
||||
m_Father: {fileID: 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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -551,7 +466,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 4
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
@ -891,7 +806,7 @@ GameObject:
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &698819973
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -954,7 +869,7 @@ MonoBehaviour:
|
||||
m_FallbackScreenDPI: 96
|
||||
m_DefaultSpriteDPI: 96
|
||||
m_DynamicPixelsPerUnit: 1
|
||||
m_PresetInfoIsWorld: 0
|
||||
m_PresetInfoIsWorld: 1
|
||||
--- !u!223 &698819976
|
||||
Canvas:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -2025,17 +1940,6 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1146012455}
|
||||
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
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -2204,10 +2108,10 @@ RectTransform:
|
||||
- {fileID: 1171547946}
|
||||
m_Father: {fileID: 1906078487}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 200, y: -264}
|
||||
m_SizeDelta: {x: 400, y: 100}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1187019822
|
||||
MonoBehaviour:
|
||||
@ -2838,10 +2742,10 @@ RectTransform:
|
||||
- {fileID: 1439418891}
|
||||
m_Father: {fileID: 1906078487}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 200, y: -157}
|
||||
m_SizeDelta: {x: 400, y: 100}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1499696674
|
||||
MonoBehaviour:
|
||||
@ -3412,10 +3316,10 @@ RectTransform:
|
||||
- {fileID: 1063802635}
|
||||
m_Father: {fileID: 1906078487}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 200, y: -50}
|
||||
m_SizeDelta: {x: 400, y: 100}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 100}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2056023513
|
||||
MonoBehaviour:
|
||||
@ -3515,6 +3419,5 @@ CanvasRenderer:
|
||||
SceneRoots:
|
||||
m_ObjectHideFlags: 0
|
||||
m_Roots:
|
||||
- {fileID: 241643520}
|
||||
- {fileID: 221455202}
|
||||
- {fileID: 1237651455}
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using log4net.Config;
|
||||
using ShipHandling;
|
||||
using UnityEngine;
|
||||
|
||||
@ -8,24 +10,28 @@ using UnityEngine;
|
||||
[CreateAssetMenu(fileName = "BaseShip", menuName = "ScriptableObjects/BaseShip")]
|
||||
public class BaseShipProperties : ScriptableObject
|
||||
{
|
||||
[Header("Basic Movement")]
|
||||
[Tooltip("The acceleration applied on thrust input.")]
|
||||
public float thrustAcceleration = 2000;
|
||||
[Tooltip("The velocity with which the character can rotate around it's center.")]
|
||||
public float steerVelocity = 360;
|
||||
[Header("Max Velocity & Drag")]
|
||||
[Tooltip("The standard limit of character velocity.")]
|
||||
public float normalMaxVelocity = 15f;
|
||||
[Tooltip("The absolute maximum of character velocity (enforced by drag).")]
|
||||
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.")]
|
||||
public float normalDrag = 5f;
|
||||
[Tooltip("The maximum drag which can act opposite to the characters movement direction.")]
|
||||
public float maximumDrag = 10f;
|
||||
[Tooltip("The drag which acts opposite to the characters rotation direction normally.")]
|
||||
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.")]
|
||||
public float maxBoostCapacity = 3.3f;
|
||||
[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;
|
||||
[Tooltip("The factor of gravity which is eliminated by boosting (1 = no gravity).")]
|
||||
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).")]
|
||||
public float stunLooseControlFactor = 0.1f;
|
||||
[Tooltip("Time until the tackling player can be tackled again")]
|
||||
@ -50,4 +57,6 @@ public class BaseShipProperties : ScriptableObject
|
||||
public float criticalTacklePowerFactor = 60f;
|
||||
[Tooltip("The power with which the character is tackled away, when hit normally.")]
|
||||
public float normalTacklePowerFactor = 40f;
|
||||
[Header("Ship sounds")]
|
||||
public ShipAudio audio;
|
||||
}
|
||||
50
Assets/ScriptableObjects/ShipAudio.cs
Normal file
50
Assets/ScriptableObjects/ShipAudio.cs
Normal 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
|
||||
}
|
||||
11
Assets/ScriptableObjects/ShipAudio.cs.meta
Normal file
11
Assets/ScriptableObjects/ShipAudio.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24c3a6ed575143341a4945810b63ab04
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,3 +1,4 @@
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using ShipHandling;
|
||||
using UnityEngine;
|
||||
|
||||
@ -19,91 +20,91 @@ public class ShipProperties : ScriptableObject
|
||||
public Color shipHullColor = Color.magenta;
|
||||
|
||||
[Tooltip("The acceleration applied on thrust input.")]
|
||||
[Range(0.0f, 2.0f)]
|
||||
[Range(0.0f, 10.0f)]
|
||||
public float thrustAccelerationModifier = 1;
|
||||
[HideInInspector]
|
||||
public float thrustAcceleration
|
||||
{ get => baseProps.thrustAcceleration * thrustAccelerationModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float steerVelocity
|
||||
{ get => baseProps.steerVelocity * steerVelocityModifier; }
|
||||
|
||||
[Tooltip("The standard limit of character velocity.")]
|
||||
[Range(0.0f, 2.0f)]
|
||||
[Range(0.0f, 10.0f)]
|
||||
public float normalMaxVelocityModifier = 1;
|
||||
[HideInInspector]
|
||||
public float normalMaxVelocity
|
||||
{ get => baseProps.normalMaxVelocity * normalMaxVelocityModifier; }
|
||||
|
||||
[Tooltip("The absolute maximum of character velocity (enforced by drag).")]
|
||||
[Range(0.0f, 2.0f)]
|
||||
[Range(0.0f, 10.0f)]
|
||||
public float absolutMaxVelocityModifier = 1;
|
||||
[HideInInspector]
|
||||
public float absolutMaxVelocity
|
||||
{ get => baseProps.absolutMaxVelocity * absolutMaxVelocityModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float antiDriftAmount
|
||||
{ get => baseProps.antiDriftAmount * antiDriftAmountModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float minAntiDriftFactor
|
||||
{ get => baseProps.minAntiDriftFactor * minAntiDriftFactorModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float normalDrag
|
||||
{ get => baseProps.normalDrag * normalDragModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float maximumDrag
|
||||
{ get => baseProps.maximumDrag * maximumDragModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float torqueDrag
|
||||
{ get => baseProps.torqueDrag * torqueDragModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float maxBoostCapacity
|
||||
{ get => baseProps.maxBoostCapacity * maxBoostCapacityModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float minBoostCapacity
|
||||
{ get => baseProps.minBoostCapacity * minBoostCapacityModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float boostMagnitude
|
||||
{ get => baseProps.boostMagnitude * boostMagnitudeModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float outsideBoostRate
|
||||
@ -111,59 +112,74 @@ public class ShipProperties : ScriptableObject
|
||||
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float boostAntiGravityFactor
|
||||
{ get => baseProps.boostAntiGravityFactor * boostAntiGravityFactorModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float stunLooseControlFactor
|
||||
{ get => baseProps.stunLooseControlFactor * stunLooseControlFactorModifier; }
|
||||
|
||||
[Tooltip("Time until the tackling player can be tackled again")]
|
||||
[Range(0.0f, 2.0f)]
|
||||
[Range(0.0f, 10.0f)]
|
||||
public float tacklingGraceTimeModifier = 1;
|
||||
[HideInInspector]
|
||||
public float tacklingGraceTime
|
||||
{ get => baseProps.tacklingGraceTime * tacklingGraceTimeModifier; }
|
||||
[Tooltip("Time until the tackled player can be tackled again")]
|
||||
|
||||
[Range(0.0f, 2.0f)]
|
||||
[Range(0.0f, 10.0f)]
|
||||
public float tackledGraceTimeModifier = 1;
|
||||
[HideInInspector]
|
||||
public float tackledGraceTime
|
||||
{ get => baseProps.tackledGraceTime * tackledGraceTimeModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float tackledCriticalStunTime
|
||||
{ get => baseProps.tackledCriticalStunTime * tackleCriticalStunTimeModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float tackledBodyStunTime
|
||||
{ get => baseProps.tackledBodyStunTime * tackleBodyStunTimeModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float criticalTacklePowerFactor
|
||||
{ get => baseProps.criticalTacklePowerFactor * criticalTacklePowerFactorModifier; }
|
||||
|
||||
[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;
|
||||
[HideInInspector]
|
||||
public float normalTacklePowerFactor
|
||||
{ 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -12,24 +12,25 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d4e63b7217e6a2f499d6da3911f6da33, type: 3}
|
||||
m_Name: BaseShip
|
||||
m_EditorClassIdentifier:
|
||||
thrustAcceleration: 1200
|
||||
thrustAcceleration: 1300
|
||||
steerVelocity: 360
|
||||
normalMaxVelocity: 18
|
||||
absolutMaxVelocity: 27
|
||||
antiDriftAmount: 8
|
||||
minAntiDriftFactor: 0.01
|
||||
normalMaxVelocity: 19
|
||||
absolutMaxVelocity: 29
|
||||
normalDrag: 5
|
||||
maximumDrag: 10
|
||||
torqueDrag: 0.2
|
||||
antiDriftAmount: 8
|
||||
minAntiDriftFactor: 0.5
|
||||
maxBoostCapacity: 4
|
||||
minBoostCapacity: 0.5
|
||||
boostMagnitude: 2
|
||||
outsideBoostRate: 0
|
||||
boostAntiGravityFactor: 0.62
|
||||
boostAntiGravityFactor: 0.8
|
||||
stunLooseControlFactor: 0.1
|
||||
tacklingGraceTime: 0.6
|
||||
tackledGraceTime: 0.3
|
||||
tackledCriticalStunTime: 0.6
|
||||
tackledBodyStunTime: 0.3
|
||||
criticalTacklePowerFactor: 300
|
||||
normalTacklePowerFactor: 100
|
||||
normalTacklePowerFactor: 300
|
||||
audio: {fileID: 11400000, guid: 96db7e9f041aed7459cb776fddee1741, type: 2}
|
||||
|
||||
14
Assets/ScriptedAssets/BaseProperties/BaseShipSounds.asset
Normal file
14
Assets/ScriptedAssets/BaseProperties/BaseShipSounds.asset
Normal 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:
|
||||
@ -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
Loading…
Reference in New Issue
Block a user