提交修改
This commit is contained in:
72
.codelyignore
Normal file
72
.codelyignore
Normal file
@@ -0,0 +1,72 @@
|
||||
# Codely ignore for Unity (git/Plastic style). Auto-generated by Codely/Continue.
|
||||
# Library: only PackageCache is kept for indexing; rest is cache.
|
||||
|
||||
# Library – ignore all except PackageCache
|
||||
Library/*
|
||||
!Library/PackageCache/
|
||||
!Library/PackageCache/**
|
||||
|
||||
# Temp, Obj, Logs, UserSettings (conventional Unity ignores)
|
||||
Temp/
|
||||
Obj/
|
||||
Logs/
|
||||
UserSettings/
|
||||
Build/
|
||||
Builds/
|
||||
|
||||
# Unity / IDE
|
||||
.utmp/
|
||||
.vs/
|
||||
.consulo/
|
||||
.gradle/
|
||||
*.DotSettings.user
|
||||
ExportedObj/
|
||||
|
||||
# MemoryCaptures / Recordings
|
||||
MemoryCaptures/
|
||||
Recordings/
|
||||
|
||||
# Blender
|
||||
*.blend1
|
||||
*.blend1.meta
|
||||
|
||||
# JetBrains Rider (optional)
|
||||
# Assets/Plugins/Editor/JetBrains*
|
||||
|
||||
# Solution / project / IDE user files
|
||||
*.csproj
|
||||
*.unityproj
|
||||
*.sln
|
||||
*.suo
|
||||
*.tmp
|
||||
*.user
|
||||
*.userprefs
|
||||
*.pidb
|
||||
*.booproj
|
||||
*.svd
|
||||
*.pdb
|
||||
*.mdb
|
||||
*.opendb
|
||||
*.VC.db
|
||||
*.pidb.meta
|
||||
*.pdb.meta
|
||||
*.mdb.meta
|
||||
sysinfo.txt
|
||||
mono_crash.*
|
||||
|
||||
# Build artifacts
|
||||
*.apk
|
||||
*.aab
|
||||
*.app
|
||||
crashlytics-build.properties
|
||||
InitTestScene*.unity*
|
||||
|
||||
# Addressables
|
||||
ServerData
|
||||
Assets/StreamingAssets/aa*
|
||||
Assets/AddressableAssetsData/link.xml*
|
||||
Assets/Addressables_Temp*
|
||||
Assets/AddressableAssetsData/*/*.bin*
|
||||
|
||||
# Visual Scripting generated
|
||||
Assets/Unity.VisualScripting.Generated/
|
||||
5
.vscode/extensions.json
vendored
Normal file
5
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"visualstudiotoolsforunity.vstuc"
|
||||
]
|
||||
}
|
||||
10
.vscode/launch.json
vendored
Normal file
10
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach to Unity",
|
||||
"type": "vstuc",
|
||||
"request": "attach"
|
||||
}
|
||||
]
|
||||
}
|
||||
71
.vscode/settings.json
vendored
Normal file
71
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"files.exclude": {
|
||||
"**/.DS_Store": true,
|
||||
"**/.git": true,
|
||||
"**/.vs": true,
|
||||
"**/.gitmodules": true,
|
||||
"**/.vsconfig": true,
|
||||
"**/*.booproj": true,
|
||||
"**/*.pidb": true,
|
||||
"**/*.suo": true,
|
||||
"**/*.user": true,
|
||||
"**/*.userprefs": true,
|
||||
"**/*.unityproj": true,
|
||||
"**/*.dll": true,
|
||||
"**/*.exe": true,
|
||||
"**/*.pdf": true,
|
||||
"**/*.mid": true,
|
||||
"**/*.midi": true,
|
||||
"**/*.wav": true,
|
||||
"**/*.gif": true,
|
||||
"**/*.ico": true,
|
||||
"**/*.jpg": true,
|
||||
"**/*.jpeg": true,
|
||||
"**/*.png": true,
|
||||
"**/*.psd": true,
|
||||
"**/*.tga": true,
|
||||
"**/*.tif": true,
|
||||
"**/*.tiff": true,
|
||||
"**/*.3ds": true,
|
||||
"**/*.3DS": true,
|
||||
"**/*.fbx": true,
|
||||
"**/*.FBX": true,
|
||||
"**/*.lxo": true,
|
||||
"**/*.LXO": true,
|
||||
"**/*.ma": true,
|
||||
"**/*.MA": true,
|
||||
"**/*.obj": true,
|
||||
"**/*.OBJ": true,
|
||||
"**/*.asset": true,
|
||||
"**/*.cubemap": true,
|
||||
"**/*.flare": true,
|
||||
"**/*.mat": true,
|
||||
"**/*.meta": true,
|
||||
"**/*.prefab": true,
|
||||
"**/*.unity": true,
|
||||
"build/": true,
|
||||
"Build/": true,
|
||||
"Library/": true,
|
||||
"library/": true,
|
||||
"obj/": true,
|
||||
"Obj/": true,
|
||||
"Logs/": true,
|
||||
"logs/": true,
|
||||
"ProjectSettings/": true,
|
||||
"UserSettings/": true,
|
||||
"temp/": true,
|
||||
"Temp/": true
|
||||
},
|
||||
"files.associations": {
|
||||
"*.asset": "yaml",
|
||||
"*.meta": "yaml",
|
||||
"*.prefab": "yaml",
|
||||
"*.unity": "yaml",
|
||||
},
|
||||
"explorer.fileNesting.enabled": true,
|
||||
"explorer.fileNesting.patterns": {
|
||||
"*.sln": "*.csproj",
|
||||
"*.slnx": "*.csproj"
|
||||
},
|
||||
"dotnet.defaultSolution": "Fishing2NetTest.slnx"
|
||||
}
|
||||
6
.vsconfig
Normal file
6
.vsconfig
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||
]
|
||||
}
|
||||
@@ -9,7 +9,8 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: b7915df4cd4da490ab52fc8fa9ee9127, type: 3}
|
||||
m_Name: vInspector Data
|
||||
m_EditorClassIdentifier:
|
||||
items: []
|
||||
m_Script: {fileID: 11500000, guid: 9fa072029bab4df48fef4d84ac836775, type: 3}
|
||||
m_Name: AssetCaches
|
||||
m_EditorClassIdentifier: NBC.Asset.Editor::NBC.Asset.Editor.Caches
|
||||
Assets: []
|
||||
Bundles: []
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 570f929f99741ed49aad0cceac6c7105
|
||||
guid: bc2dab5b568ebf8429604de96d35e9a8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
@@ -9,8 +9,7 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 066cf82f8f80d408c856e48fc8f1127b, type: 3}
|
||||
m_Name: vFavorites Data
|
||||
m_EditorClassIdentifier:
|
||||
pages: []
|
||||
rowScale: 1
|
||||
m_Script: {fileID: 11500000, guid: fb797276877142dfb00042b5dc5064ba, type: 3}
|
||||
m_Name: CollectorSetting
|
||||
m_EditorClassIdentifier: NBC.Asset.Editor::NBC.Asset.Editor.CollectorSetting
|
||||
Packages: []
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 79122942d190042669bd4a184e83db8b
|
||||
guid: b5d230639ac2f4a4794bae0df8b72241
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cd0e9f4a4927f6145887bbb2b491ffe9
|
||||
guid: dc1e56621a87818448f6b50bbb69d901
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
259
Assets/HDRPDefaultResources/DefaultLookDevProfile.asset
Normal file
259
Assets/HDRPDefaultResources/DefaultLookDevProfile.asset
Normal file
@@ -0,0 +1,259 @@
|
||||
%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: d7fd9488000d3734a9e00ee676215985, type: 3}
|
||||
m_Name: DefaultLookDevProfile
|
||||
m_EditorClassIdentifier:
|
||||
components:
|
||||
- {fileID: 8761387877531654226}
|
||||
- {fileID: 1902828633788537306}
|
||||
- {fileID: 1880163708194025631}
|
||||
- {fileID: 2340290907100754200}
|
||||
--- !u!114 &1880163708194025631
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 9008a067f4d626c4d8bc4bc48f04bb89, type: 3}
|
||||
m_Name: AmbientOcclusion
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
rayTracing:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.5
|
||||
directLightingStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
radius:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
spatialBilateralAggressiveness:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
temporalAccumulation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
ghostingReduction:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
blurSharpness:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.1
|
||||
layerMask:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
specularOcclusion:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
occluderMotionRejection:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
receiverMotionRejection:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_StepCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6
|
||||
m_FullResolution:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_MaximumRadiusInPixels:
|
||||
m_OverrideState: 0
|
||||
m_Value: 40
|
||||
m_BilateralUpsample:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_DirectionCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
m_RayLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
m_SampleCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
m_Denoise:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_DenoiserRadius:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
--- !u!114 &1902828633788537306
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 7ddcec8a8eb2d684d833ac8f5d26aebd, type: 3}
|
||||
m_Name: HDShadowSettings
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
maxShadowDistance:
|
||||
m_OverrideState: 1
|
||||
m_Value: 25
|
||||
directionalTransmissionMultiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
cascadeShadowSplitCount:
|
||||
m_OverrideState: 1
|
||||
m_Value: 2
|
||||
cascadeShadowSplit0:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.05
|
||||
cascadeShadowSplit1:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
cascadeShadowSplit2:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.3
|
||||
cascadeShadowBorder0:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
cascadeShadowBorder1:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
cascadeShadowBorder2:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
cascadeShadowBorder3:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
--- !u!114 &2340290907100754200
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 24f077503be6ae942a1e1245dbd53ea9, type: 3}
|
||||
m_Name: Bloom
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
threshold:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.1
|
||||
scatter:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.7
|
||||
tint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
dirtTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
dirtIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
anamorphic:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_Resolution:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
m_HighQualityPrefiltering:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_HighQualityFiltering:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
--- !u!114 &8761387877531654226
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: f086a068d4c5889438831b3ae9afc11c, type: 3}
|
||||
m_Name: Tonemapping
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
mode:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
useFullACES:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
toeStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
toeLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
shoulderStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
shoulderLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
shoulderAngle:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
gamma:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
lutTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
lutContribution:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
neutralHDRRangeReductionMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
acesPreset:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
fallbackMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
hueShiftAmount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
detectPaperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
paperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 300
|
||||
detectBrightnessLimits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
minNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.005
|
||||
maxNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1000
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15c6acaf90c83834db6cef8e66f3abc0
|
||||
guid: c0249bc9528ffb242a4f01ce0d2383f2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
918
Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset
Normal file
918
Assets/HDRPDefaultResources/DefaultSettingsVolumeProfile.asset
Normal file
@@ -0,0 +1,918 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-8770122170507510650
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: a76fd08475e21554b8f284f723dd7cf8, type: 3}
|
||||
m_Name: WaterRendering
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
enable:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
triangleSize:
|
||||
m_OverrideState: 0
|
||||
m_Value: 30
|
||||
ambientProbeDimmer:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
--- !u!114 &-8371540133157610761
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 7a7ff42a8c5be6646ad3975f3a54c1eb, type: 3}
|
||||
m_Name: DiffusionProfileList
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Runtime::UnityEngine.Rendering.HighDefinition.DiffusionProfileList
|
||||
active: 1
|
||||
diffusionProfiles:
|
||||
m_OverrideState: 1
|
||||
m_Value:
|
||||
- {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2}
|
||||
- {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2}
|
||||
--- !u!114 &-7089757308646879465
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: bcf384b154398e341b6b29969c078198, type: 3}
|
||||
m_Name: MotionBlur
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.5
|
||||
maximumVelocity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 200
|
||||
minimumVelocity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
cameraMotionBlur:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
specialCameraClampMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
cameraVelocityClamp:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.05
|
||||
cameraTranslationVelocityClamp:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.05
|
||||
cameraRotationVelocityClamp:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.03
|
||||
depthComparisonExtent:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_SampleCount:
|
||||
m_OverrideState: 1
|
||||
m_Value: 8
|
||||
--- !u!114 &-6026464391438864705
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 7a7ff42a8c5be6646ad3975f3a54c1eb, type: 3}
|
||||
m_Name: DiffusionProfileList
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
diffusionProfiles:
|
||||
m_OverrideState: 1
|
||||
m_Value:
|
||||
- {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2}
|
||||
- {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2}
|
||||
--- !u!114 &-1016694868962581565
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 56b145d2b9ee1ac4f846968484e7485a, type: 3}
|
||||
m_Name: ContactShadows
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
enable:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
length:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
opacity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
distanceScaleFactor:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
maxDistance:
|
||||
m_OverrideState: 0
|
||||
m_Value: 50
|
||||
minDistance:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
fadeDistance:
|
||||
m_OverrideState: 0
|
||||
m_Value: 5
|
||||
fadeInDistance:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
rayBias:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.2
|
||||
thicknessScale:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
m_SampleCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 10
|
||||
--- !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: d7fd9488000d3734a9e00ee676215985, type: 3}
|
||||
m_Name: DefaultSettingsVolumeProfile
|
||||
m_EditorClassIdentifier:
|
||||
components:
|
||||
- {fileID: 7686318427622180703}
|
||||
- {fileID: -1016694868962581565}
|
||||
- {fileID: 7502528774814404555}
|
||||
- {fileID: 7542669330009093999}
|
||||
- {fileID: 1501199423866068322}
|
||||
- {fileID: 5315503232242033309}
|
||||
- {fileID: 1932259527246508038}
|
||||
- {fileID: 448115243408767295}
|
||||
- {fileID: -7089757308646879465}
|
||||
- {fileID: -8770122170507510650}
|
||||
- {fileID: 4981354747274665315}
|
||||
- {fileID: 5305602202033311358}
|
||||
- {fileID: -8371540133157610761}
|
||||
--- !u!114 &448115243408767295
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 59b6606ef2548734bb6d11b9d160bc7e, type: 3}
|
||||
m_Name: HDRISky
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
rotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
skyIntensityMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
exposure:
|
||||
m_OverrideState: 1
|
||||
m_Value: 11
|
||||
multiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
upperHemisphereLuxValue:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.4660715
|
||||
upperHemisphereLuxColor:
|
||||
m_OverrideState: 1
|
||||
m_Value: {x: 0.18750614, y: 0.29181972, z: 0.5}
|
||||
desiredLuxValue:
|
||||
m_OverrideState: 0
|
||||
m_Value: 20000
|
||||
updateMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
updatePeriod:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
includeSunInBaking:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
hdriSky:
|
||||
m_OverrideState: 1
|
||||
m_Value: {fileID: 8900000, guid: 8253d41e6e8b11a4cbe77a4f8f82934d, type: 3}
|
||||
distortionMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
flowmap:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
upperHemisphereOnly:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
scrollOrientation:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
mode: 1
|
||||
customValue: 0
|
||||
additiveValue: 0
|
||||
multiplyValue: 1
|
||||
scrollSpeed:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
mode: 1
|
||||
customValue: 100
|
||||
additiveValue: 0
|
||||
multiplyValue: 1
|
||||
sunInitialRotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: -Infinity
|
||||
lockSun:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
enableBackplate:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
backplateType:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
groundLevel:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
scale:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 32, y: 32}
|
||||
projectionDistance:
|
||||
m_OverrideState: 0
|
||||
m_Value: 16
|
||||
plateRotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
plateTexRotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
plateTexOffset:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: 0}
|
||||
blendAmount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
shadowTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
pointLightShadow:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
dirLightShadow:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
rectLightShadow:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_SkyVersion: 1
|
||||
enableDistortion:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
procedural:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
scrollDirection:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_ObsoleteScrollSpeed:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
--- !u!114 &1501199423866068322
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 24f077503be6ae942a1e1245dbd53ea9, type: 3}
|
||||
m_Name: Bloom
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
threshold:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.2
|
||||
scatter:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.7
|
||||
tint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
dirtTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
dirtIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
anamorphic:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_Resolution:
|
||||
m_OverrideState: 1
|
||||
m_Value: 2
|
||||
m_HighQualityPrefiltering:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
m_HighQualityFiltering:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
--- !u!114 &1932259527246508038
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 0d7593b3a9277ac4696b20006c21dde2, type: 3}
|
||||
m_Name: VisualEnvironment
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
skyType:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
cloudType:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
skyAmbientMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
planetRadius:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6378.1
|
||||
renderingSpace:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
centerMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
planetCenter:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: -6378.1, z: 0}
|
||||
windOrientation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
windSpeed:
|
||||
m_OverrideState: 0
|
||||
m_Value: 100
|
||||
fogType:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_Version: 1
|
||||
--- !u!114 &4981354747274665315
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: d877ec3e844f2ca46830012e8e79319b, type: 3}
|
||||
m_Name: PhysicallyBasedSky
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
rotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
skyIntensityMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
exposure:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
multiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
upperHemisphereLuxValue:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
upperHemisphereLuxColor:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: 0, z: 0}
|
||||
desiredLuxValue:
|
||||
m_OverrideState: 0
|
||||
m_Value: 20000
|
||||
updateMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
updatePeriod:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
includeSunInBaking:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
type:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
atmosphericScattering:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
renderingMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
material:
|
||||
m_OverrideState: 1
|
||||
m_Value: {fileID: -876546973899608171, guid: 02532cbb810fb404db49da84f1efe41e, type: 3}
|
||||
airDensityR:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.04534
|
||||
airDensityG:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.10237241
|
||||
airDensityB:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.23264056
|
||||
airTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 0.9, g: 0.9, b: 1, a: 1}
|
||||
airMaximumAltitude:
|
||||
m_OverrideState: 0
|
||||
m_Value: 55261.973
|
||||
aerosolDensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.01192826
|
||||
aerosolTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 0.9, g: 0.9, b: 0.9, a: 1}
|
||||
aerosolMaximumAltitude:
|
||||
m_OverrideState: 0
|
||||
m_Value: 8289.296
|
||||
aerosolAnisotropy:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.8
|
||||
ozoneDensityDimmer:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
ozoneMinimumAltitude:
|
||||
m_OverrideState: 0
|
||||
m_Value: 10000
|
||||
ozoneLayerWidth:
|
||||
m_OverrideState: 0
|
||||
m_Value: 30000
|
||||
groundTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 0.12156863, g: 0.105882354, b: 0.09411765, a: 1}
|
||||
groundColorTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
groundEmissionTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
groundEmissionMultiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
planetRotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: 0, z: 0}
|
||||
spaceEmissionTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
spaceEmissionMultiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
spaceRotation:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: 0, z: 0}
|
||||
colorSaturation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
alphaSaturation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
alphaMultiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
horizonTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
zenithTint:
|
||||
m_OverrideState: 0
|
||||
m_Value: {r: 1, g: 1, b: 1, a: 1}
|
||||
horizonZenithShift:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_SkyVersion: 3
|
||||
m_ObsoleteEarthPreset:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
planetaryRadius:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6378100
|
||||
planetCenterPosition:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0, y: -6378100, z: 0}
|
||||
--- !u!114 &5305602202033311358
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 8c604242b4dd4c8caa4d1944b94189e0, type: 3}
|
||||
m_Name: HighQualityLineRenderingVolumeComponent
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
enable:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
compositionMode:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0
|
||||
clusterCount:
|
||||
m_OverrideState: 1
|
||||
m_Value: 24
|
||||
sortingQuality:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
tileOpacityThreshold:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.95
|
||||
writeDepthAlphaThreshold:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
--- !u!114 &5315503232242033309
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 2d08ce26990eb1a4a9177b860541e702, type: 3}
|
||||
m_Name: Exposure
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
mode:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1
|
||||
meteringMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
luminanceSource:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
fixedExposure:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
compensation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
limitMin:
|
||||
m_OverrideState: 0
|
||||
m_Value: -10
|
||||
limitMax:
|
||||
m_OverrideState: 0
|
||||
m_Value: 10
|
||||
curveMap:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: -10
|
||||
value: -10
|
||||
inSlope: 0
|
||||
outSlope: 1
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 20
|
||||
value: 20
|
||||
inSlope: 1
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
limitMinCurveMap:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: -10
|
||||
value: -12
|
||||
inSlope: 0
|
||||
outSlope: 1
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 20
|
||||
value: 18
|
||||
inSlope: 1
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
limitMaxCurveMap:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: -10
|
||||
value: -8
|
||||
inSlope: 0
|
||||
outSlope: 1
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 20
|
||||
value: 22
|
||||
inSlope: 1
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
adaptationMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
adaptationSpeedDarkToLight:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
adaptationSpeedLightToDark:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
weightTextureMask:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
histogramPercentages:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 40, y: 90}
|
||||
histogramUseCurveRemapping:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
targetMidGray:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
centerAroundExposureTarget:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
proceduralCenter:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0.5, y: 0.5}
|
||||
proceduralRadii:
|
||||
m_OverrideState: 0
|
||||
m_Value: {x: 0.3, y: 0.3}
|
||||
maskMinIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: -30
|
||||
maskMaxIntensity:
|
||||
m_OverrideState: 0
|
||||
m_Value: 30
|
||||
proceduralSoftness:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
--- !u!114 &7502528774814404555
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 9008a067f4d626c4d8bc4bc48f04bb89, type: 3}
|
||||
m_Name: AmbientOcclusion
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
quality:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
rayTracing:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
intensity:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.5
|
||||
directLightingStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
radius:
|
||||
m_OverrideState: 1
|
||||
m_Value: 1.5
|
||||
spatialBilateralAggressiveness:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
temporalAccumulation:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
ghostingReduction:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
blurSharpness:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.1
|
||||
layerMask:
|
||||
m_OverrideState: 0
|
||||
m_Value:
|
||||
serializedVersion: 2
|
||||
m_Bits: 4294967295
|
||||
specularOcclusion:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
occluderMotionRejection:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
receiverMotionRejection:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_StepCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 6
|
||||
m_FullResolution:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
m_MaximumRadiusInPixels:
|
||||
m_OverrideState: 0
|
||||
m_Value: 40
|
||||
m_BilateralUpsample:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_DirectionCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
m_RayLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
m_SampleCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
m_Denoise:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
m_DenoiserRadius:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
--- !u!114 &7542669330009093999
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: f086a068d4c5889438831b3ae9afc11c, type: 3}
|
||||
m_Name: Tonemapping
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
mode:
|
||||
m_OverrideState: 1
|
||||
m_Value: 2
|
||||
useFullACES:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
toeStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
toeLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
shoulderStrength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
shoulderLength:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.5
|
||||
shoulderAngle:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
gamma:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
lutTexture:
|
||||
m_OverrideState: 0
|
||||
m_Value: {fileID: 0}
|
||||
lutContribution:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
neutralHDRRangeReductionMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 2
|
||||
acesPreset:
|
||||
m_OverrideState: 0
|
||||
m_Value: 3
|
||||
fallbackMode:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
hueShiftAmount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
detectPaperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
paperWhite:
|
||||
m_OverrideState: 0
|
||||
m_Value: 300
|
||||
detectBrightnessLimits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
minNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.005
|
||||
maxNits:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1000
|
||||
--- !u!114 &7686318427622180703
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 3
|
||||
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: 7ddcec8a8eb2d684d833ac8f5d26aebd, type: 3}
|
||||
m_Name: HDShadowSettings
|
||||
m_EditorClassIdentifier:
|
||||
active: 1
|
||||
interCascadeBorders: 1
|
||||
maxShadowDistance:
|
||||
m_OverrideState: 1
|
||||
m_Value: 150
|
||||
directionalTransmissionMultiplier:
|
||||
m_OverrideState: 0
|
||||
m_Value: 1
|
||||
cascadeShadowSplitCount:
|
||||
m_OverrideState: 0
|
||||
m_Value: 4
|
||||
cascadeShadowSplit0:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.05
|
||||
cascadeShadowSplit1:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.15
|
||||
cascadeShadowSplit2:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0.3
|
||||
cascadeShadowBorder0:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.06905067
|
||||
cascadeShadowBorder1:
|
||||
m_OverrideState: 1
|
||||
m_Value: 0.05086228
|
||||
cascadeShadowBorder2:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
cascadeShadowBorder3:
|
||||
m_OverrideState: 0
|
||||
m_Value: 0
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d87cbfe2ec8a9b04aa5c532acc09f9e7
|
||||
guid: 74a4cf74bd523614db86691e288028a3
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
863
Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset
Normal file
863
Assets/HDRPDefaultResources/HDRenderPipelineGlobalSettings.asset
Normal file
@@ -0,0 +1,863 @@
|
||||
%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: 781cc897cf8675041a751163b51f97dd, type: 3}
|
||||
m_Name: HDRenderPipelineGlobalSettings
|
||||
m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Runtime::UnityEngine.Rendering.HighDefinition.HDRenderPipelineGlobalSettings
|
||||
m_CustomPostProcessOrdersSettings:
|
||||
m_Version: 0
|
||||
m_BeforeTransparentCustomPostProcesses:
|
||||
m_InjectionPoint: 0
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_BeforeTAACustomPostProcesses:
|
||||
m_InjectionPoint: 3
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_BeforePostProcessCustomPostProcesses:
|
||||
m_InjectionPoint: 1
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_AfterPostProcessBlursCustomPostProcesses:
|
||||
m_InjectionPoint: 4
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_AfterPostProcessCustomPostProcesses:
|
||||
m_InjectionPoint: 2
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
beforeTransparentCustomPostProcesses: []
|
||||
beforePostProcessCustomPostProcesses: []
|
||||
afterPostProcessBlursCustomPostProcesses: []
|
||||
afterPostProcessCustomPostProcesses: []
|
||||
beforeTAACustomPostProcesses: []
|
||||
m_ShaderStrippingSetting:
|
||||
m_Version: 0
|
||||
m_ExportShaderVariants: 1
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_StripRuntimeDebugShaders: 1
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_SupportRuntimeDebugDisplay: 0
|
||||
m_ExportShaderVariants: 1
|
||||
m_StripDebugVariants: 0
|
||||
DLSSProjectId: 000000
|
||||
useDLSSCustomProjectId: 0
|
||||
supportProbeVolumes: 0
|
||||
autoRegisterDiffusionProfiles: 1
|
||||
analyticDerivativeEmulation: 0
|
||||
analyticDerivativeDebugOutput: 0
|
||||
lensAttenuationMode: 0
|
||||
colorGradingSpace: 0
|
||||
m_ObsoleteDiffusionProfileSettingsList: []
|
||||
specularFade: 0
|
||||
rendererListCulling: 0
|
||||
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
|
||||
m_ObsoleteLookDevVolumeProfile: {fileID: 0}
|
||||
m_ObsoleteRenderingPathDefaultCameraFrameSettings:
|
||||
bitDatas:
|
||||
data1: 5770166122053581
|
||||
data2: 12934340311651418136
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_ObsoleteRenderingPathDefaultBakedOrCustomReflectionFrameSettings:
|
||||
bitDatas:
|
||||
data1: 4643523019153229
|
||||
data2: 12898309406071980048
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_ObsoleteRenderingPathDefaultRealtimeReflectionFrameSettings:
|
||||
bitDatas:
|
||||
data1: 4638910381585229
|
||||
data2: 12898310333516513304
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_ObsoleteRenderingPath:
|
||||
m_Version: 0
|
||||
m_Camera:
|
||||
bitDatas:
|
||||
data1: 5770166122053581
|
||||
data2: 12934340311651418136
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_CustomOrBakedReflection:
|
||||
bitDatas:
|
||||
data1: 4643523019153229
|
||||
data2: 12898309406071980048
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_RealtimeReflection:
|
||||
bitDatas:
|
||||
data1: 4638910381585229
|
||||
data2: 12898310333516513304
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_Settings:
|
||||
m_SettingsList:
|
||||
m_List:
|
||||
- rid: 2550939681210236999
|
||||
- rid: 2550939681210237000
|
||||
- rid: 2550939681210237001
|
||||
- rid: 2550939681210237002
|
||||
- rid: 2550939681210237003
|
||||
- rid: 2550939681210237004
|
||||
- rid: 2550939681210237005
|
||||
- rid: 2550939681210237006
|
||||
- rid: 2550939681210237007
|
||||
- rid: 2550939681210237008
|
||||
- rid: 2550939681210237009
|
||||
- rid: 2550939681210237010
|
||||
- rid: 2550939681210237011
|
||||
- rid: 2550939681210237012
|
||||
- rid: 2550939681210237013
|
||||
- rid: 2550939681210237014
|
||||
- rid: 2550939681210237015
|
||||
- rid: 2550939681210237016
|
||||
- rid: 2550939681210237017
|
||||
- rid: 2550939681210237018
|
||||
- rid: 2550939681210237019
|
||||
- rid: 2550939681210237020
|
||||
- rid: 2550939681210237021
|
||||
- rid: 2550939681210237022
|
||||
- rid: 2550939681210237023
|
||||
- rid: 2550939681210237024
|
||||
- rid: 2550939681210237025
|
||||
- rid: 2550939681210237026
|
||||
- rid: 2550939681210237027
|
||||
- rid: 2550939681210237028
|
||||
- rid: 2550939681210237029
|
||||
- rid: 2550939681210237030
|
||||
- rid: 2550939681210237031
|
||||
- rid: 2550939681210237032
|
||||
- rid: 2550939681210237033
|
||||
- rid: 2550939681210237034
|
||||
m_RuntimeSettings:
|
||||
m_List: []
|
||||
renderingLayerNames:
|
||||
- Default
|
||||
lightLayerName0:
|
||||
lightLayerName1:
|
||||
lightLayerName2:
|
||||
lightLayerName3:
|
||||
lightLayerName4:
|
||||
lightLayerName5:
|
||||
lightLayerName6:
|
||||
lightLayerName7:
|
||||
decalLayerName0:
|
||||
decalLayerName1:
|
||||
decalLayerName2:
|
||||
decalLayerName3:
|
||||
decalLayerName4:
|
||||
decalLayerName5:
|
||||
decalLayerName6:
|
||||
decalLayerName7:
|
||||
apvScenesData:
|
||||
obsoleteSceneBounds:
|
||||
m_Keys: []
|
||||
m_Values: []
|
||||
obsoleteHasProbeVolumes:
|
||||
m_Keys: []
|
||||
m_Values:
|
||||
m_Version: 14
|
||||
references:
|
||||
version: 2
|
||||
RefIds:
|
||||
- rid: 2550939681210236999
|
||||
type: {class: HDRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_DebugFontTex: {fileID: 2800000, guid: a3ad2df0e49aaa341a3b3a80f93b3f66, type: 3}
|
||||
m_ColorGradient: {fileID: 2800000, guid: 4ea52e665573c1644bf05dd9b11fd2a4, type: 3}
|
||||
m_MatcapTex: {fileID: 2800000, guid: e655445a13b501944a2641ea144edda5, type: 3}
|
||||
m_BlueNoise16LTex:
|
||||
- {fileID: 2800000, guid: efa2ea5416a18da46b64f1266464ffc7, type: 3}
|
||||
- {fileID: 2800000, guid: 0330b95d1d741fc4281eac4aec9d2eae, type: 3}
|
||||
- {fileID: 2800000, guid: 8a51abfa06f36a24e8621796aa6cd4b3, type: 3}
|
||||
- {fileID: 2800000, guid: 29f15236a89d7d748abaa25d8f69f614, type: 3}
|
||||
- {fileID: 2800000, guid: 6abadf255584bba4c944b1e00436ef03, type: 3}
|
||||
- {fileID: 2800000, guid: 979eec7b1833b0441a2cc73bf8db2544, type: 3}
|
||||
- {fileID: 2800000, guid: 8f520abb155364c46b0f0748ef34ec0d, type: 3}
|
||||
- {fileID: 2800000, guid: 8b7bdf66a62cb51409d47548bb0d542f, type: 3}
|
||||
- {fileID: 2800000, guid: fed7135c4936ff947b1477236ec392cd, type: 3}
|
||||
- {fileID: 2800000, guid: 3c2108b42cf27e3479d8587367508c6f, type: 3}
|
||||
- {fileID: 2800000, guid: b6fa54cec31997445a1b5fd8e2887484, type: 3}
|
||||
- {fileID: 2800000, guid: 79f42a2cc0e32614ba4e0fee3e0f88b9, type: 3}
|
||||
- {fileID: 2800000, guid: a75de30c08d74744c9e973e42c2e00e5, type: 3}
|
||||
- {fileID: 2800000, guid: c6c47a7f59293a847a8471bb74b9a262, type: 3}
|
||||
- {fileID: 2800000, guid: 55e474b0d2c992240aed7e3bcbebb78a, type: 3}
|
||||
- {fileID: 2800000, guid: b987ab952dc89bc439eebfaf7b977f51, type: 3}
|
||||
- {fileID: 2800000, guid: f242013130364874486ad0854d54b5d9, type: 3}
|
||||
- {fileID: 2800000, guid: 5e40f3339a0a5be4ea4442562c53575a, type: 3}
|
||||
- {fileID: 2800000, guid: 6f6e861d2ff8cd641b424245a18393a0, type: 3}
|
||||
- {fileID: 2800000, guid: 96b4b7db9e972c54db03d280a7924fb8, type: 3}
|
||||
- {fileID: 2800000, guid: f8c387db83f623d4c875b355974b1398, type: 3}
|
||||
- {fileID: 2800000, guid: ba5d54ee870713c41a40c8435ad4fdea, type: 3}
|
||||
- {fileID: 2800000, guid: 98de916e94bbf4541981fe7c1bd7008f, type: 3}
|
||||
- {fileID: 2800000, guid: e013b0f34384ea242b2366eafe8d66b4, type: 3}
|
||||
- {fileID: 2800000, guid: 08e7f74e876f85247ad1104f35322e19, type: 3}
|
||||
- {fileID: 2800000, guid: eaed38d1a2336e14b8fd351f65d3eddb, type: 3}
|
||||
- {fileID: 2800000, guid: 9b47ce76307ef714d9c08f1f7d37a173, type: 3}
|
||||
- {fileID: 2800000, guid: 4cf893d4f07705d40a404330fb6694d5, type: 3}
|
||||
- {fileID: 2800000, guid: 4ba6dd9a348fff64aba90f736da533bd, type: 3}
|
||||
- {fileID: 2800000, guid: faedd3bf25384dc47b38a94a658e19fc, type: 3}
|
||||
- {fileID: 2800000, guid: cb7d595d4b67de146abf1b1f4d45f417, type: 3}
|
||||
- {fileID: 2800000, guid: a836cbb14cfefd54a8b9ca37d6aadde6, type: 3}
|
||||
m_BlueNoise16RGBTex:
|
||||
- {fileID: 2800000, guid: b232903ea527aba4786ab9a725e610e9, type: 3}
|
||||
- {fileID: 2800000, guid: fe6c6d7fed228ae4c9034639926613ff, type: 3}
|
||||
- {fileID: 2800000, guid: 1dae10311eb6da5428b4247f883f9f0c, type: 3}
|
||||
- {fileID: 2800000, guid: 668a0101474cc3149bdf7b69bdaad1eb, type: 3}
|
||||
- {fileID: 2800000, guid: a3a352512b3774b44aeeb7414aafce58, type: 3}
|
||||
- {fileID: 2800000, guid: f3767acdf061ed14380a360366ffe91c, type: 3}
|
||||
- {fileID: 2800000, guid: a0d5f1353077a9d4d9bf0fdfbc07d718, type: 3}
|
||||
- {fileID: 2800000, guid: 5a195bcf888979144a5db9a99c43a747, type: 3}
|
||||
- {fileID: 2800000, guid: 8d79e4efe64973b4ab5c6e3982b15772, type: 3}
|
||||
- {fileID: 2800000, guid: eaf67a58951a945428cb394e81ed3765, type: 3}
|
||||
- {fileID: 2800000, guid: 287dda93fa25eea4fbb9f7f5ef014718, type: 3}
|
||||
- {fileID: 2800000, guid: 4cb7c602f368c2d44b42c51c353e5b2c, type: 3}
|
||||
- {fileID: 2800000, guid: 3fa94aebb9c04c54aa0cebde90c210ff, type: 3}
|
||||
- {fileID: 2800000, guid: aa35bbfe9eac94d49bb95cd8804c51a7, type: 3}
|
||||
- {fileID: 2800000, guid: ba3b2a48f5297c74eb3b4b2771629d60, type: 3}
|
||||
- {fileID: 2800000, guid: 17165acde01c02f4bb45d0ffd25d5158, type: 3}
|
||||
- {fileID: 2800000, guid: 280a79ac7e2b6e940a7199b8f7e10407, type: 3}
|
||||
- {fileID: 2800000, guid: b75a320b602f27c4ab28904a10142a98, type: 3}
|
||||
- {fileID: 2800000, guid: 226149deca448e745a7c377133e6ca7f, type: 3}
|
||||
- {fileID: 2800000, guid: 059fba768df29964e9f07bd4fffb5776, type: 3}
|
||||
- {fileID: 2800000, guid: 9dee14979276d81489a17afa605f3030, type: 3}
|
||||
- {fileID: 2800000, guid: 3963568f414ac1545b64e5f1ff5daf5d, type: 3}
|
||||
- {fileID: 2800000, guid: a96a5d146fa164d4ebd67318a957a75a, type: 3}
|
||||
- {fileID: 2800000, guid: b5fa2a735b9278349a91f3dbb77691c0, type: 3}
|
||||
- {fileID: 2800000, guid: d3c864eb1f6e4b34c91d1931ad0064a3, type: 3}
|
||||
- {fileID: 2800000, guid: 97f308a7009457545a975a9a498499ce, type: 3}
|
||||
- {fileID: 2800000, guid: daa405d7e1e253a40952bed9e9ca63cc, type: 3}
|
||||
- {fileID: 2800000, guid: 4dbadef8044229d47b9a391147dad1c4, type: 3}
|
||||
- {fileID: 2800000, guid: 7ce9507d3d1997743b39f335a7f868fd, type: 3}
|
||||
- {fileID: 2800000, guid: 7641a2b116fafd64d9c3d6459fdfe801, type: 3}
|
||||
- {fileID: 2800000, guid: c6a5e40e6746fef4fa486e8f620ee8d4, type: 3}
|
||||
- {fileID: 2800000, guid: fd4189357c6dfb94fa2d36afbce72086, type: 3}
|
||||
m_OwenScrambledRGBATex: {fileID: 2800000, guid: b0fe077c1ee7d80428f3d8dfa28a027d, type: 3}
|
||||
m_OwenScrambled256Tex: {fileID: 2800000, guid: 2a205358e67aa9e4a94a128ac9362f4e, type: 3}
|
||||
m_ScramblingTex: {fileID: 2800000, guid: bf25cd6288e2c8d43854a61a8496a830, type: 3}
|
||||
m_RankingTile1SPP: {fileID: 2800000, guid: f2fe0251f704c4c478a8063775cffedb, type: 3}
|
||||
m_ScramblingTile1SPP: {fileID: 2800000, guid: 6185473f62ad3e74da4acac5d482917a, type: 3}
|
||||
m_RankingTile8SPP: {fileID: 2800000, guid: af4bd638a4b3eb14781e6441adcdfbb9, type: 3}
|
||||
m_ScramblingTile8SPP: {fileID: 2800000, guid: 152f8b933250a7b448fc2d4d301b9944, type: 3}
|
||||
m_RankingTile256SPP: {fileID: 2800000, guid: 1e604a266c415cd46b36d97cd9220aa8, type: 3}
|
||||
m_ScramblingTile256SPP: {fileID: 2800000, guid: 882fb55d7b3e7c94598a318df9376e32, type: 3}
|
||||
m_EyeCausticLUT: {fileID: 11700000, guid: d4ec12283a044584794485916f4142a9, type: 3}
|
||||
m_HairAttenuationLUT: {fileID: 11700000, guid: d37662e2b254e594abf839dddc5ab653, type: 2}
|
||||
m_HairAzimuthalScatteringLUT: {fileID: 11700000, guid: d217deac7ff61094080126811521ab5b, type: 2}
|
||||
m_HairLongitudinalScatteringLUT: {fileID: 11700000, guid: 0da412d38ea6ba3459322abe6984ca9b, type: 2}
|
||||
m_FilmGrainTex:
|
||||
- {fileID: 2800000, guid: 284a1ac236869fa4eacf377d73c7dff8, type: 3}
|
||||
- {fileID: 2800000, guid: bd74961b009b93145a998ae93a5fc186, type: 3}
|
||||
- {fileID: 2800000, guid: 58c1a5135746f854e8841c70a4b588b9, type: 3}
|
||||
- {fileID: 2800000, guid: bdc6fb6e37de5824bb06e17ac19a8a1d, type: 3}
|
||||
- {fileID: 2800000, guid: e4d8303457ba4854090965d854a7a741, type: 3}
|
||||
- {fileID: 2800000, guid: 75e19bf5d3ef41d489aa05586243b58b, type: 3}
|
||||
- {fileID: 2800000, guid: 6cafd4bed3e420a45a5702d61df0762c, type: 3}
|
||||
- {fileID: 2800000, guid: a187955d1d88a954cb32c3c4e5f0aeda, type: 3}
|
||||
- {fileID: 2800000, guid: 3f3cb0f4924d7a241b82a9081875f30d, type: 3}
|
||||
- {fileID: 2800000, guid: a35bdcb2008832646b3c8d2eb11e38a9, type: 3}
|
||||
m_SMAASearchTex: {fileID: 2800000, guid: dc95d70472e232b438d0fd38651e7ec2, type: 3}
|
||||
m_SMAAAreaTex: {fileID: 2800000, guid: 92e0d85ab4eca874098e7fcf6f8f674e, type: 3}
|
||||
m_DefaultHDRISky: {fileID: 8900000, guid: 8253d41e6e8b11a4cbe77a4f8f82934d, type: 3}
|
||||
m_DefaultCloudMap: {fileID: 2800000, guid: 57a33fc2476a01644865bfde5f06e2f4, type: 3}
|
||||
- rid: 2550939681210237000
|
||||
type: {class: HDRPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_VolumeProfile: {fileID: 11400000, guid: 74a4cf74bd523614db86691e288028a3, type: 2}
|
||||
- rid: 2550939681210237001
|
||||
type: {class: VolumetricCloudsRuntimeResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_VolumetricCloudsCS: {fileID: 7200000, guid: f911a8577fa9a4546a6b255bcf888baf, type: 3}
|
||||
m_VolumetricCloudsTraceCS: {fileID: 7200000, guid: 66eaa9becc91a8646a88c15375af8b86, type: 3}
|
||||
m_VolumetricCloudsTraceShadowsCS: {fileID: 7200000, guid: f350c5c3b41fd1b408aac9076f96610e, type: 3}
|
||||
m_VolumetricCloudsShadowFilterCS: {fileID: 7200000, guid: 771ea9a52996c024095906ac37a8a71f, type: 3}
|
||||
m_VolumetricCloudMapGeneratorCS: {fileID: 7200000, guid: 6b22771f0aa98744cb09f455a5a818cb, type: 3}
|
||||
m_VolumetricCloudsCombinePS: {fileID: 4800000, guid: 12f1a69ddf916f042ae6ce8a994506f3, type: 3}
|
||||
m_CloudLutRainAO: {fileID: 2800000, guid: e0bcfddf26ed5584ba3d8b94d3200114, type: 3}
|
||||
m_WorleyNoise128RGBA: {fileID: 11700000, guid: 1fe54a721d0e2504e89f121c723404a8, type: 3}
|
||||
m_WorleyNoise32RGB: {fileID: 11700000, guid: ec156c314a242914dbb706f73ad78cf2, type: 3}
|
||||
m_PerlinNoise32RGB: {fileID: 11700000, guid: d1aae012f8a4f23478471851f17ff915, type: 3}
|
||||
- rid: 2550939681210237002
|
||||
type: {class: LookDevVolumeProfileSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_VolumeProfile: {fileID: 11400000, guid: c0249bc9528ffb242a4f01ce0d2383f2, type: 2}
|
||||
- rid: 2550939681210237003
|
||||
type: {class: HDRPRayTracingResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_ReflectionRayTracingRT: {fileID: 4807578003741378534, guid: 1a500e5079fba734aa90fe92e70ea131, type: 3}
|
||||
m_ReflectionRayTracingCS: {fileID: 7200000, guid: 591207652a75a4844a89c0b9f45a61f2, type: 3}
|
||||
m_ReflectionBilateralFilterCS: {fileID: 7200000, guid: 07c445e7aa373284a9cc1584ca9b3f84, type: 3}
|
||||
m_ShadowRayTracingRT: {fileID: 4807578003741378534, guid: 6f93cb4dc095de14993f8d2baa972d5b, type: 3}
|
||||
m_ContactShadowRayTracingRT: {fileID: 4807578003741378534, guid: acaf840af875ab541b8f10069b7444c8, type: 3}
|
||||
m_ShadowRayTracingCS: {fileID: 7200000, guid: fc95b5dff16ba594896e211a389c03fc, type: 3}
|
||||
m_ShadowFilterCS: {fileID: 7200000, guid: f71fd853a538bf74e9e5a7228fc14dae, type: 3}
|
||||
m_ForwardRayTracing: {fileID: 4807578003741378534, guid: d3a89a2d3f73b3e4da6f191e844fe68c, type: 3}
|
||||
m_LightClusterBuildCS: {fileID: 7200000, guid: c0625ea908b52854bbf1d456e34026e4, type: 3}
|
||||
m_LightClusterDebugS: {fileID: 4800000, guid: c4d81c6e573560444bb1ea11ae4acfcb, type: 3}
|
||||
m_LightClusterDebugCS: {fileID: 7200000, guid: d48a3a5496d98a44c89f335934805d10, type: 3}
|
||||
m_IndirectDiffuseRayTracingOffRT: {fileID: 4807578003741378534, guid: fbcaf423d9f8e3843b2c046420608293, type: 3}
|
||||
m_IndirectDiffuseRayTracingL1RT: {fileID: 4807578003741378534, guid: 653044b9878c5764e818b20399112284, type: 3}
|
||||
m_IndirectDiffuseRaytracingL2RT: {fileID: 4807578003741378534, guid: 866a72c4868acec4088b0956b9ca73f9, type: 3}
|
||||
m_IndirectDiffuseRayTracingCS: {fileID: 7200000, guid: c5ad968b7cd39114d85dd860b3809087, type: 3}
|
||||
m_AoRayTracingRT: {fileID: 4807578003741378534, guid: 82dc8cd069971d2488c502b0f32b94fb, type: 3}
|
||||
m_AoRayTracingCS: {fileID: 7200000, guid: 10c05366baf9b0a44a827f3ef890b9e6, type: 3}
|
||||
m_SubSurfaceRayTracingRT: {fileID: 4807578003741378534, guid: b29a18f967c92364492508dddf78cff7, type: 3}
|
||||
m_SubSurfaceRayTracingCS: {fileID: 7200000, guid: 4e5684a8dba46fe42a47642f9b0a6b89, type: 3}
|
||||
m_SimpleDenoiserCS: {fileID: 7200000, guid: 74a980f1da9a4f842996035350fe756c, type: 3}
|
||||
m_ReflectionDenoiserCS: {fileID: 7200000, guid: 1b12fb238086d0f49983b4aa72768349, type: 3}
|
||||
m_DiffuseShadowDenoiserCS: {fileID: 7200000, guid: 9af806eab5889a74dad838edc9b07d07, type: 3}
|
||||
m_ReblurPreBlurCS: {fileID: 7200000, guid: 0be88ddf5240d49468d9159340465bfd, type: 3}
|
||||
m_ReblurTemporalAccumulationCS: {fileID: 7200000, guid: 11794ae415a38c747ba65d57d1bb60f9, type: 3}
|
||||
m_ReblurMipGenerationCS: {fileID: 7200000, guid: 44195ddb6d9240646847cbf4f38dfa98, type: 3}
|
||||
m_ReblurHistoryFixCS: {fileID: 7200000, guid: 4cc204b99166a9c40819bc04927c4feb, type: 3}
|
||||
m_ReblurBlurCS: {fileID: 7200000, guid: cff077c60ac76074893014e2f49e3159, type: 3}
|
||||
m_ReblurPostBlurCS: {fileID: 7200000, guid: 965700f9b9e0fec4bb31415ae91f0e09, type: 3}
|
||||
m_ReblurCopyHistoryCS: {fileID: 7200000, guid: 0d5230c403883b84cbf9d1d3b9e57beb, type: 3}
|
||||
m_ReblurTemporalStabilizationCS: {fileID: 7200000, guid: 4feaa605aeff33840b659850ce6bfcc2, type: 3}
|
||||
m_GBufferRayTracingRT: {fileID: 4807578003741378534, guid: e4c61a77b91f35845bbb546b848b18e5, type: 3}
|
||||
m_DeferredRayTracingCS: {fileID: 7200000, guid: 6e5ef632062bc484f812c7976f450ed1, type: 3}
|
||||
m_PathTracingRT: {fileID: 4807578003741378534, guid: c4f4525a058009a409fea974f9ad8d03, type: 3}
|
||||
m_PathTracingSkySamplingDataCS: {fileID: 7200000, guid: 8ef71a4b666992544ac5575a0e599a68, type: 3}
|
||||
m_RayMarchingCS: {fileID: 7200000, guid: 78d9a89700295a4418d0921bf27e1857, type: 3}
|
||||
m_RayBinningCS: {fileID: 7200000, guid: cddcb515ffe9a914893d6d8fc1d85454, type: 3}
|
||||
m_CountTracedRaysCS: {fileID: 7200000, guid: e1f3fa867f1dfbd4ab7dd4d39d2b96d8, type: 3}
|
||||
m_ReflectionFilterMappingTexture: {fileID: 2800000, guid: 82eec49626a00b047ba86244607816c8, type: 3}
|
||||
m_RtasDebugRT: {fileID: 4807578003741378534, guid: 7f98079d20376fd4f8590d58be99ab0d, type: 3}
|
||||
- rid: 2550939681210237004
|
||||
type: {class: DiffusionProfileDefaultSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_AutoRegisterDiffusionProfiles: 0
|
||||
- rid: 2550939681210237005
|
||||
type: {class: AnalyticDerivativeSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_AnalyticDerivativeEmulation: 0
|
||||
m_AnalyticDerivativeDebugOutput: 0
|
||||
- rid: 2550939681210237006
|
||||
type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_DynamicRenderPassCulling: 0
|
||||
- rid: 2550939681210237007
|
||||
type: {class: SpecularFadeSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_SpecularFade: 0
|
||||
- rid: 2550939681210237008
|
||||
type: {class: ColorGradingSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_ColorGradingSpace: 0
|
||||
- rid: 2550939681210237009
|
||||
type: {class: LensSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_LensAttenuationMode: 0
|
||||
- rid: 2550939681210237010
|
||||
type: {class: HDRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_DefaultMaterial: {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2}
|
||||
m_DefaultParticleMaterial: {fileID: 2100000, guid: b739a3f02ff77bf48b7636e64c3e3b4c, type: 2}
|
||||
m_DefaultTerrainMaterial: {fileID: 2100000, guid: 22ff8771d87ef27429e670136399094b, type: 2}
|
||||
m_DefaultMirrorMat: {fileID: 2100000, guid: 6b17274157b33bc45b6a40e7d4ff51fe, type: 2}
|
||||
m_DefaultDecalMat: {fileID: 2100000, guid: 500e733574922d04ea961553b1b26a63, type: 2}
|
||||
m_GUITextureBlit2SRGB: {fileID: 2100000, guid: 6e95c04e4e686554e8bed96ee69f690c, type: 2}
|
||||
- rid: 2550939681210237011
|
||||
type: {class: WaterSystemGlobalSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
m_EnableMaskAndCurrentWaterDecals: 0
|
||||
- rid: 2550939681210237012
|
||||
type: {class: CustomPostProcessOrdersSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_BeforeTransparentCustomPostProcesses:
|
||||
m_InjectionPoint: 0
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_BeforeTAACustomPostProcesses:
|
||||
m_InjectionPoint: 3
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_BeforePostProcessCustomPostProcesses:
|
||||
m_InjectionPoint: 1
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_AfterPostProcessBlursCustomPostProcesses:
|
||||
m_InjectionPoint: 4
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
m_AfterPostProcessCustomPostProcesses:
|
||||
m_InjectionPoint: 2
|
||||
m_CustomPostProcessTypesAsString: []
|
||||
- rid: 2550939681210237013
|
||||
type: {class: WaterSystemRuntimeResources, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_WaterMaterial: {fileID: -876546973899608171, guid: 3fda5e465882bec4d8e64161b681806c, type: 3}
|
||||
m_WaterExclusionMaterial: {fileID: 2100000, guid: 1e520c84f7fd17c46af5586f6632155c, type: 2}
|
||||
m_WaterDecalMaterial: {fileID: -876546973899608171, guid: 7e2c0d424490bfc4698c37245b8c63ed, type: 3}
|
||||
m_WaterSimulationCS: {fileID: 7200000, guid: 32ac7f445960a854595586a600c24034, type: 3}
|
||||
m_FourierTransformCS: {fileID: 7200000, guid: bc2ee21836a0b5147900ef35a6e1f508, type: 3}
|
||||
m_WaterEvaluationCS: {fileID: 7200000, guid: c24e765a2bbaace4d9a0ecec600e1967, type: 3}
|
||||
m_WaterPS: {fileID: -6465566751694194690, guid: 3fda5e465882bec4d8e64161b681806c, type: 3}
|
||||
m_WaterLightingCS: {fileID: 7200000, guid: 05d00ad19f202ee4891fdaa90d6d1b23, type: 3}
|
||||
m_WaterLineCS: {fileID: 7200000, guid: 1e7e38362b5026d44ab4f3ff4a612026, type: 3}
|
||||
m_WaterCausticsPS: {fileID: 4800000, guid: 020d64d10886f754e91664d240248c13, type: 3}
|
||||
m_WaterDecalPS: {fileID: 4800000, guid: cf863cbd7bbd44a43b414caed214ba29, type: 3}
|
||||
m_WaterDeformationCS: {fileID: 7200000, guid: 9b8063fa5834d4243bfca8c68a92d9f1, type: 3}
|
||||
m_WaterFoamCS: {fileID: 7200000, guid: 0d16d14b783e65f4d81dbcece2bd0ef9, type: 3}
|
||||
m_WaterDecalMigrationShader: {fileID: -6465566751694194690, guid: 9f1661ed5b4d6ee4685ad5683b09a903, type: 3}
|
||||
m_FoamMask: {fileID: 2800000, guid: ca1d72d84c34dba4390eab4c86e62f62, type: 3}
|
||||
- rid: 2550939681210237014
|
||||
type: {class: HDRenderPipelineEditorAssets, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_DefaultSettingsVolumeProfile: {fileID: 11400000, guid: f940a8037e6cda542891dc1aac1fa4e8, type: 2}
|
||||
m_LookDevDefaultLookDevVolumeProfile: {fileID: 11400000, guid: 254c4fe87beb7be4fa72e1681edbed02, type: 2}
|
||||
m_DefaultDiffusionProfileSettingsList:
|
||||
- {fileID: 11400000, guid: 404820c4cf36ad944862fa59c56064f0, type: 2}
|
||||
- {fileID: 11400000, guid: 2384dbf2c1c420f45a792fbc315fbfb1, type: 2}
|
||||
- rid: 2550939681210237015
|
||||
type: {class: HDRenderPipelineEditorTextures, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_MoonAlbedo: {fileID: 2800000, guid: cce9f0cf7e606e547a7317aedb4ad6d9, type: 3}
|
||||
- rid: 2550939681210237016
|
||||
type: {class: HDRenderPipelineRuntimeAssets, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_DefaultDiffusionProfile: {fileID: 11400000, guid: 2b7005ba3a4d8474b8cdc34141ad766e, type: 2}
|
||||
m_ComputeMaterialLibrary: {fileID: 11400000, guid: 833ab0ec618db411699ea8cb1a221d0d, type: 2}
|
||||
m_EmissiveCylinderMesh: {fileID: 2534964839176971238, guid: accb6d90f0d50fe4ca0f68159b4323de, type: 3}
|
||||
m_EmissiveQuadMesh: {fileID: 4300000, guid: 1d5a8595286f94f4bb54171d49f473c3, type: 3}
|
||||
m_SphereMesh: {fileID: 4300000, guid: 9e0af751bc36ea146940ba245193e28c, type: 3}
|
||||
- rid: 2550939681210237017
|
||||
type: {class: HDRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_DefaultShader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
|
||||
m_CameraMotionVectorsPS: {fileID: 4800000, guid: 035941b63024d1943af48811c1db20d9, type: 3}
|
||||
m_ColorPyramidPS: {fileID: 4800000, guid: 2fcfb8d92f45e4549b3f0bad5d0654bf, type: 3}
|
||||
m_ColorPyramidCS: {fileID: 7200000, guid: 4e3267a1135742441a14298d8dcac04a, type: 3}
|
||||
m_DepthPyramidCS: {fileID: 7200000, guid: 64a553bb564274041906f78ffba955e4, type: 3}
|
||||
m_MaxZCS: {fileID: 7200000, guid: e95abf8c7230c344595f41c4dd5ff517, type: 3}
|
||||
m_ApplyDistortionPS: {fileID: 4800000, guid: 02ae56f4306413c4a96dcf005cde1971, type: 3}
|
||||
m_CustomPassUtils: {fileID: 4800000, guid: 7e3722d0388000848acb25fd3cc8c088, type: 3}
|
||||
m_CustomPassRenderersUtils: {fileID: 4800000, guid: cef5ba33ee5063d4c8b495d2292e394d, type: 3}
|
||||
m_ClearStencilBufferPS: {fileID: 4800000, guid: 8ea49ef16606acd489439e676ab84040, type: 3}
|
||||
m_CopyStencilBufferPS: {fileID: 4800000, guid: 3d1574f1cdfa0ce4995f9bc79ed7f8ec, type: 3}
|
||||
m_CopyDepthBufferPS: {fileID: 4800000, guid: 42dfcc8fe803ece4096c58630689982f, type: 3}
|
||||
m_BlitPS: {fileID: 4800000, guid: e22fc1942c664490980b8793dd4a163d, type: 3}
|
||||
m_BlitColorAndDepthPS: {fileID: 4800000, guid: b22ad378c678348729d3a3f981b9f270, type: 3}
|
||||
m_DownsampleDepthPS: {fileID: 4800000, guid: 67d6171b0acc6554aad48c845ec7e67f, type: 3}
|
||||
m_UpsampleTransparentPS: {fileID: 4800000, guid: 2ad7ce40f0dbaf64dadef1f58d8524d3, type: 3}
|
||||
m_ResolveStencilCS: {fileID: 7200000, guid: 65b89cac5f286b043a31bf8041776ee7, type: 3}
|
||||
m_DebugDisplayLatlongPS: {fileID: 4800000, guid: c1d1d149a043a5349ba367da6c2051ba, type: 3}
|
||||
m_DebugViewMaterialGBufferPS: {fileID: 4800000, guid: 439949ea1bfa91b4ba0d04269fcde33d, type: 3}
|
||||
m_DebugViewTilesPS: {fileID: 4800000, guid: c7c2bd17b06ceb4468e14081aaf1b96f, type: 3}
|
||||
m_DebugFullScreenPS: {fileID: 4800000, guid: e874aca2df8300a488258738c31f85cf, type: 3}
|
||||
m_DebugColorPickerPS: {fileID: 4800000, guid: 8137b807709e178498f22ed710864bb0, type: 3}
|
||||
m_DebugExposurePS: {fileID: 4800000, guid: 0ef322534f047a34c96d29419d56d17a, type: 3}
|
||||
m_DebugHDRPS: {fileID: 4800000, guid: 9bc5229549892084da43ad706d84f1bc, type: 3}
|
||||
m_DebugLightVolumePS: {fileID: 4800000, guid: 8e706c0e71fcec34a8f5c9713e5e2943, type: 3}
|
||||
m_DebugLightVolumeCS: {fileID: 7200000, guid: f5d5d21faef5cf445ac2c5d8ff9c4184, type: 3}
|
||||
m_DebugBlitQuad: {fileID: 4800000, guid: cf5ca5b6ef18b3f429ed707ee9ceac9f, type: 3}
|
||||
m_DebugViewVirtualTexturingBlit: {fileID: 4800000, guid: 55d195396b03b804eb78c92d468e3c8e, type: 3}
|
||||
m_MaterialError: {fileID: 4800000, guid: 79a966a5200a456188dec0d48d805614, type: 3}
|
||||
m_MaterialLoading: {fileID: 4800000, guid: 392325671f122f540be9033ca5ae7a56, type: 3}
|
||||
m_ClearDebugBufferCS: {fileID: 7200000, guid: 7fc6041d5cf70004aa33bb1ac64e3c06, type: 3}
|
||||
m_DebugWaveformPS: {fileID: 4800000, guid: 0024f9d09a828734192f3e1cd5931745, type: 3}
|
||||
m_DebugWaveformCS: {fileID: 7200000, guid: 62b785f79355903428a21d5d8f8aeabe, type: 3}
|
||||
m_DebugVectorscopePS: {fileID: 4800000, guid: 7a09af24008164d40ae85ccd6bf87e17, type: 3}
|
||||
m_DebugVectorscopeCS: {fileID: 7200000, guid: 6a70efb18a2b2964c8eb0fc04aba20e9, type: 3}
|
||||
m_DebugImageHistogramCS: {fileID: 7200000, guid: 52cc17ef5a5ffc443a5c142f9b745a85, type: 3}
|
||||
m_DebugHDRxyMappingCS: {fileID: 7200000, guid: f055d2983d992b64494f1a03fc725cde, type: 3}
|
||||
m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 22de19bc461f84742857dd64c56b0397, type: 3}
|
||||
m_PlanarReflectionFilteringCS: {fileID: 7200000, guid: 9f3f8a01b8caaaa4595591dc96d43dd2, type: 3}
|
||||
m_ScreenSpaceGlobalIlluminationCS: {fileID: 7200000, guid: 96170a954eb538b40a5ff369552c3629, type: 3}
|
||||
m_ScreenSpaceReflectionsCS: {fileID: 7200000, guid: d1de9ac7d9016204da289affe9677942, type: 3}
|
||||
m_ClearDispatchIndirectCS: {fileID: 7200000, guid: fc1f553acb80a6446a32d33e403d0656, type: 3}
|
||||
m_ClearLightListsCS: {fileID: 7200000, guid: 743eb3491795b9545955695d591195a1, type: 3}
|
||||
m_BuildDispatchIndirectCS: {fileID: 7200000, guid: 4eb1b418be7044c40bb5200496c50f14, type: 3}
|
||||
m_BuildScreenAABBCS: {fileID: 7200000, guid: 728dce960f8a9c44bbc3abb3b851d8f6, type: 3}
|
||||
m_BuildPerTileLightListCS: {fileID: 7200000, guid: 65af3444cbf4b3747a4dead7ee00cfee, type: 3}
|
||||
m_BuildPerBigTileLightListCS: {fileID: 7200000, guid: 5ee1f9d6e09abe045b2f5e0b784b9072, type: 3}
|
||||
m_BuildPerVoxelLightListCS: {fileID: 7200000, guid: 0bb1b7e0ddcd5c44baf3ddc7456eb196, type: 3}
|
||||
m_LightListClusterClearAtomicIndexCS: {fileID: 7200000, guid: 1e3472a94b14a334a93230bbc700d7b2, type: 3}
|
||||
m_BuildMaterialFlagsCS: {fileID: 7200000, guid: fb3eda953cd6e634e877fb777be2cd08, type: 3}
|
||||
m_DeferredCS: {fileID: 7200000, guid: 0b64f79746d2daf4198eaf6eab9af259, type: 3}
|
||||
m_VolumeVoxelizationCS: {fileID: 7200000, guid: c20b371db720da244b73830ec74a343a, type: 3}
|
||||
m_VolumetricLightingCS: {fileID: 7200000, guid: b4901a10df2d1e24282725e9fbc77c97, type: 3}
|
||||
m_VolumetricLightingFilteringCS: {fileID: 7200000, guid: ef9a910d0ec6ebb41ae3f5c7a69daf46, type: 3}
|
||||
m_DefaultFogVolumeShader: {fileID: -6465566751694194690, guid: 95060fe3e070428418e64e6bed27b111, type: 3}
|
||||
m_ScreenSpaceMultipleScatteringCS: {fileID: 7200000, guid: 29c79555731a206478f0ea448352340c, type: 3}
|
||||
m_SubsurfaceScatteringCS: {fileID: 7200000, guid: b06a7993621def248addd55d0fe931b1, type: 3}
|
||||
m_SubsurfaceScatteringDownsampleCS: {fileID: 7200000, guid: 4f8aaf0160a259e499fdfac512ca2692, type: 3}
|
||||
m_CombineLightingPS: {fileID: 4800000, guid: 2e37131331fbdca449b1a2bc47a639ca, type: 3}
|
||||
m_BlitCubemapPS: {fileID: 4800000, guid: d05913e251bed7a4992c921c62e1b647, type: 3}
|
||||
m_OpaqueAtmosphericScatteringPS: {fileID: 4800000, guid: 32f724728cf19904291226f239ec16f0, type: 3}
|
||||
m_HdriSkyPS: {fileID: 4800000, guid: 9bd32a6ece529fd4f9408b8d7e00c10d, type: 3}
|
||||
m_IntegrateHdriSkyPS: {fileID: 4800000, guid: 48db2705cf2856d4e893eb30a6892d1b, type: 3}
|
||||
m_SkyboxCubemapPS: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_GradientSkyPS: {fileID: 4800000, guid: 2b5d4f1b26f03dc4a873b093e0c4adb1, type: 3}
|
||||
m_AmbientProbeConvolutionCS: {fileID: 7200000, guid: 6d048f7b1bd45e840b4e79ec92639fa8, type: 3}
|
||||
m_GroundIrradiancePrecomputationCS: {fileID: 7200000, guid: eb6ae6f326207ee4d987a3e5adddf63a, type: 3}
|
||||
m_InScatteredRadiancePrecomputationCS: {fileID: 7200000, guid: 70c69d514688f8545855680760d77418, type: 3}
|
||||
m_PhysicallyBasedSkyPS: {fileID: 4800000, guid: a06934a4863e778498be65d8f865b7a4, type: 3}
|
||||
m_CloudLayerPS: {fileID: 4800000, guid: 001a47fa123e95a4bba13ecb0442d944, type: 3}
|
||||
m_BakeCloudTextureCS: {fileID: 7200000, guid: 09a7f6850ee9fb4439e5ebd632127da5, type: 3}
|
||||
m_BakeCloudShadowsCS: {fileID: 7200000, guid: 3e7317e0800c066448ee07a3e47f102b, type: 3}
|
||||
m_SkyLUTGenerator: {fileID: 7200000, guid: 79224112d91b32241be6b65802863db4, type: 3}
|
||||
m_LineStagePrepareCS: {fileID: 7200000, guid: 53231d98bbe64477aacc1adc14ba2619, type: 3}
|
||||
m_LineStageSetupSegmentCS: {fileID: 7200000, guid: 028836c66d494d8d94e1b2ca7d5382ae, type: 3}
|
||||
m_LineStageShadingSetupCS: {fileID: 7200000, guid: fefde0fac988da24a93bc2d8d6e0a0a1, type: 3}
|
||||
m_LineStageRasterBinCS: {fileID: 7200000, guid: 17d1e3e43f0e4c878b40b52848a58a77, type: 3}
|
||||
m_LineStageWorkQueueCS: {fileID: 7200000, guid: dae4ea8aeff24b16be3f0b2948e0acc5, type: 3}
|
||||
m_LineStageRasterFineCS: {fileID: 7200000, guid: 8691ac13e67d457abb92eca75e88e995, type: 3}
|
||||
m_LineCompositePS: {fileID: 4800000, guid: 8d9fbe0862434a2298748d335b9abea5, type: 3}
|
||||
m_PreIntegratedFGD_GGXDisneyDiffusePS: {fileID: 4800000, guid: 123f13d52852ef547b2962de4bd9eaad, type: 3}
|
||||
m_PreIntegratedFGD_CharlieFabricLambertPS: {fileID: 4800000, guid: 3b3bf235775cf8b4baae7f3306787ab0, type: 3}
|
||||
m_PreIntegratedFGD_WardPS: {fileID: 4800000, guid: d279c46a545b0af4f9f0c4fa82cd489e, type: 3}
|
||||
m_PreIntegratedFGD_CookTorrancePS: {fileID: 4800000, guid: a6402c19b020b4a4fb7073aaa2e26aba, type: 3}
|
||||
m_PreIntegratedFGD_MarschnerPS: {fileID: 4800000, guid: 31f36caf0a5e7f848a1b5328b6ad3eb8, type: 3}
|
||||
m_PreIntegratedFiberScatteringCS: {fileID: 7200000, guid: 4a087c9d074552c48aeb85184d56312e, type: 3}
|
||||
m_VolumetricMaterialCS: {fileID: 7200000, guid: 26f18c9cb0bccbf4481f8c84579affb1, type: 3}
|
||||
m_EyeMaterialCS: {fileID: 7200000, guid: 76f78ba05cea1ed449c1ef613ab90597, type: 3}
|
||||
m_FilterAreaLightCookiesPS: {fileID: 4800000, guid: c243aac96dda5fa40bed693ed5ba02c4, type: 3}
|
||||
m_BuildProbabilityTablesCS: {fileID: 7200000, guid: b9f26cf340afe9145a699753531b2a4c, type: 3}
|
||||
m_ComputeGgxIblSampleDataCS: {fileID: 7200000, guid: 764a24bb47ef5ba4781d9ae82ca07445, type: 3}
|
||||
m_GGXConvolvePS: {fileID: 4800000, guid: 123ed592ad5c2494b8aed301fd609e7b, type: 3}
|
||||
m_CharlieConvolvePS: {fileID: 4800000, guid: 5685fd17e71045e4ca9fefca38a7c177, type: 3}
|
||||
m_GpuPrefixSumCS: {fileID: 7200000, guid: 76fcf27f72d24907b1846939a7a2d83f, type: 3}
|
||||
m_GpuSortCS: {fileID: 7200000, guid: e485b8d649234276ababbd36fcec8c1a, type: 3}
|
||||
m_BilateralUpsampleCS: {fileID: 7200000, guid: 68e831c555284d741b985e05369f0e63, type: 3}
|
||||
m_TemporalFilterCS: {fileID: 7200000, guid: 741979ff70f7bd6489fbcb464280ecff, type: 3}
|
||||
m_DiffuseDenoiserCS: {fileID: 7200000, guid: b4ed2382141619f40af1f743a84ccaea, type: 3}
|
||||
m_FurnaceTestCS: {fileID: 7200000, guid: 9c19385e40e70ea41811a942a46b04a3, type: 3}
|
||||
m_ObjectIDPS: {fileID: -6465566751694194690, guid: 89daf81f8e8f6634da726cbca859ca38, type: 3}
|
||||
m_ComputeThicknessPS: {fileID: 4800000, guid: 4d2c6daf0d4968748bb5b82d5016fdea, type: 3}
|
||||
m_CopyChannelCS: {fileID: 7200000, guid: a4d45eda75e8e474dbe24a31f741f3b4, type: 3}
|
||||
m_ClearBuffer2D: {fileID: 7200000, guid: fa9b66253270e9c47a67ae142f669eb4, type: 3}
|
||||
m_EncodeBC6HCS: {fileID: 7200000, guid: aa922d239de60304f964e24488559eeb, type: 3}
|
||||
m_CubeToPanoPS: {fileID: 4800000, guid: 595434cc3b6405246b6cd3086d0b6f7d, type: 3}
|
||||
m_BlitCubeTextureFacePS: {fileID: 4800000, guid: d850d0a2481878d4bbf17e5126b04163, type: 3}
|
||||
m_ClearUIntTextureCS: {fileID: 7200000, guid: d067ad4b88af51c498875426894aef76, type: 3}
|
||||
m_Texture3DAtlasCS: {fileID: 7200000, guid: 81522e314a83afd4a8ed43bd00757051, type: 3}
|
||||
m_XrMirrorViewPS: {fileID: 4800000, guid: e6255f98cf405eb45ab6f9006cf11e1f, type: 3}
|
||||
m_XrOcclusionMeshPS: {fileID: 4800000, guid: 46a45b32bb110604fb36216b63bcdb81, type: 3}
|
||||
m_ContactShadowCS: {fileID: 7200000, guid: 3e6900e06dc185a4380af4dacb4db0a4, type: 3}
|
||||
m_ScreenSpaceShadowPS: {fileID: 4800000, guid: bfa43a48695613b4ea19c58858ae1a61, type: 3}
|
||||
m_ShadowClearPS: {fileID: 4800000, guid: e3cab24f27741f44d8af1e94d006267c, type: 3}
|
||||
m_EvsmBlurCS: {fileID: 7200000, guid: fb36979473602464fa32deacb9630c08, type: 3}
|
||||
m_DebugHDShadowMapPS: {fileID: 4800000, guid: 93d40cc9a6e13994f86f576a624efa18, type: 3}
|
||||
m_DebugLocalVolumetricFogAtlasPS: {fileID: 4800000, guid: 8371b763f09c7304889c22aa97ebdfd2, type: 3}
|
||||
m_MomentShadowsCS: {fileID: 7200000, guid: 4dea53e2ff15ed0448817c2aa4246e53, type: 3}
|
||||
m_ShadowBlitPS: {fileID: 4800000, guid: ca059f1af4587a24b9a9eed3b66cff0f, type: 3}
|
||||
m_DecalNormalBufferPS: {fileID: 4800000, guid: fd532bf1795188c4daaa66ea798b8b0a, type: 3}
|
||||
m_GTAOCS: {fileID: 7200000, guid: 6710b06492bd58c4bb8aec0fdc1fced3, type: 3}
|
||||
m_GTAOSpatialDenoiseCS: {fileID: 7200000, guid: 2cb33c21587d12b4388d7866ab6c65f6, type: 3}
|
||||
m_GTAOTemporalDenoiseCS: {fileID: 7200000, guid: 31e0ca4c210f97c468037d11a5b832bb, type: 3}
|
||||
m_GTAOCopyHistoryCS: {fileID: 7200000, guid: 7f43be57ffd12ff469d4fc175c00c4b4, type: 3}
|
||||
m_GTAOBlurAndUpsample: {fileID: 7200000, guid: 9eb1abde882538a4ea46fa23e49ab9fa, type: 3}
|
||||
m_CopyAlphaCS: {fileID: 7200000, guid: c2c7eb6611725264187721ef9df0354b, type: 3}
|
||||
m_NanKillerCS: {fileID: 7200000, guid: 83982f199acf927499576a99abc9bea9, type: 3}
|
||||
m_ExposureCS: {fileID: 7200000, guid: 976d7bce54fae534fb9ec67e9c18570c, type: 3}
|
||||
m_HistogramExposureCS: {fileID: 7200000, guid: 222da48299136f34b8e3fb75ae9f8ac7, type: 3}
|
||||
m_ApplyExposureCS: {fileID: 7200000, guid: 1a6fea1dc099b984d8f2b27d504dc096, type: 3}
|
||||
m_UberPostCS: {fileID: 7200000, guid: f1bf52f7c71bffd4f91e6cd90d12a4f7, type: 3}
|
||||
m_LutBuilder3DCS: {fileID: 7200000, guid: 37f2b1b0ecd6f1c439e4c1b4f2fdb524, type: 3}
|
||||
m_DepthOfFieldKernelCS: {fileID: 7200000, guid: 7869415cc3e4eaa4d82ac21a752a2780, type: 3}
|
||||
m_DepthOfFieldCoCCS: {fileID: 7200000, guid: 048b235b54fbfaa4d80ec85ea847d4f8, type: 3}
|
||||
m_DepthOfFieldCoCReprojectCS: {fileID: 7200000, guid: 4980decaa3878d6448569489f5fc7931, type: 3}
|
||||
m_DepthOfFieldDilateCS: {fileID: 7200000, guid: 1c93af4338c0c1b42b92464992eebc10, type: 3}
|
||||
m_DepthOfFieldMipCS: {fileID: 7200000, guid: d3ef53de069ded64e8377cba6eb951fa, type: 3}
|
||||
m_DepthOfFieldMipSafeCS: {fileID: 7200000, guid: 2d24ee7b2c804d947a5c371c12ed46bd, type: 3}
|
||||
m_DepthOfFieldPrefilterCS: {fileID: 7200000, guid: f2b89d19910854346b792fe7177ce634, type: 3}
|
||||
m_DepthOfFieldTileMaxCS: {fileID: 7200000, guid: 84f84585ea8a7a849bea4a581adb93a7, type: 3}
|
||||
m_DepthOfFieldGatherCS: {fileID: 7200000, guid: 486be52dddc4e054fb10a7b9b78788c2, type: 3}
|
||||
m_DepthOfFieldCombineCS: {fileID: 7200000, guid: c8049ca85c4c7d047ba28f34d800c663, type: 3}
|
||||
m_DepthOfFieldPreCombineFarCS: {fileID: 7200000, guid: 3b4a2acd03d1ce2438d93c325d588735, type: 3}
|
||||
m_DepthOfFieldClearIndirectArgsCS: {fileID: 7200000, guid: 69905045e1d0a65458b205d6ab55502b, type: 3}
|
||||
m_PaniniProjectionCS: {fileID: 7200000, guid: 0ddbf72c8fbb6e44b983f470c8384ef6, type: 3}
|
||||
m_DofCircleOfConfusion: {fileID: 7200000, guid: 75332b7b315c80d4babe506820aa0bfd, type: 3}
|
||||
m_DofGatherCS: {fileID: 7200000, guid: 1e6b16a7970a1494db74b1d3d007d1cc, type: 3}
|
||||
m_DofCoCMinMaxCS: {fileID: 7200000, guid: c70dd492c3d2fe94589d6ca8d4e37915, type: 3}
|
||||
m_DofMinMaxDilateCS: {fileID: 7200000, guid: 757a3f81b35177b44b2b178909b49172, type: 3}
|
||||
m_DofCombineCS: {fileID: 7200000, guid: d9b940a90a2d0884f94990a0dde43a53, type: 3}
|
||||
m_DofComputeSlowTilesCS: {fileID: 7200000, guid: b89f86a76de81ee42ae16daad78eb382, type: 3}
|
||||
m_DofComputeApertureShapeCS: {fileID: 7200000, guid: dd5acecb27e20334fa3be332e85172df, type: 3}
|
||||
m_MotionBlurMotionVecPrepCS: {fileID: 7200000, guid: ed9438fa777911d48933402087203b15, type: 3}
|
||||
m_MotionBlurGenTileCS: {fileID: 7200000, guid: 336e1fdbb3a1b8647b06208415f87804, type: 3}
|
||||
m_MotionBlurMergeTileCS: {fileID: 7200000, guid: cd14ddf849edeed43b0e3ccf66023038, type: 3}
|
||||
m_MotionBlurNeighborhoodTileCS: {fileID: 7200000, guid: 5ea9865df3e53b448856785b88f8e7b9, type: 3}
|
||||
m_MotionBlurCS: {fileID: 7200000, guid: 2af5c49c7865edb4b823826970ec176a, type: 3}
|
||||
m_BloomPrefilterCS: {fileID: 7200000, guid: 243b24008041aaa4a91800690f63c684, type: 3}
|
||||
m_BloomBlurCS: {fileID: 7200000, guid: 133a68380d324de4ea8d3ff8657b02d8, type: 3}
|
||||
m_BloomUpsampleCS: {fileID: 7200000, guid: 5dbb0ac12cb11f84084b7e5633481bd1, type: 3}
|
||||
m_DepthValuesPS: {fileID: 4800000, guid: 6e6a4a3dbb788234594aa74f2d6aeb6f, type: 3}
|
||||
m_ColorResolvePS: {fileID: 4800000, guid: dd7047092f3c82b40b3a07868f9c4de2, type: 3}
|
||||
m_ResolveMotionVecPS: {fileID: 4800000, guid: ea18ca9826385e943979c46cf98968cc, type: 3}
|
||||
m_FXAACS: {fileID: 7200000, guid: 1535d29f35ea86b4282b6ca652002e2a, type: 3}
|
||||
m_FinalPassPS: {fileID: 4800000, guid: 5ac9ef0c50282754b93c7692488e7ee7, type: 3}
|
||||
m_ClearBlackPS: {fileID: 4800000, guid: 3330c1503ea8c6d4d9408df3f64227eb, type: 3}
|
||||
m_SMAAPS: {fileID: 4800000, guid: 9655f4aa89a469c49aceaceabf9bc77b, type: 3}
|
||||
m_TemporalAntialiasingPS: {fileID: 4800000, guid: 3dd9fd928fdb83743b1f27d15df22179, type: 3}
|
||||
m_SharpeningCS: {fileID: 7200000, guid: 667941138a753f447bad3bf94052f590, type: 3}
|
||||
m_LensFlareDataDrivenPS: {fileID: 4800000, guid: 85330b3de0cfebc4ba78b2d61b1a2899, type: 3}
|
||||
m_LensFlareScreenSpacePS: {fileID: 4800000, guid: 97abfc9f0525e1849b417eaae10f0329, type: 3}
|
||||
m_LensFlareMergeOcclusionCS: {fileID: 7200000, guid: 07492750f384d9a4da9aaf5d2feeed4a, type: 3}
|
||||
m_DLSSBiasColorMaskPS: {fileID: 4800000, guid: 017a05924c0b0484ca29717ed0c60343, type: 3}
|
||||
m_CompositeUIAndOETFApplyPS: {fileID: 4800000, guid: 08b7ad21d2b8e9142b730b22d7355821, type: 3}
|
||||
m_ContrastAdaptiveSharpenCS: {fileID: 7200000, guid: 560896aec2f412c48995be35551a4ac6, type: 3}
|
||||
m_EdgeAdaptiveSpatialUpsamplingCS: {fileID: 7200000, guid: f054fa9fe2c85bb42b9489e2f9ffb643, type: 3}
|
||||
m_VTFeedbackDownsample: {fileID: 7200000, guid: 32d963548086c2c439aeb23a93e9a00a, type: 3}
|
||||
m_AccumulationCS: {fileID: 7200000, guid: ed80add7a217efa468d137d6f7c668f3, type: 3}
|
||||
m_BlitAndExposeCS: {fileID: 7200000, guid: 4b9a355e064de034dbfafe4583ba766b, type: 3}
|
||||
m_AlphaInjectionPS: {fileID: 4800000, guid: 4edd96259a5e8b44c90479928f0cd11e, type: 3}
|
||||
m_ChromaKeyingPS: {fileID: 4800000, guid: 49feb6b111e82ec4eb6d3d08e4b6903e, type: 3}
|
||||
m_CustomClearPS: {fileID: 4800000, guid: 9cef3686fa32c8840947ed99b561195c, type: 3}
|
||||
- rid: 2550939681210237018
|
||||
type: {class: RenderingPathFrameSettings, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_Camera:
|
||||
bitDatas:
|
||||
data1: 5770166122053581
|
||||
data2: 12934340311651418136
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_CustomOrBakedReflection:
|
||||
bitDatas:
|
||||
data1: 4643523019153229
|
||||
data2: 12898309406071980048
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
m_RealtimeReflection:
|
||||
bitDatas:
|
||||
data1: 4638910381585229
|
||||
data2: 12898310333516513304
|
||||
lodBias: 1
|
||||
lodBiasMode: 0
|
||||
lodBiasQualityLevel: 0
|
||||
maximumLODLevel: 0
|
||||
maximumLODLevelMode: 0
|
||||
maximumLODLevelQualityLevel: 0
|
||||
sssQualityMode: 0
|
||||
sssQualityLevel: 0
|
||||
sssCustomSampleBudget: 20
|
||||
sssCustomDownsampleSteps: 0
|
||||
msaaMode: 1
|
||||
materialQuality: 0
|
||||
- rid: 2550939681210237019
|
||||
type: {class: HDRenderPipelineEditorShaders, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_GpuInlineDebugDrawerLine: {fileID: 4800000, guid: 039c5248164c71b4aa6d780131c1bfaf, type: 3}
|
||||
m_AutodeskInteractive: {fileID: 4800000, guid: 7252379db4c18b641b517f2c91bb57e1, type: 3}
|
||||
m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: ee2ce0be66f45d9449d71ba9b49c2acd, type: 3}
|
||||
m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 29c4adff654862b40a2e9fb2015a42c3, type: 3}
|
||||
m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 4819724840ee9444f9da841b477038ce, type: 3}
|
||||
m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: d81c74dd5f463104ca482aa23ef2c798, type: 3}
|
||||
- rid: 2550939681210237020
|
||||
type: {class: HDRenderPipelineRuntimeMaterials, ns: UnityEngine.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Runtime}
|
||||
data:
|
||||
m_PBRSkyMaterial: {fileID: -876546973899608171, guid: 02532cbb810fb404db49da84f1efe41e, type: 3}
|
||||
m_AreaLightMaterial: {fileID: 2100000, guid: ef5f65c980e25304098a95e28f3bd20b, type: 2}
|
||||
m_AreaLightCookieMaterial: {fileID: 2100000, guid: 78c6825c5d9c3664f9879ae8609618c7, type: 2}
|
||||
- rid: 2550939681210237021
|
||||
type: {class: HDRenderingLayersLimitSettings, ns: UnityEditor.Rendering.HighDefinition, asm: Unity.RenderPipelines.HighDefinition.Editor}
|
||||
data:
|
||||
m_Version: 0
|
||||
- rid: 2550939681210237022
|
||||
type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, type: 3}
|
||||
m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, type: 3}
|
||||
m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, type: 3}
|
||||
m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, type: 3}
|
||||
m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, type: 3}
|
||||
m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, type: 3}
|
||||
m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3}
|
||||
m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3}
|
||||
m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3}
|
||||
- rid: 2550939681210237023
|
||||
type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
m_ProbeVolumeDisableStreamingAssets: 0
|
||||
- rid: 2550939681210237024
|
||||
type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3}
|
||||
m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3}
|
||||
m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3}
|
||||
- rid: 2550939681210237025
|
||||
type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_version: 0
|
||||
m_EnableCompilationCaching: 1
|
||||
m_EnableValidityChecks: 1
|
||||
- rid: 2550939681210237026
|
||||
type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_ExportShaderVariants: 1
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_StripRuntimeDebugShaders: 1
|
||||
- rid: 2550939681210237027
|
||||
type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_version: 0
|
||||
- rid: 2550939681210237028
|
||||
type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, type: 3}
|
||||
subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, type: 3}
|
||||
voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, type: 3}
|
||||
traceVirtualOffsetCS: {fileID: -6772857160820960102, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3}
|
||||
traceVirtualOffsetRT: {fileID: -5126288278712620388, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3}
|
||||
skyOcclusionCS: {fileID: -6772857160820960102, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3}
|
||||
skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3}
|
||||
renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
|
||||
renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3}
|
||||
- rid: 2550939681210237029
|
||||
type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3}
|
||||
probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3}
|
||||
probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3}
|
||||
- rid: 2550939681210237030
|
||||
type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3}
|
||||
m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3}
|
||||
m_VisualizationLookupTable:
|
||||
m_Data:
|
||||
- {r: 1, g: 0, b: 0, a: 1}
|
||||
- {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||
- {r: 1, g: 1, b: 1, a: 1}
|
||||
- {r: 0, g: 1, b: 0, a: 1}
|
||||
- {r: 0.75, g: 0.75, b: 0, a: 1}
|
||||
- {r: 0, g: 0.75, b: 0.55, a: 1}
|
||||
- {r: 0.5, g: 0, b: 0.5, a: 1}
|
||||
- {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
- {r: 0, g: 0, b: 1, a: 1}
|
||||
m_ConversionLookupTable:
|
||||
m_Data:
|
||||
- {r: 1, g: 0, b: 0, a: 1}
|
||||
- {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||
- {r: 1, g: 1, b: 1, a: 1}
|
||||
- {r: 0, g: 1, b: 0, a: 1}
|
||||
- {r: 0.75, g: 0.75, b: 0, a: 1}
|
||||
- {r: 0, g: 0.75, b: 0.55, a: 1}
|
||||
- {r: 0.5, g: 0, b: 0.5, a: 1}
|
||||
- {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
- {r: 0, g: 0, b: 1, a: 1}
|
||||
- rid: 2550939681210237031
|
||||
type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 0
|
||||
m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3}
|
||||
- rid: 2550939681210237032
|
||||
type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
m_UseBicubicLightmapSampling: 0
|
||||
- rid: 2550939681210237033
|
||||
type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, type: 3}
|
||||
probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, type: 3}
|
||||
probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, type: 3}
|
||||
probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3}
|
||||
probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3}
|
||||
numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3}
|
||||
- rid: 2550939681210237034
|
||||
type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_version: 0
|
||||
m_IncludeReferencedInScenes: 1
|
||||
m_IncludeAssetsByLabel: 1
|
||||
m_LabelToInclude: HDRP:IncludeInBuild
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: afe1e7ba9d73b904ab81ad733223d822
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 52c313066dda63c459f7c826dbb8eed1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,2 +0,0 @@
|
||||
Please, check out latest Anti-Cheat Toolkit Code Library API Docs here:
|
||||
https://codestage.net/uas_files/actk/api/
|
||||
@@ -1,6 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f4c375fd5bde53c42b0ebc6ee503f7a1
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a707e4914fc9f014790c02a3cd0b455d
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ac5220baa6a51bb47a5c640ddf6c0ce8
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"name": "ACTk.Editor",
|
||||
"references": [
|
||||
"ACTk.Runtime"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [
|
||||
{
|
||||
"name": "com.unity.modules.audio",
|
||||
"expression": "",
|
||||
"define": "UNITY_AUDIO_MODULE"
|
||||
}
|
||||
],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8ef82b58ed1acc8419a02b8a05286620
|
||||
timeCreated: 1554196096
|
||||
licenseType: Store
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1ff6bc3cba85fba4e922af0d4a624023
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,48 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
internal static class ACTkEditorConstants
|
||||
{
|
||||
internal static class Conditionals
|
||||
{
|
||||
public const string WallhackLinkXML = "ACTK_WALLHACK_LINK_XML";
|
||||
public const string ExcludeObfuscation = "ACTK_EXCLUDE_OBFUSCATION";
|
||||
public const string PreventReadPhoneState = "ACTK_PREVENT_READ_PHONE_STATE";
|
||||
public const string PreventInternetPermission = "ACTK_PREVENT_INTERNET_PERMISSION";
|
||||
public const string ObscuredAutoMigration = "ACTK_OBSCURED_AUTO_MIGRATION";
|
||||
public const string ThirdPartyIntegration = "ACTK_IS_HERE";
|
||||
public const string UsExportCompatible = "ACTK_US_EXPORT_COMPATIBLE";
|
||||
public const string NewtonsoftJson = "ACTK_NEWTONSOFT_JSON";
|
||||
|
||||
public const string InjectionDebug = "ACTK_INJECTION_DEBUG";
|
||||
public const string InjectionDebugVerbose = "ACTK_INJECTION_DEBUG_VERBOSE";
|
||||
public const string InjectionDebugParanoid = "ACTK_INJECTION_DEBUG_PARANOID";
|
||||
public const string WallhackDebug = "ACTK_WALLHACK_DEBUG";
|
||||
public const string DetectionBacklogs = "ACTK_DETECTION_BACKLOGS";
|
||||
public const string GenericDevLogs = "ACTK_DEV_LOGS";
|
||||
}
|
||||
|
||||
public const string SettingsProviderPath = "Code Stage/Anti-Cheat Toolkit";
|
||||
public const string MenuPath = "Code Stage/🕵 Anti-Cheat Toolkit/";
|
||||
public const string ToolsMenuPath = "Tools/" + MenuPath;
|
||||
public const string GameObjectMenuPath = "GameObject/Create Other/" + MenuPath;
|
||||
|
||||
public static readonly string ProjectFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "../"));
|
||||
public static readonly string ProjectTempFolder = Path.Combine(ProjectFolder, "Temp");
|
||||
public static readonly string LinkXmlPath = Path.Combine(ProjectTempFolder, "actk-link.xml");
|
||||
public static readonly string ProjectLibraryFolder = Path.Combine(ProjectFolder, "Library");
|
||||
public static readonly string ProjectSettingsFolder = Path.Combine(ProjectFolder, "ProjectSettings");
|
||||
public static readonly string AssetsFolder = Path.Combine(ProjectFolder, "Assets");
|
||||
|
||||
public static readonly string[] HexTable = Enumerable.Range(0, 256).Select(v => v.ToString("x2")).ToArray();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9ee7d4a58674ac69c27bc7c29417309
|
||||
timeCreated: 1552925230
|
||||
@@ -1,41 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Use it to guess current directory of the Anti-Cheat Toolkit.
|
||||
/// </summary>
|
||||
public class ACTkMarker : ScriptableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns raw path of the ACTkMarker script for further reference.
|
||||
/// </summary>
|
||||
/// <returns>Path of the ACTkMarker ScriptableObject asset.</returns>
|
||||
public static string GetAssetPath()
|
||||
{
|
||||
string result;
|
||||
|
||||
var tempInstance = CreateInstance<ACTkMarker>();
|
||||
var script = MonoScript.FromScriptableObject(tempInstance);
|
||||
if (script != null)
|
||||
{
|
||||
result = AssetDatabase.GetAssetPath(script);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = AssetDatabase.FindAssets("ACTkMarker")[0];
|
||||
result = AssetDatabase.GUIDToAssetPath(result);
|
||||
}
|
||||
|
||||
DestroyImmediate(tempInstance);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00b850c709170d1469bcd89e6f80b16c
|
||||
timeCreated: 1557660868
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,134 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using Detectors;
|
||||
using UnityEditor;
|
||||
|
||||
using Common;
|
||||
using PostProcessors;
|
||||
using UnityEngine;
|
||||
using Processors;
|
||||
|
||||
internal static class ACTkMenuItems
|
||||
{
|
||||
// ---------------------------------------------------------------
|
||||
// Main menu items
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Settings...", false, 100)]
|
||||
private static void ShowSettingsWindow()
|
||||
{
|
||||
ACTkSettings.Show();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Injection Detector Whitelist Editor...", false, 1000)]
|
||||
private static void ShowAssembliesWhitelistWindow()
|
||||
{
|
||||
UserWhitelistEditor.ShowWindow();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Calculate external build hashes", false, 1200)]
|
||||
private static async void HashExternalBuild()
|
||||
{
|
||||
var buildHashes = await CodeHashGeneratorPostprocessor.CalculateExternalBuildHashesAsync(null, true);
|
||||
if (buildHashes == null || buildHashes.FileHashes.Count == 0)
|
||||
{
|
||||
Debug.LogError(ACTk.LogPrefix + "External build hashing was not successful. " +
|
||||
"See previous log messages for possible details.");
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Configure proguard-user.txt", false, 1201)]
|
||||
private static void CheckProGuard()
|
||||
{
|
||||
BuildPreProcessor.CheckProGuard(true);
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate obscured types on prefabs...", false, 1500)]
|
||||
private static void MigrateObscuredTypesOnPrefabs()
|
||||
{
|
||||
MigrateUtils.MigrateObscuredTypesOnPrefabs("ObscuredFloat", "ObscuredDouble", "ObscuredVector2", "ObscuredVector3", "ObscuredQuaternion");
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate obscured types in opened scene(s)...", false, 1501)]
|
||||
private static void MigrateObscuredTypesInScene()
|
||||
{
|
||||
MigrateUtils.MigrateObscuredTypesInScene("ObscuredFloat", "ObscuredDouble", "ObscuredVector2", "ObscuredVector3", "ObscuredQuaternion");
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Validate/Validate obscured types in assets...", false, 1500)]
|
||||
private static void ValidateObscuredTypesInAssets()
|
||||
{
|
||||
ObscuredTypesValidator.ValidateProjectAssets();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Validate/Validate obscured types in opened scene(s)...", false, 1501)]
|
||||
private static void ValidateObscuredTypesInOpenedScenes()
|
||||
{
|
||||
ObscuredTypesValidator.ValidateOpenedScenes();
|
||||
}
|
||||
|
||||
/* will be needed when obsolete string internals will be deprecated along with automatic migration */
|
||||
|
||||
//[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate ObscuredString on prefabs...", false, 1600)]
|
||||
private static void MigrateObscuredStringOnPrefabs()
|
||||
{
|
||||
MigrateUtils.MigrateObscuredTypesOnPrefabs("ObscuredString");
|
||||
}
|
||||
|
||||
//[MenuItem(ACTkEditorConstants.ToolsMenuPath + "Migrate/Migrate ObscuredString in opened scene(s)...", false, 1601)]
|
||||
private static void MigrateObscuredStringInScene()
|
||||
{
|
||||
MigrateUtils.MigrateObscuredTypesInScene("ObscuredString");
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// GameObject menu items
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + "All detectors", false, 0)]
|
||||
private static void AddAllDetectorsToScene()
|
||||
{
|
||||
AddInjectionDetectorToScene();
|
||||
AddObscuredCheatingDetectorToScene();
|
||||
AddSpeedHackDetectorToScene();
|
||||
AddWallHackDetectorToScene();
|
||||
AddTimeCheatingDetectorToScene();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + InjectionDetector.ComponentName, false, 1)]
|
||||
private static void AddInjectionDetectorToScene()
|
||||
{
|
||||
DetectorTools.SetupDetectorInScene<InjectionDetector>();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + ObscuredCheatingDetector.ComponentName, false, 1)]
|
||||
private static void AddObscuredCheatingDetectorToScene()
|
||||
{
|
||||
DetectorTools.SetupDetectorInScene<ObscuredCheatingDetector>();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + SpeedHackDetector.ComponentName, false, 1)]
|
||||
private static void AddSpeedHackDetectorToScene()
|
||||
{
|
||||
DetectorTools.SetupDetectorInScene<SpeedHackDetector>();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + WallHackDetector.ComponentName, false, 1)]
|
||||
private static void AddWallHackDetectorToScene()
|
||||
{
|
||||
DetectorTools.SetupDetectorInScene<WallHackDetector>();
|
||||
}
|
||||
|
||||
[MenuItem(ACTkEditorConstants.GameObjectMenuPath + TimeCheatingDetector.ComponentName, false, 1)]
|
||||
private static void AddTimeCheatingDetectorToScene()
|
||||
{
|
||||
DetectorTools.SetupDetectorInScene<TimeCheatingDetector>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("CodeStage.ACTk.Service")]
|
||||
[assembly: InternalsVisibleTo("CodeStage.ACTk.Tests.Editor")]
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a1cc293465f841498ad940f7813ccedd
|
||||
timeCreated: 1588809689
|
||||
@@ -1,198 +0,0 @@
|
||||
#region copyright
|
||||
// -------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// -------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.EditorCommon.Tools
|
||||
{
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
internal static class CSColorTools
|
||||
{
|
||||
internal enum ColorKind
|
||||
{
|
||||
Green,
|
||||
Red,
|
||||
Purple
|
||||
}
|
||||
|
||||
public const string GreenHex = "02C85F";
|
||||
public const string GreenDarkHex = "02981F";
|
||||
public const string PurpleHex = "A76ED1";
|
||||
public const string PurpleDarkHex = "7030A0";
|
||||
public const string RedHex = "FF4040";
|
||||
public const string RedAltHex = "FF6060";
|
||||
public const string RedDarkHex = "FF1010";
|
||||
public const string BrightGreyHex = "E5E5E5";
|
||||
|
||||
public readonly static Color32 Green = new Color32(2, 200, 95, 255);
|
||||
public readonly static Color32 GreenDark = new Color32(2, 152, 31, 255);
|
||||
public readonly static Color32 Purple = new Color32(167, 110, 209, 255);
|
||||
public readonly static Color32 PurpleDark = new Color32(112, 48, 160, 255);
|
||||
public readonly static Color32 RedAlt = new Color32(255, 96, 96, 255);
|
||||
public readonly static Color32 RedDark = new Color32(255, 16, 16, 255);
|
||||
public readonly static Color32 BrightGrey = new Color32(229, 229, 229, 255);
|
||||
|
||||
public static string EditorGreenHex
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? GreenHex : GreenDarkHex;
|
||||
}
|
||||
}
|
||||
|
||||
public static string EditorPurpleHex
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? PurpleHex : PurpleDarkHex;
|
||||
}
|
||||
}
|
||||
|
||||
public static string EditorRedHex
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? RedAltHex : RedDarkHex;
|
||||
}
|
||||
}
|
||||
|
||||
public static Color EditorGreen
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? Green : GreenDark;
|
||||
}
|
||||
}
|
||||
|
||||
public static Color EditorPurple
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? Purple : PurpleDark;
|
||||
}
|
||||
}
|
||||
|
||||
public static Color EditorRed
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? RedAlt : RedDark;
|
||||
}
|
||||
}
|
||||
|
||||
public static Color DimmedColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return ChangeAlpha(GUI.skin.label.normal.textColor, 150);
|
||||
}
|
||||
}
|
||||
|
||||
public static Color BrightGreyDimmed
|
||||
{
|
||||
get
|
||||
{
|
||||
return ChangeAlpha(BrightGrey, 150);
|
||||
}
|
||||
}
|
||||
|
||||
public static Color GreenColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return LerpToGreen(GUI.skin.label.normal.textColor, 0.3f);
|
||||
}
|
||||
}
|
||||
|
||||
public static Color RedColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return LerpToRed(GUI.skin.label.normal.textColor, 0.3f);
|
||||
}
|
||||
}
|
||||
|
||||
public static Color BackgroundGreenTint
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? new Color32(0, 255, 0, 150) : new Color32(0, 255, 0, 30);
|
||||
}
|
||||
}
|
||||
|
||||
public static Color BackgroundRedTint
|
||||
{
|
||||
get
|
||||
{
|
||||
return EditorGUIUtility.isProSkin ? new Color32(255, 0, 0, 150) : new Color32(255, 0, 0, 30);
|
||||
}
|
||||
}
|
||||
|
||||
public static string WrapBool(bool value)
|
||||
{
|
||||
return WrapString(value.ToString(), value ? ColorKind.Green : ColorKind.Red);
|
||||
}
|
||||
|
||||
public static string WrapString(string inputGood, string inputBad, bool good)
|
||||
{
|
||||
return WrapString(good ? inputGood : inputBad, good ? ColorKind.Green : ColorKind.Red);
|
||||
}
|
||||
|
||||
public static string WrapString(string input, bool good)
|
||||
{
|
||||
return WrapString(input, good ? ColorKind.Green : ColorKind.Red);
|
||||
}
|
||||
|
||||
public static string WrapString(string input, ColorKind colorKind)
|
||||
{
|
||||
switch (colorKind)
|
||||
{
|
||||
case ColorKind.Green:
|
||||
return WrapString(input, EditorGreenHex);
|
||||
case ColorKind.Red:
|
||||
return WrapString(input, EditorRedHex);
|
||||
case ColorKind.Purple:
|
||||
return WrapString(input, EditorPurpleHex);
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("colorKind", colorKind, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static string WrapString(string input, Color color)
|
||||
{
|
||||
var colorString = ColorUtility.ToHtmlStringRGBA(color);
|
||||
return WrapString(input, colorString);
|
||||
}
|
||||
|
||||
// color argument should be in rrggbbaa format or match standard html color name, without '#'
|
||||
public static string WrapString(string input, string color)
|
||||
{
|
||||
return "<color=#" + color + ">" + input + "</color>";
|
||||
}
|
||||
|
||||
public static Color32 LerpToRed(Color32 inValue, float greenAmountPercent)
|
||||
{
|
||||
return Color.Lerp(inValue, Color.red, greenAmountPercent);
|
||||
}
|
||||
|
||||
public static Color32 LerpToGreen(Color32 inValue, float greenAmountPercent)
|
||||
{
|
||||
return Color.Lerp(inValue, Color.green, greenAmountPercent);
|
||||
}
|
||||
|
||||
public static Color32 LerpToYellow(Color32 inValue, float greenAmountPercent)
|
||||
{
|
||||
return Color.Lerp(inValue, Color.yellow, greenAmountPercent);
|
||||
}
|
||||
|
||||
private static Color32 ChangeAlpha(Color32 inValue, byte alphaValue)
|
||||
{
|
||||
inValue.a = alphaValue;
|
||||
return inValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
#region copyright
|
||||
// -------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// -------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.EditorCommon.Tools
|
||||
{
|
||||
using UnityEngine;
|
||||
|
||||
internal static class CSEditorIcons
|
||||
{
|
||||
public static Texture AssetStore { get { return CSTextureLoader.GetIconTexture("Asset Store", ImageKind.InternalIcon); } }
|
||||
public static Texture Error { get { return CSTextureLoader.GetIconTexture("console.erroricon", ImageKind.InternalIcon); } }
|
||||
public static Texture ErrorSmall { get { return CSTextureLoader.GetIconTexture("console.erroricon.sml", ImageKind.InternalIcon); } }
|
||||
public static Texture Favorite { get { return CSTextureLoader.GetIconTexture("Favorite", ImageKind.InternalIcon); } }
|
||||
public static Texture FavoriteIcon { get { return CSTextureLoader.GetIconTexture("Favorite Icon", ImageKind.InternalIcon); } }
|
||||
public static Texture FilterByType { get { return CSTextureLoader.GetIconTexture("FilterByType", ImageKind.InternalIcon); } }
|
||||
public static Texture Folder { get { return CSTextureLoader.GetIconTexture("Folder Icon", ImageKind.InternalIcon); } }
|
||||
public static Texture GameObject { get { return CSTextureLoader.GetTypeImage(typeof(GameObject)); } }
|
||||
public static Texture Help { get { return CSTextureLoader.GetIconTexture("_Help", ImageKind.InternalIcon); } }
|
||||
public static Texture HierarchyView { get { return CSTextureLoader.GetIconTexture("UnityEditor.SceneHierarchyWindow", ImageKind.InternalIcon); } }
|
||||
public static Texture Info { get { return CSTextureLoader.GetIconTexture("console.infoicon", ImageKind.InternalIcon); } }
|
||||
public static Texture InfoSmall { get { return CSTextureLoader.GetIconTexture("console.infoicon.sml", ImageKind.InternalIcon); } }
|
||||
public static Texture Inspector { get { return CSTextureLoader.GetIconTexture("UnityEditor.InspectorWindow", ImageKind.InternalIcon); } }
|
||||
public static Texture Prefab { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.prefab"); } }
|
||||
public static Texture ProjectView { get { return CSTextureLoader.GetIconTexture("Project", ImageKind.InternalIcon); } }
|
||||
public static Texture Scene { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.unity"); } }
|
||||
public static Texture Script { get { return UnityEditorInternal.InternalEditorUtility.FindIconForFile("dummy.cs"); } }
|
||||
public static Texture Search { get { return CSTextureLoader.GetIconTexture("Search Icon", ImageKind.InternalIcon); } }
|
||||
public static Texture Settings { get { return CSTextureLoader.GetIconTexture("Settings", ImageKind.InternalIcon); } }
|
||||
public static Texture Warn { get { return CSTextureLoader.GetIconTexture("console.warnicon", ImageKind.InternalIcon); } }
|
||||
public static Texture WarnSmall { get { return CSTextureLoader.GetIconTexture("console.warnicon.sml", ImageKind.InternalIcon); } }
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
#region copyright
|
||||
// -------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// -------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.EditorCommon.Tools
|
||||
{
|
||||
using System.IO;
|
||||
|
||||
internal static class CSFileTools
|
||||
{
|
||||
public static void DeleteFile(string path)
|
||||
{
|
||||
if (!File.Exists(path)) return;
|
||||
RemoveReadOnlyAttribute(path);
|
||||
File.Delete(path);
|
||||
}
|
||||
|
||||
private static void RemoveReadOnlyAttribute(string filePath)
|
||||
{
|
||||
var attributes = File.GetAttributes(filePath);
|
||||
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
|
||||
File.SetAttributes(filePath, attributes & ~FileAttributes.ReadOnly);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
#region copyright
|
||||
// -------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// -------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.EditorCommon.Tools
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
internal enum ImageKind
|
||||
{
|
||||
External,
|
||||
InternalTexture,
|
||||
InternalIcon
|
||||
}
|
||||
|
||||
internal static class CSTextureLoader
|
||||
{
|
||||
public static string ExternalTexturesFolder { get; set; }
|
||||
public static string LogPrefix { get; set; }
|
||||
|
||||
private static readonly Dictionary<string, Texture> CachedTextures = new Dictionary<string, Texture>();
|
||||
|
||||
public static Texture GetTexture(string fileName)
|
||||
{
|
||||
return GetTexture(fileName, false);
|
||||
}
|
||||
|
||||
public static Texture GetIconTexture(string fileName, ImageKind kind = ImageKind.External)
|
||||
{
|
||||
return GetTexture(fileName, true, kind);
|
||||
}
|
||||
|
||||
private static Texture GetTexture(string fileName, bool icon, ImageKind kind = ImageKind.External)
|
||||
{
|
||||
Texture result;
|
||||
var isDark = EditorGUIUtility.isProSkin;
|
||||
|
||||
var textureName = fileName;
|
||||
if (isDark)
|
||||
textureName = "d_" + textureName;
|
||||
|
||||
if (CachedTextures.ContainsKey(textureName))
|
||||
{
|
||||
result = CachedTextures[textureName];
|
||||
}
|
||||
else
|
||||
{
|
||||
var path = fileName;
|
||||
|
||||
if (kind == ImageKind.External)
|
||||
{
|
||||
fileName = textureName;
|
||||
path = Path.Combine(ExternalTexturesFolder, "Textures");
|
||||
|
||||
if (icon)
|
||||
path = Path.Combine(path, "Icons");
|
||||
|
||||
path = Path.Combine(path, fileName);
|
||||
if (!File.Exists(Path.GetFullPath(path)) && !Path.HasExtension(path))
|
||||
{
|
||||
path = Path.ChangeExtension(path, "png");
|
||||
}
|
||||
|
||||
if (!File.Exists(Path.GetFullPath(path)))
|
||||
{
|
||||
Debug.LogWarning("Couldn't find icon " + fileName + " at path " + path);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
switch (kind)
|
||||
{
|
||||
case ImageKind.External:
|
||||
result = AssetDatabase.LoadAssetAtPath(path, typeof(Texture2D)) as Texture2D;
|
||||
break;
|
||||
case ImageKind.InternalTexture:
|
||||
result = EditorGUIUtility.FindTexture(path);
|
||||
break;
|
||||
case ImageKind.InternalIcon:
|
||||
result = EditorGUIUtility.IconContent(path).image;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException("kind", kind, null);
|
||||
}
|
||||
|
||||
if (result == null)
|
||||
Debug.LogError(LogPrefix + "Some error occurred while looking for image\n" + path);
|
||||
else
|
||||
CachedTextures[textureName] = result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Texture GetTypeImage(Type type)
|
||||
{
|
||||
var key = type.ToString();
|
||||
if (CachedTextures.ContainsKey(key))
|
||||
{
|
||||
return CachedTextures[key];
|
||||
}
|
||||
|
||||
var texture = EditorGUIUtility.ObjectContent(null, type).image;
|
||||
CachedTextures.Add(key, texture);
|
||||
|
||||
return texture;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5e42f0f68a093d74ea97ddfbd9a5ef4d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f0c63cf6cabe3a547a0b46de95bff055
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,64 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Detectors;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof (InjectionDetector))]
|
||||
internal class InjectionDetectorEditor : KeepAliveBehaviourEditor<InjectionDetector>
|
||||
{
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
if (!ACTkSettings.Instance.InjectionDetectorEnabled)
|
||||
{
|
||||
using (GUITools.Vertical(GUITools.PanelWithBackground))
|
||||
{
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.HelpBox("Injection Detector support is not enabled! Injection Detector will not work properly",
|
||||
MessageType.Error, true);
|
||||
|
||||
using (new GUILayout.HorizontalScope())
|
||||
{
|
||||
if (GUILayout.Button("Enable Now"))
|
||||
{
|
||||
ACTkSettings.Instance.InjectionDetectorEnabled = true;
|
||||
}
|
||||
if (GUILayout.Button("Enable In settings..."))
|
||||
{
|
||||
ACTkSettings.Show();
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (SettingsUtils.IsIL2CPPEnabled())
|
||||
{
|
||||
EditorGUILayout.HelpBox("Mono Injections are not possible in IL2CPP, this detector is not needed in IL2CPP builds",
|
||||
MessageType.Info, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!InjectionRoutines.IsTargetPlatformCompatible())
|
||||
{
|
||||
EditorGUILayout.HelpBox("Injection Detection is only supported in Standalone and Android builds",
|
||||
MessageType.Warning, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6025f911d895a7e43a5d5c6229254129
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,94 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Common;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
internal class KeepAliveBehaviourEditor<T> : Editor where T: KeepAliveBehaviour<T>
|
||||
{
|
||||
protected T self;
|
||||
|
||||
private SerializedProperty autoStart;
|
||||
private SerializedProperty autoDispose;
|
||||
private SerializedProperty keepAlive;
|
||||
private SerializedProperty detectionEvent;
|
||||
private SerializedProperty detectionEventHasListener;
|
||||
|
||||
public virtual void OnEnable()
|
||||
{
|
||||
autoStart = serializedObject.FindProperty("autoStart");
|
||||
autoDispose = serializedObject.FindProperty("autoDispose");
|
||||
keepAlive = serializedObject.FindProperty("keepAlive");
|
||||
detectionEvent = serializedObject.FindProperty("detectionEvent");
|
||||
detectionEventHasListener = serializedObject.FindProperty("detectionEventHasListener");
|
||||
|
||||
self = (T)target;
|
||||
|
||||
FindUniqueDetectorProperties();
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
if (self == null) return;
|
||||
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUIUtility.labelWidth = 140;
|
||||
EditorGUILayout.Space();
|
||||
DrawHeader("Base settings");
|
||||
|
||||
EditorGUILayout.PropertyField(autoStart);
|
||||
detectionEventHasListener.boolValue = EditorTools.CheckUnityEventHasActivePersistentListener(detectionEvent);
|
||||
|
||||
CheckAdditionalEventsForListeners();
|
||||
|
||||
if (autoStart.boolValue && !detectionEventHasListener.boolValue && !AdditionalEventsHasListeners())
|
||||
{
|
||||
EditorGUILayout.LabelField(new GUIContent("You need to add at least one active item to the Events in order to use Auto Start feature!"), GUITools.BoldLabel);
|
||||
}
|
||||
else if (!autoStart.boolValue)
|
||||
{
|
||||
EditorGUILayout.LabelField(new GUIContent("Don't forget to start detection!", "You should start detector from code using ObscuredCheatingDetector.StartDetection() method. See readme for details."), GUITools.BoldLabel);
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
EditorGUILayout.PropertyField(autoDispose);
|
||||
EditorGUILayout.PropertyField(keepAlive);
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
|
||||
if (DrawUniqueDetectorProperties())
|
||||
{
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
|
||||
//DrawHeader("Events");
|
||||
|
||||
EditorGUILayout.PropertyField(detectionEvent);
|
||||
DrawAdditionalEvents();
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
|
||||
EditorGUIUtility.labelWidth = 0;
|
||||
}
|
||||
|
||||
protected virtual void DrawHeader(string text)
|
||||
{
|
||||
GUITools.DrawHeader(text);
|
||||
}
|
||||
|
||||
protected virtual bool AdditionalEventsHasListeners()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected virtual void FindUniqueDetectorProperties() {}
|
||||
protected virtual bool DrawUniqueDetectorProperties() { return false; }
|
||||
protected virtual void CheckAdditionalEventsForListeners() {}
|
||||
protected virtual void DrawAdditionalEvents() {}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b59c308aff5e054991de809a3b5985b
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,45 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Detectors;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof (ObscuredCheatingDetector))]
|
||||
internal class ObscuredCheatingDetectorEditor : KeepAliveBehaviourEditor<ObscuredCheatingDetector>
|
||||
{
|
||||
private SerializedProperty doubleEpsilon;
|
||||
private SerializedProperty floatEpsilon;
|
||||
private SerializedProperty vector2Epsilon;
|
||||
private SerializedProperty vector3Epsilon;
|
||||
private SerializedProperty quaternionEpsilon;
|
||||
|
||||
protected override void FindUniqueDetectorProperties()
|
||||
{
|
||||
doubleEpsilon = serializedObject.FindProperty("doubleEpsilon");
|
||||
floatEpsilon = serializedObject.FindProperty("floatEpsilon");
|
||||
vector2Epsilon = serializedObject.FindProperty("vector2Epsilon");
|
||||
vector3Epsilon = serializedObject.FindProperty("vector3Epsilon");
|
||||
quaternionEpsilon = serializedObject.FindProperty("quaternionEpsilon");
|
||||
}
|
||||
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
DrawHeader("Specific settings");
|
||||
|
||||
EditorGUILayout.PropertyField(doubleEpsilon);
|
||||
EditorGUILayout.PropertyField(floatEpsilon);
|
||||
EditorGUILayout.PropertyField(vector2Epsilon, new GUIContent("Vector2 Epsilon"));
|
||||
EditorGUILayout.PropertyField(vector3Epsilon, new GUIContent("Vector3 Epsilon"));
|
||||
EditorGUILayout.PropertyField(quaternionEpsilon);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8df36b70906d65d43bcb3ddce3fe36ba
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,70 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Detectors;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.EditorTools;
|
||||
using UnityEngine;
|
||||
using EditorTools = EditorCode.EditorTools;
|
||||
|
||||
[CustomEditor(typeof (SpeedHackDetector))]
|
||||
internal class SpeedHackDetectorEditor : KeepAliveBehaviourEditor<SpeedHackDetector>
|
||||
{
|
||||
private SerializedProperty interval;
|
||||
private SerializedProperty threshold;
|
||||
private SerializedProperty maxFalsePositives;
|
||||
private SerializedProperty coolDown;
|
||||
private SerializedProperty useDsp;
|
||||
|
||||
protected override void FindUniqueDetectorProperties()
|
||||
{
|
||||
interval = serializedObject.FindProperty("interval");
|
||||
threshold = serializedObject.FindProperty("threshold");
|
||||
maxFalsePositives = serializedObject.FindProperty("maxFalsePositives");
|
||||
coolDown = serializedObject.FindProperty("coolDown");
|
||||
|
||||
useDsp = serializedObject.GetProperty(nameof(SpeedHackDetector.UseDsp));
|
||||
}
|
||||
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
DrawHeader("Specific settings");
|
||||
|
||||
EditorGUILayout.PropertyField(interval);
|
||||
EditorGUILayout.PropertyField(threshold);
|
||||
EditorGUILayout.PropertyField(maxFalsePositives);
|
||||
EditorGUILayout.PropertyField(coolDown);
|
||||
|
||||
#if UNITY_2020_1_OR_NEWER
|
||||
EditorGUILayout.PropertyField(useDsp);
|
||||
#else
|
||||
EditorGUILayout.PropertyField(useDsp, new GUIContent( ObjectNames.NicifyVariableName(nameof(SpeedHackDetector.UseDsp)), useDsp.tooltip));
|
||||
#endif
|
||||
if (useDsp.boolValue)
|
||||
EditorGUILayout.HelpBox("Dsp timers may cause false positives on some hardware.\nMake sure to test on target devices before using this in production.", MessageType.Warning);
|
||||
|
||||
#if UNITY_AUDIO_MODULE
|
||||
if (!EditorTools.IsAudioManagerEnabled())
|
||||
{
|
||||
EditorGUILayout.HelpBox("Dsp option is not available since Disable Unity Audio option is enabled.", MessageType.Error);
|
||||
if (GUILayout.Button("Open Audio Settings"))
|
||||
{
|
||||
SettingsService.OpenProjectSettings("Project/Audio");
|
||||
#if UNITY_2021_3_OR_NEWER
|
||||
Highlighter.Highlight("Project Settings", EditorTools.GetAudioManagerEnabledPropertyPath(), HighlightSearchMode.Identifier);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#else
|
||||
EditorGUILayout.HelpBox("Dsp option is not available since built-in Audio module is disabled.", MessageType.Error);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 199f39969debe8f46afc5f32b333be3b
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,74 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Detectors;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof(TimeCheatingDetector))]
|
||||
internal class TimeCheatingDetectorEditor : KeepAliveBehaviourEditor<TimeCheatingDetector>
|
||||
{
|
||||
#if !ACTK_PREVENT_INTERNET_PERMISSION
|
||||
private SerializedProperty requestUrl;
|
||||
private SerializedProperty requestMethod;
|
||||
private SerializedProperty timeoutSeconds;
|
||||
private SerializedProperty interval;
|
||||
private SerializedProperty realCheatThreshold;
|
||||
private SerializedProperty wrongTimeThreshold;
|
||||
private SerializedProperty ignoreSetCorrectTime;
|
||||
|
||||
protected override void FindUniqueDetectorProperties()
|
||||
{
|
||||
requestUrl = serializedObject.FindProperty("requestUrl");
|
||||
requestMethod = serializedObject.FindProperty("requestMethod");
|
||||
timeoutSeconds = serializedObject.FindProperty("timeoutSeconds");
|
||||
interval = serializedObject.FindProperty("interval");
|
||||
realCheatThreshold = serializedObject.FindProperty("realCheatThreshold");
|
||||
wrongTimeThreshold = serializedObject.FindProperty("wrongTimeThreshold");
|
||||
ignoreSetCorrectTime = serializedObject.FindProperty("ignoreSetCorrectTime");
|
||||
}
|
||||
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
DrawHeader("Specific settings");
|
||||
|
||||
EditorGUIUtility.labelWidth += 10;
|
||||
EditorGUILayout.PropertyField(ignoreSetCorrectTime);
|
||||
EditorGUIUtility.labelWidth -= 10;
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(requestUrl, new GUIContent("URL", requestUrl.tooltip));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
self.RequestUrl = requestUrl.stringValue;
|
||||
}
|
||||
|
||||
#if UNITY_WEBGL
|
||||
GUILayout.Label("<b>To avoid CORS limitations while running in WebGL, URL will be changed to the current domain, if it does points to any other domain</b>", GUITools.RichMiniLabel);
|
||||
EditorGUILayout.Space();
|
||||
#endif
|
||||
|
||||
EditorGUILayout.PropertyField(requestMethod, new GUIContent("Method", requestMethod.tooltip));
|
||||
|
||||
EditorGUILayout.PropertyField(timeoutSeconds);
|
||||
EditorGUILayout.PropertyField(interval);
|
||||
EditorGUILayout.PropertyField(realCheatThreshold);
|
||||
EditorGUILayout.PropertyField(wrongTimeThreshold);
|
||||
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
GUILayout.Label("<b>Detector disabled with ACTK_PREVENT_INTERNET_PERMISSION conditional symbol</b>", GUITools.RichLabel);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2fb4c7beaf58d554ab0f85d86b53726e
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
@@ -1,139 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.Editors
|
||||
{
|
||||
using Detectors;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomEditor(typeof (WallHackDetector))]
|
||||
internal class WallHackDetectorEditor : KeepAliveBehaviourEditor<WallHackDetector>
|
||||
{
|
||||
private SerializedProperty wireframeDelay;
|
||||
private SerializedProperty raycastDelay;
|
||||
private SerializedProperty spawnPosition;
|
||||
private SerializedProperty maxFalsePositives;
|
||||
|
||||
private SerializedProperty checkRigidbody;
|
||||
private SerializedProperty checkController;
|
||||
private SerializedProperty checkWireframe;
|
||||
private SerializedProperty checkRaycast;
|
||||
|
||||
protected override void FindUniqueDetectorProperties()
|
||||
{
|
||||
raycastDelay = serializedObject.FindProperty("raycastDelay");
|
||||
wireframeDelay = serializedObject.FindProperty("wireframeDelay");
|
||||
spawnPosition = serializedObject.FindProperty("spawnPosition");
|
||||
maxFalsePositives = serializedObject.FindProperty("maxFalsePositives");
|
||||
|
||||
checkRigidbody = serializedObject.FindProperty("checkRigidbody");
|
||||
checkController = serializedObject.FindProperty("checkController");
|
||||
checkWireframe = serializedObject.FindProperty("checkWireframe");
|
||||
checkRaycast = serializedObject.FindProperty("checkRaycast");
|
||||
}
|
||||
|
||||
protected override bool DrawUniqueDetectorProperties()
|
||||
{
|
||||
var detector = self;
|
||||
if (detector == null) return false;
|
||||
|
||||
DrawHeader("Specific settings");
|
||||
|
||||
if (PropertyFieldChanged(checkRigidbody, new GUIContent("Rigidbody")))
|
||||
{
|
||||
detector.CheckRigidbody = checkRigidbody.boolValue;
|
||||
}
|
||||
|
||||
if (PropertyFieldChanged(checkController, new GUIContent("Character Controller")))
|
||||
{
|
||||
detector.CheckController = checkController.boolValue;
|
||||
}
|
||||
|
||||
if (PropertyFieldChanged(checkWireframe, new GUIContent("Wireframe")))
|
||||
{
|
||||
detector.CheckWireframe = checkWireframe.boolValue;
|
||||
}
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(wireframeDelay, new GUIContent("Delay"));
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
if (PropertyFieldChanged(checkRaycast, new GUIContent("Raycast")))
|
||||
{
|
||||
detector.CheckRaycast = checkRaycast.boolValue;
|
||||
}
|
||||
EditorGUI.indentLevel++;
|
||||
EditorGUILayout.PropertyField(raycastDelay, new GUIContent("Delay"));
|
||||
EditorGUI.indentLevel--;
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
|
||||
EditorGUILayout.PropertyField(spawnPosition);
|
||||
if (Vector3.Distance(spawnPosition.vector3Value, Vector3.zero) <= 0.001f)
|
||||
{
|
||||
EditorGUILayout.HelpBox("Please consider placing spawn position as far from your moving objects as possible to avoid false positives", MessageType.Warning);
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
EditorGUILayout.PropertyField(maxFalsePositives);
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
|
||||
if (checkWireframe.boolValue && !SettingsGUI.IsWallhackDetectorShaderIncluded())
|
||||
{
|
||||
using (GUITools.Vertical(GUITools.PanelWithBackground))
|
||||
{
|
||||
EditorGUILayout.Separator();
|
||||
EditorGUILayout.HelpBox("Wallhack Detector shader for Wireframe checks is not included into the build! Detector may work incorrectly",
|
||||
MessageType.Error, true);
|
||||
|
||||
if (GUILayout.Button("Include in Settings..."))
|
||||
{
|
||||
ACTkSettings.Show();
|
||||
}
|
||||
|
||||
EditorGUILayout.Separator();
|
||||
}
|
||||
}
|
||||
|
||||
if (checkRaycast.boolValue || checkController.boolValue || checkRigidbody.boolValue)
|
||||
{
|
||||
var layerId = LayerMask.NameToLayer("Ignore Raycast");
|
||||
if (Physics.GetIgnoreLayerCollision(layerId, layerId))
|
||||
{
|
||||
EditorGUILayout.LabelField("IgnoreRaycast physics layer should collide with itself to avoid false positives! See readme's troubleshooting section for details.", EditorStyles.wordWrappedLabel);
|
||||
if (GUILayout.Button("Edit in Physics settings"))
|
||||
{
|
||||
SettingsService.OpenProjectSettings("Project/Physics");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool PropertyFieldChanged(SerializedProperty property, GUIContent content, params GUILayoutOption[] options)
|
||||
{
|
||||
var result = false;
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
if (content == null)
|
||||
{
|
||||
EditorGUILayout.PropertyField(property, options);
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.PropertyField(property, content, options);
|
||||
}
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2f88f8bd1134b464fa26c27d9979e6db
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0eab0a2d46900f5498873b929a503bad
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7ae78be353f2d8243b15efd15919c5f5
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,203 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using CodeStage.AntiCheat.Common;
|
||||
using CodeStage.AntiCheat.Genuine.CodeHash;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using Debug = UnityEngine.Debug;
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PostProcessors
|
||||
{
|
||||
/// <summary>
|
||||
/// Does calculates code hash after build if you use option "Generate code hash".
|
||||
/// Listen to HashesGenerated or look for hash for each build in the Editor Console.
|
||||
/// </summary>
|
||||
/// Resulting hash in most cases should match value you get from the \ref CodeStage.AntiCheat.Genuine.CodeHash.CodeHashGenerator "CodeHashGenerator"
|
||||
public class CodeHashGeneratorPostprocessor : IPostprocessBuildWithReport
|
||||
{
|
||||
/// <summary>
|
||||
/// Equals int.MaxValue to make sure this postprocessor will run as late as possible
|
||||
/// so you could run own postprocessors before and subscribe to HashesGenerated event.
|
||||
/// </summary>
|
||||
/// Used at CodeHashGeneratorListener example.
|
||||
public const int CallbackOrder = int.MaxValue;
|
||||
|
||||
/// <summary>
|
||||
/// HashesGenerated event delegate.
|
||||
/// </summary>
|
||||
/// <param name="report">Standard post-build report from Unity.</param>
|
||||
/// <param name="hashedBuilds">Build hashing results array.</param>
|
||||
///
|
||||
/// You may generate multiple actual builds within single build operation,
|
||||
/// like multiple APKs when you use "Split APKs by target architecture" option,
|
||||
/// so you may have more than one valid hashed builds for one actual build procedure.
|
||||
public delegate void OnHashesGenerated(BuildReport report, IReadOnlyList<BuildHashes> hashedBuilds);
|
||||
|
||||
/// <summary>
|
||||
/// You may listen to this event if you wish to post-process resulting code hash,
|
||||
/// e.g. upload it to the server for the later runtime check with CodeHashGenerator.
|
||||
/// </summary>
|
||||
/// Make sure to enable "Generate code hash on build completion" option in the ACTk settings to make this event work.
|
||||
public static event OnHashesGenerated HashesGenerated;
|
||||
|
||||
int IOrderedCallback.callbackOrder => CallbackOrder;
|
||||
async void IPostprocessBuildWithReport.OnPostprocessBuild(BuildReport report)
|
||||
{
|
||||
if (!ACTkSettings.Instance.PreGenerateBuildHash || !CodeHashGenerator.IsTargetPlatformCompatible())
|
||||
return;
|
||||
|
||||
await CalculateBuildReportHashesAsync(report, true, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calls selection dialog and calculates hashes for the selected build.
|
||||
/// </summary>
|
||||
/// <param name="buildPath">Path to the .apk / .aab or .exe file. Pass null to show file selection dialog.</param>
|
||||
/// <param name="printToConsole">Path to the .apk / .aab or .exe file. Pass null to show file selection dialog.</param>
|
||||
/// <returns>Valid BuildHashes instance or null in case of error / user cancellation.</returns>
|
||||
public static BuildHashes CalculateExternalBuildHashes(string buildPath, bool printToConsole)
|
||||
{
|
||||
return AsyncHelpers.RunSync(() => CalculateExternalBuildHashesAsync(buildPath, printToConsole));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calls selection dialog and calculates hashes for the selected build.
|
||||
/// </summary>
|
||||
/// <param name="buildPath">Path to the .apk / .aab or .exe file. Pass null to show file selection dialog.</param>
|
||||
/// <param name="printToConsole">Path to the .apk / .aab or .exe file. Pass null to show file selection dialog.</param>
|
||||
/// <returns>Task with Valid BuildHashes instance or null in case of error / user cancellation.</returns>
|
||||
public static async Task<BuildHashes> CalculateExternalBuildHashesAsync(string buildPath, bool printToConsole)
|
||||
{
|
||||
if (buildPath == null)
|
||||
{
|
||||
buildPath = EditorUtility.OpenFilePanel(
|
||||
"Select Standalone Windows build exe or Android build apk / aab", "", "exe,apk,aab");
|
||||
if (string.IsNullOrEmpty(buildPath))
|
||||
{
|
||||
Debug.Log(ACTk.LogPrefix + "Hashing cancelled by user.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var extension = Path.GetExtension(buildPath);
|
||||
if (string.IsNullOrEmpty(extension))
|
||||
return null;
|
||||
|
||||
extension = extension.ToLower(CultureInfo.InvariantCulture);
|
||||
|
||||
try
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("ACTk: Generating code hash", "Preparing...", 0);
|
||||
BuildHashes hashes;
|
||||
|
||||
if (extension == ".apk" || extension == ".aab")
|
||||
hashes = (await AndroidBuildHashGenerator.GetBuildHashes(new[] { buildPath })).FirstOrDefault();
|
||||
else
|
||||
hashes = (await WindowsBuildHashGenerator.GetBuildHashes(buildPath)).FirstOrDefault();
|
||||
|
||||
if (printToConsole)
|
||||
hashes?.PrintToConsole();
|
||||
|
||||
return hashes;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Error while trying to hash build!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calculates hashes for the given build report. Can be useful if you wish to hash build you just made with BuildPipeline.
|
||||
/// </summary>
|
||||
/// Will not trigger the HashesGenerated event.
|
||||
/// <param name="report">BuildReport you wish to calculates hashes for</param>
|
||||
/// <param name="printToConsole">Specifies if calculated hashes should be printed to Unity Console</param>
|
||||
/// <returns>Readonly List of the BuildHashes, one per each resulting build from the BuildReport.</returns>
|
||||
public static Task<IReadOnlyList<BuildHashes>> CalculateBuildReportHashesAsync(BuildReport report,
|
||||
bool printToConsole)
|
||||
{
|
||||
return CalculateBuildReportHashesAsync(report, false, printToConsole);
|
||||
}
|
||||
|
||||
private static async Task<IReadOnlyList<BuildHashes>> CalculateBuildReportHashesAsync(BuildReport report,
|
||||
bool triggerEvent, bool printLogs)
|
||||
{
|
||||
if (EditorUserBuildSettings.GetPlatformSettings(report.summary.platformGroup.ToString(),
|
||||
"CreateSolution") == "true")
|
||||
{
|
||||
Debug.Log(
|
||||
ACTk.LogPrefix + "Build hashing is skipped due to the 'Create Visual Studio Solution' option.");
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
EditorUtility.DisplayProgressBar("ACTk: Generating code hash", "Preparing...", 0);
|
||||
|
||||
var hashedBuilds = await GetHashedBuilds(report);
|
||||
|
||||
if (hashedBuilds == null || hashedBuilds.Count == 0)
|
||||
{
|
||||
Debug.Log(ACTk.LogPrefix + "Couldn't pre-generate code hash. " +
|
||||
"Please run your build and generate hash with CodeHashGenerator.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (printLogs)
|
||||
{
|
||||
foreach (var hashedBuild in hashedBuilds)
|
||||
{
|
||||
hashedBuild.PrintToConsole();
|
||||
}
|
||||
}
|
||||
|
||||
if (triggerEvent)
|
||||
HashesGenerated?.Invoke(report, hashedBuilds);
|
||||
|
||||
return hashedBuilds;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Error while trying to hash build!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static async Task<IReadOnlyList<BuildHashes>> GetHashedBuilds(BuildReport report)
|
||||
{
|
||||
var platform = report.summary.platform;
|
||||
switch (platform)
|
||||
{
|
||||
case BuildTarget.StandaloneWindows64:
|
||||
case BuildTarget.StandaloneWindows:
|
||||
return await WindowsBuildHashGenerator.GetBuildHashes(report.summary.outputPath);
|
||||
case BuildTarget.Android:
|
||||
return await AndroidBuildHashGenerator.GetBuildHashes(report);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c82c021ded9a49b44b3701f1859341cd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 881ba0c65bee45139ca757895221c6ab
|
||||
timeCreated: 1680806941
|
||||
@@ -1,184 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CodeStage.AntiCheat.Common;
|
||||
using CodeStage.AntiCheat.EditorCode.ICSharpCode.SharpZipLib.Zip;
|
||||
using CodeStage.AntiCheat.Genuine.CodeHash;
|
||||
using CodeStage.AntiCheat.Utils;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using Debug = UnityEngine.Debug;
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PostProcessors
|
||||
{
|
||||
internal static class AndroidBuildHashGenerator
|
||||
{
|
||||
private static readonly object ProgressLock = new object();
|
||||
|
||||
public static async Task<BuildHashes[]> GetBuildHashes(BuildReport report)
|
||||
{
|
||||
if ((report.summary.options & BuildOptions.PatchPackage) != 0)
|
||||
{
|
||||
Debug.Log(ACTk.LogPrefix + "Patch hashing is skipped, only full build hashing is supported.");
|
||||
return Array.Empty<BuildHashes>();
|
||||
}
|
||||
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
var files = report.GetFiles();
|
||||
#else
|
||||
var files = report.files;
|
||||
#endif
|
||||
var filePaths = new string[files.Length];
|
||||
for (var i = 0; i < filePaths.Length; i++)
|
||||
{
|
||||
filePaths[i] = files[i].path;
|
||||
}
|
||||
|
||||
return await GetBuildHashes(filePaths);
|
||||
}
|
||||
|
||||
public static async Task<BuildHashes[]> GetBuildHashes(string[] files)
|
||||
{
|
||||
var result = new List<BuildHashes>();
|
||||
|
||||
foreach (var path in files)
|
||||
{
|
||||
var extension = Path.GetExtension(path);
|
||||
if (!string.IsNullOrEmpty(extension))
|
||||
extension = extension.ToLower(CultureInfo.InvariantCulture);
|
||||
|
||||
if (extension != ".apk" && extension != ".aab")
|
||||
continue;
|
||||
|
||||
var progress = FilesProgress.CreateNew("ACTk: Generating code hash");
|
||||
var filters = GetFilters();
|
||||
var buildHashes = await Task.Run(() => HashSuitableFilesInZipFile(path, filters,
|
||||
progress));
|
||||
if (buildHashes != null)
|
||||
result.Add(buildHashes);
|
||||
}
|
||||
|
||||
if (result.Count == 0)
|
||||
{
|
||||
if (!EditorUserBuildSettings.exportAsGoogleAndroidProject)
|
||||
ACTk.PrintExceptionForSupport("Couldn't find compiled APK or AAB build!");
|
||||
else
|
||||
Debug.LogWarning("Couldn't find compiled APK or AAB build! " +
|
||||
"This is fine if you use Export Project feature.");
|
||||
}
|
||||
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
private static BuildHashes HashSuitableFilesInZipFile(string path, FilteringData filters,
|
||||
IProgress<FilesProgress> progress)
|
||||
{
|
||||
ZipFile zf = null;
|
||||
|
||||
try
|
||||
{
|
||||
var sw = Stopwatch.StartNew();
|
||||
|
||||
var latestPercent = 0;
|
||||
var filesChecked = 0;
|
||||
var fileHashes = new ConcurrentBag<FileHash>();
|
||||
var fs = File.OpenRead(path);
|
||||
zf = new ZipFile(fs);
|
||||
var count = zf.Count;
|
||||
|
||||
var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };
|
||||
var sha1Pool = new ThreadSafeDisposablesPool<SHA1Wrapper>(() => new SHA1Wrapper());
|
||||
|
||||
Parallel.ForEach(zf.Cast<ZipEntry>(), options, zipEntry =>
|
||||
{
|
||||
string entryFileName = null;
|
||||
var skipped = true;
|
||||
try
|
||||
{
|
||||
// skip folders since we can't hash them
|
||||
if (!zipEntry.IsFile)
|
||||
return;
|
||||
|
||||
entryFileName = zipEntry.Name;
|
||||
if (filters.IsIgnored(entryFileName))
|
||||
return;
|
||||
|
||||
if (!filters.IsIncluded(entryFileName))
|
||||
return;
|
||||
|
||||
using (var zipStream = zf.GetInputStream(zipEntry))
|
||||
{
|
||||
fileHashes.Add(new FileHash(entryFileName, zipStream, sha1Pool));
|
||||
}
|
||||
|
||||
skipped = false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e);
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
lock (ProgressLock)
|
||||
{
|
||||
filesChecked++;
|
||||
if (!skipped)
|
||||
progress?.ReportPercent(ref latestPercent, filesChecked, count, Path.GetFileName(entryFileName));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
sha1Pool.Dispose();
|
||||
progress?.Report(FilesProgress.None());
|
||||
sw.Stop();
|
||||
|
||||
if (fileHashes.Count == 0)
|
||||
return null;
|
||||
|
||||
var result = new BuildHashes(path, fileHashes.ToArray())
|
||||
{
|
||||
DurationSeconds = sw.Elapsed.TotalSeconds
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Error while calculating code hash!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (zf != null)
|
||||
{
|
||||
zf.IsStreamOwner = true;
|
||||
zf.Close();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static FilteringData GetFilters()
|
||||
{
|
||||
var il2Cpp = false;
|
||||
#if UNITY_EDITOR
|
||||
il2Cpp = SettingsUtils.IsIL2CPPEnabled();
|
||||
#elif ENABLE_IL2CPP
|
||||
il2Cpp = true;
|
||||
#endif
|
||||
return FiltersProducer.GetFileFiltersAndroid(il2Cpp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9717d52c2bf842caaa8575f8f2947afa
|
||||
timeCreated: 1680806503
|
||||
@@ -1,49 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using CodeStage.AntiCheat.Common;
|
||||
using CodeStage.AntiCheat.Genuine.CodeHash;
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PostProcessors
|
||||
{
|
||||
internal static class WindowsBuildHashGenerator
|
||||
{
|
||||
public static async Task<IReadOnlyList<BuildHashes>> GetBuildHashes(string buildPath)
|
||||
{
|
||||
var folder = Path.GetDirectoryName(buildPath);
|
||||
if (folder == null)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Could not found build folder for this file: " + buildPath);
|
||||
return Array.Empty<BuildHashes>();
|
||||
}
|
||||
|
||||
var progress = FilesProgress.CreateNew("ACTk: Generating code hash");
|
||||
var filters = GetFilters();
|
||||
var buildHashes = await Task.Run(()=> StandaloneWindowsWorker.GetBuildHashes(folder, filters, Environment.ProcessorCount,
|
||||
progress));
|
||||
|
||||
if (buildHashes == null)
|
||||
return Array.Empty<BuildHashes>();
|
||||
|
||||
return new [] { buildHashes };
|
||||
}
|
||||
|
||||
private static FilteringData GetFilters()
|
||||
{
|
||||
var il2Cpp = false;
|
||||
#if UNITY_EDITOR
|
||||
il2Cpp = SettingsUtils.IsIL2CPPEnabled();
|
||||
#elif ENABLE_IL2CPP
|
||||
il2Cpp = true;
|
||||
#endif
|
||||
return FiltersProducer.GetFileFiltersStandaloneWindows(il2Cpp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 02b38fd3639d4fd7a1a6732fadbeebc8
|
||||
timeCreated: 1680806778
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 59e19c7338f04be697d7788c76f0cde6
|
||||
timeCreated: 1552927805
|
||||
@@ -1,70 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System;
|
||||
|
||||
/// <summary>
|
||||
/// Describes assembly which is added to the InjectionDetector "white list".
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class AllowedAssembly
|
||||
{
|
||||
[Obsolete("Please use Name property instead.", false)]
|
||||
public string name => Name;
|
||||
|
||||
[Obsolete("Please use Hashes property instead.", false)]
|
||||
public int[] hashes => Hashes;
|
||||
|
||||
/// <summary>
|
||||
/// Assembly name, i.e.: ACTk.Runtime.
|
||||
/// </summary>
|
||||
public string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Array of whitelisted hashes for the assembly with given Name.
|
||||
/// </summary>
|
||||
public int[] Hashes { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructs new instance.
|
||||
/// </summary>
|
||||
/// <param name="name">Sets Name property.</param>
|
||||
/// <param name="hashes">Sets Hashes property.</param>
|
||||
public AllowedAssembly(string name, int[] hashes)
|
||||
{
|
||||
Name = name;
|
||||
Hashes = hashes;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Allows adding new hash to the Hashes collection.
|
||||
/// </summary>
|
||||
/// <param name="hash">New whitelisted hash for the assembly with specified Name.</param>
|
||||
/// <returns>True if hash was added and false otherwise (i.e. when hash already existed in the collection).</returns>
|
||||
public bool AddHash(int hash)
|
||||
{
|
||||
if (Array.IndexOf(Hashes, hash) != -1) return false;
|
||||
|
||||
var oldLen = Hashes.Length;
|
||||
var newLen = oldLen + 1;
|
||||
|
||||
var newHashesArray = new int[newLen];
|
||||
Array.Copy(Hashes, newHashesArray, oldLen);
|
||||
|
||||
Hashes = newHashesArray;
|
||||
Hashes[oldLen] = hash;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return Name + " (hashes: " + Hashes.Length + ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 99e59ee643091664d874b8418be8b78e
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,23 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System.IO;
|
||||
|
||||
internal static class InjectionConstants
|
||||
{
|
||||
public const string LegacyWhitelistRelativePath = "InjectionDetectorData/UserWhitelist.bytes";
|
||||
|
||||
public const string PrefsKey = "ACTDIDEnabledGlobal";
|
||||
public const string DataSeparator = ":";
|
||||
|
||||
public static readonly string ResourcesFolder = Path.Combine(ACTkEditorConstants.AssetsFolder, "Resources");
|
||||
public static readonly string DataFilePath = Path.Combine(ResourcesFolder, DataFileName);
|
||||
|
||||
private const string DataFileName = "fndid.bytes";
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fdb8abbb3fde4da3aa210fccf74e9524
|
||||
timeCreated: 1552925592
|
||||
@@ -1,229 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
#if (UNITY_STANDALONE || UNITY_ANDROID)
|
||||
#define UNITY_SUPPORTED_PLATFORM
|
||||
#endif
|
||||
|
||||
#define ACTK_DEBUG
|
||||
#undef ACTK_DEBUG
|
||||
|
||||
#define ACTK_DEBUG_VERBOSE
|
||||
#undef ACTK_DEBUG_VERBOSE
|
||||
|
||||
#define ACTK_DEBUG_PARANIOD
|
||||
#undef ACTK_DEBUG_PARANIOD
|
||||
|
||||
#if ACTK_DEBUG_PARANIOD
|
||||
#define ACTK_DEBUG
|
||||
#define ACTK_DEBUG_VERBOSE
|
||||
#endif
|
||||
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
#define ACTK_DEBUG
|
||||
#endif
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using Common;
|
||||
using ObscuredTypes;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
internal static class InjectionRoutines
|
||||
{
|
||||
private static bool cleanupDone;
|
||||
|
||||
public static bool IsInjectionPossible()
|
||||
{
|
||||
return IsTargetPlatformCompatible() && !SettingsUtils.IsIL2CPPEnabled();
|
||||
}
|
||||
|
||||
public static bool IsTargetPlatformCompatible()
|
||||
{
|
||||
#if UNITY_SUPPORTED_PLATFORM
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static int GetAssemblyHash(AssemblyName ass)
|
||||
{
|
||||
var hashInfo = ass.Name;
|
||||
|
||||
var bytes = ass.GetPublicKeyToken();
|
||||
if (bytes != null && bytes.Length == 8)
|
||||
{
|
||||
hashInfo += PublicKeyTokenToString(bytes);
|
||||
}
|
||||
|
||||
// Jenkins hash function (http://en.wikipedia.org/wiki/Jenkins_hash_function)
|
||||
var result = 0;
|
||||
var len = hashInfo.Length;
|
||||
|
||||
for (var i = 0; i < len; ++i)
|
||||
{
|
||||
result += hashInfo[i];
|
||||
result += (result << 10);
|
||||
result ^= (result >> 6);
|
||||
}
|
||||
result += (result << 3);
|
||||
result ^= (result >> 11);
|
||||
result += (result << 15);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<AllowedAssembly> MergeAllowedAssemblies(IEnumerable<AllowedAssembly> collection1, IEnumerable<AllowedAssembly> collection2)
|
||||
{
|
||||
var result = new List<AllowedAssembly>(collection1);
|
||||
|
||||
foreach (var whiteListedAssembly in collection2)
|
||||
{
|
||||
var exists = false;
|
||||
foreach (var assembly in result)
|
||||
{
|
||||
if (assembly.Name != whiteListedAssembly.Name) continue;
|
||||
|
||||
exists = true;
|
||||
foreach (var hash in whiteListedAssembly.Hashes)
|
||||
{
|
||||
if (Array.IndexOf(assembly.Hashes, hash) == -1)
|
||||
{
|
||||
assembly.AddHash(hash);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (!exists)
|
||||
{
|
||||
result.Add(whiteListedAssembly);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void InitCleanup()
|
||||
{
|
||||
cleanupDone = false;
|
||||
}
|
||||
|
||||
public static void Cleanup()
|
||||
{
|
||||
if (cleanupDone) return;
|
||||
cleanupDone = true;
|
||||
|
||||
TryMigrateSettings();
|
||||
TryMigrateLegacyInjectionWhitelist();
|
||||
|
||||
if (File.Exists(InjectionConstants.DataFilePath))
|
||||
{
|
||||
#if ACTK_DEBUG
|
||||
Debug.Log(ACTk.LogPrefix + "Data file found and going to be removed: " + InjectionConstants.DataFilePath);
|
||||
#endif
|
||||
EditorTools.DeleteFile(InjectionConstants.DataFilePath);
|
||||
EditorTools.DeleteFile(AssetDatabase.GetTextMetaFilePathFromAssetPath(InjectionConstants.DataFilePath));
|
||||
EditorTools.RemoveDirectoryIfEmpty(InjectionConstants.ResourcesFolder);
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
private static string PublicKeyTokenToString(byte[] bytes)
|
||||
{
|
||||
var result = "";
|
||||
|
||||
// AssemblyName.GetPublicKeyToken() returns 8 bytes
|
||||
for (var i = 0; i < 8; i++)
|
||||
{
|
||||
result += ACTkEditorConstants.HexTable[bytes[i]];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void TryMigrateSettings()
|
||||
{
|
||||
if (!EditorPrefs.HasKey(InjectionConstants.PrefsKey)) return;
|
||||
|
||||
ACTkSettings.Instance.InjectionDetectorEnabled = EditorPrefs.GetBool(InjectionConstants.PrefsKey);
|
||||
EditorPrefs.DeleteKey(InjectionConstants.PrefsKey);
|
||||
}
|
||||
|
||||
private static void TryMigrateLegacyInjectionWhitelist()
|
||||
{
|
||||
if (!File.Exists(InjectionConstants.LegacyWhitelistRelativePath)) return;
|
||||
var whitelistedAssemblies = LoadAndParseLegacyWhitelist();
|
||||
ACTkSettings.Instance.InjectionDetectorWhiteList = MergeAllowedAssemblies(ACTkSettings.Instance.InjectionDetectorWhiteList, whitelistedAssemblies);
|
||||
}
|
||||
|
||||
private static IEnumerable<AllowedAssembly> LoadAndParseLegacyWhitelist()
|
||||
{
|
||||
var result = new List<AllowedAssembly>();
|
||||
string[] separator = { InjectionConstants.DataSeparator };
|
||||
|
||||
var fs = new FileStream(InjectionConstants.LegacyWhitelistRelativePath, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
var br = new BinaryReader(fs);
|
||||
|
||||
try
|
||||
{
|
||||
var count = br.ReadInt32();
|
||||
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var line = br.ReadString();
|
||||
line = new string(ObscuredString.Encrypt(line, ACTk.StringKey));
|
||||
var strArr = line.Split(separator, StringSplitOptions.RemoveEmptyEntries);
|
||||
var stringsCount = strArr.Length;
|
||||
if (stringsCount > 1)
|
||||
{
|
||||
var assemblyName = strArr[0];
|
||||
|
||||
var hashes = new int[stringsCount - 1];
|
||||
for (var j = 1; j < stringsCount; j++)
|
||||
{
|
||||
var success = int.TryParse(strArr[j], out var parseResult);
|
||||
if (success)
|
||||
{
|
||||
hashes[j - 1] = parseResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError(ACTk.LogPrefix + "Could not parse value: " + strArr[j] +
|
||||
", line:\n" + line);
|
||||
}
|
||||
}
|
||||
|
||||
result.Add(new AllowedAssembly(assemblyName, hashes));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Error parsing whitelist file line!");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Error while reading legacy whitelist!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
br.Close();
|
||||
fs.Close();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 682e4f8bd25b4b3f9ab90c2c080decf5
|
||||
timeCreated: 1552927820
|
||||
@@ -1,234 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
#define ACTK_DEBUG
|
||||
#undef ACTK_DEBUG
|
||||
|
||||
#define ACTK_DEBUG_VERBOSE
|
||||
#undef ACTK_DEBUG_VERBOSE
|
||||
|
||||
#define ACTK_DEBUG_PARANIOD
|
||||
#undef ACTK_DEBUG_PARANIOD
|
||||
|
||||
#if ACTK_DEBUG_PARANIOD
|
||||
#define ACTK_DEBUG
|
||||
#define ACTK_DEBUG_VERBOSE
|
||||
#endif
|
||||
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
#define ACTK_DEBUG
|
||||
#endif
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Common;
|
||||
using Detectors;
|
||||
using ObscuredTypes;
|
||||
using PostProcessors;
|
||||
using UnityEditor;
|
||||
using Debug = UnityEngine.Debug;
|
||||
|
||||
#if ACTK_DEBUG
|
||||
using System.Diagnostics;
|
||||
#endif
|
||||
|
||||
internal static class InjectionWhitelistBuilder
|
||||
{
|
||||
private const string ProgressCaption = "ACTk: Building InjectionDetector Whitelist";
|
||||
|
||||
#if ACTK_DEBUG
|
||||
private static Stopwatch sw;
|
||||
#endif
|
||||
|
||||
public static void GenerateWhitelist()
|
||||
{
|
||||
try
|
||||
{
|
||||
GenerateWhitelistInternal();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport($"Something went wrong while building {nameof(InjectionDetector)} whitelist!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
}
|
||||
|
||||
private static void GenerateWhitelistInternal()
|
||||
{
|
||||
#if ACTK_DEBUG
|
||||
sw = Stopwatch.StartNew();
|
||||
sw.Stop();
|
||||
Debug.Log("=== Injection Detector Whitelist Build Start ===");
|
||||
sw.Start();
|
||||
#endif
|
||||
EditorUtility.DisplayProgressBar(ProgressCaption, "Gathering assemblies", 0);
|
||||
|
||||
var assembliesInBuild = GetAssembliesInBuild();
|
||||
if (assembliesInBuild.Length == 0)
|
||||
ACTk.PrintExceptionForSupport("Can't find any assemblies in build!");
|
||||
|
||||
var assembliesAllowedByUser = GetUserWhiteListAssemblies();
|
||||
var allAllowedAssemblies = InjectionRoutines.MergeAllowedAssemblies(assembliesInBuild, assembliesAllowedByUser);
|
||||
|
||||
EditorUtility.DisplayProgressBar(ProgressCaption, "Writing assemblies hashes", 0);
|
||||
|
||||
WriteAllowedAssemblies(allAllowedAssemblies);
|
||||
|
||||
#if ACTK_DEBUG
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "WhiteList build duration: " + sw.ElapsedMilliseconds + " ms.");
|
||||
#endif
|
||||
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
private static AllowedAssembly[] GetAssembliesInBuild()
|
||||
{
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Trying to guess which assemblies can get into the build...");
|
||||
sw.Start();
|
||||
#endif
|
||||
var libraries = BuildPostProcessor.GetGuessedLibrariesForBuild();
|
||||
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Total libraries candidates: " + libraries.Length);
|
||||
sw.Start();
|
||||
|
||||
var invalidAssemblies = string.Empty;
|
||||
#endif
|
||||
|
||||
var result = new List<AllowedAssembly>();
|
||||
|
||||
foreach (var libraryPath in libraries)
|
||||
{
|
||||
#if ACTK_DEBUG_PARANIOD
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Checking library at the path: " + libraryPath);
|
||||
sw.Start();
|
||||
#endif
|
||||
try
|
||||
{
|
||||
var assName = AssemblyName.GetAssemblyName(libraryPath);
|
||||
var name = assName.Name;
|
||||
var hash = InjectionRoutines.GetAssemblyHash(assName);
|
||||
|
||||
var allowed = result.FirstOrDefault(allowedAssembly => allowedAssembly.Name == name);
|
||||
if (allowed != null)
|
||||
{
|
||||
allowed.AddHash(hash);
|
||||
}
|
||||
else
|
||||
{
|
||||
allowed = new AllowedAssembly(name, new[] { hash });
|
||||
result.Add(allowed);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// not a valid IL assembly, skipping
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
invalidAssemblies += libraryPath + "\n";
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
if (!string.IsNullOrEmpty(invalidAssemblies))
|
||||
{
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Not valid assemblies:\n" + invalidAssemblies);
|
||||
sw.Start();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ACTK_DEBUG
|
||||
sw.Stop();
|
||||
var trace = ACTk.LogPrefix + "Found assemblies in build (" + result.Count + ", " + sw.ElapsedMilliseconds + " ms):\n";
|
||||
|
||||
foreach (var allowedAssembly in result)
|
||||
{
|
||||
trace += " Name: " + allowedAssembly.name + "\n";
|
||||
trace = allowedAssembly.hashes.Aggregate(trace, (current, hash) => current + (" Hash: " + hash + "\n"));
|
||||
}
|
||||
Debug.Log(trace);
|
||||
sw.Start();
|
||||
#endif
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
private static AllowedAssembly[] GetUserWhiteListAssemblies()
|
||||
{
|
||||
var userWhiteList = ACTkSettings.Instance.InjectionDetectorWhiteList;
|
||||
#if ACTK_DEBUG
|
||||
sw.Stop();
|
||||
var trace = ACTk.LogPrefix + "User White List assemblies (" + userWhiteList.Count + "):\n";
|
||||
|
||||
foreach (var allowedAssembly in userWhiteList)
|
||||
{
|
||||
trace += " Name: " + allowedAssembly.name + "\n";
|
||||
trace = allowedAssembly.hashes.Aggregate(trace, (current, hash) => current + (" Hash: " + hash + "\n"));
|
||||
}
|
||||
Debug.Log(trace);
|
||||
sw.Start();
|
||||
#endif
|
||||
return userWhiteList.ToArray();
|
||||
}
|
||||
|
||||
private static void WriteAllowedAssemblies(List<AllowedAssembly> assemblies)
|
||||
{
|
||||
Directory.CreateDirectory(InjectionConstants.ResourcesFolder);
|
||||
var bw = new BinaryWriter(new FileStream(InjectionConstants.DataFilePath, FileMode.Create, FileAccess.Write, FileShare.Read), Encoding.Unicode);
|
||||
|
||||
bw.Write(assemblies.Count);
|
||||
|
||||
#if ACTK_DEBUG_VERBOSE
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Writing assemblies data, count: " + assemblies.Count);
|
||||
sw.Start();
|
||||
#endif
|
||||
|
||||
foreach (var assembly in assemblies)
|
||||
{
|
||||
var name = assembly.Name;
|
||||
var hashes = "";
|
||||
|
||||
for (var j = 0; j < assembly.Hashes.Length; j++)
|
||||
{
|
||||
hashes += assembly.Hashes[j].ToString(CultureInfo.InvariantCulture);
|
||||
if (j < assembly.Hashes.Length - 1)
|
||||
{
|
||||
hashes += InjectionConstants.DataSeparator;
|
||||
}
|
||||
}
|
||||
|
||||
var line = ObscuredString.Encrypt(name + InjectionConstants.DataSeparator + hashes, ACTk.StringKey);
|
||||
|
||||
#if ACTK_DEBUG_PARANIOD
|
||||
sw.Stop();
|
||||
Debug.Log(ACTk.LogPrefix + "Writing assembly:\n" + name + InjectionConstants.DataSeparator + hashes + "\n" +
|
||||
new string(line) + ", length: " + line.Length);
|
||||
sw.Start();
|
||||
#endif
|
||||
bw.Write(line.Length);
|
||||
bw.Write(line, 0, line.Length);
|
||||
}
|
||||
|
||||
bw.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ed4f862c6dc42a49c1f47d1e9ee2fb5
|
||||
timeCreated: 1552945114
|
||||
@@ -1,9 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bb730acf6c1569848b1187cd6c0e312c
|
||||
folderAsset: yes
|
||||
timeCreated: 1552913902
|
||||
licenseType: Store
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,93 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PostProcessors
|
||||
{
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Common;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
|
||||
internal class BuildPostProcessor : IPreprocessBuildWithReport, IPostBuildPlayerScriptDLLs, IPostprocessBuildWithReport
|
||||
{
|
||||
int IOrderedCallback.callbackOrder => int.MaxValue - 1;
|
||||
|
||||
public void OnPreprocessBuild(BuildReport report)
|
||||
{
|
||||
if (!ACTkSettings.Instance.InjectionDetectorEnabled ||
|
||||
!InjectionRoutines.IsInjectionPossible())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
InjectionRoutines.InitCleanup();
|
||||
Prepare();
|
||||
}
|
||||
|
||||
public void OnPostBuildPlayerScriptDLLs(BuildReport report)
|
||||
{
|
||||
if (!ACTkSettings.Instance.InjectionDetectorEnabled ||
|
||||
!InjectionRoutines.IsInjectionPossible())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
InjectionWhitelistBuilder.GenerateWhitelist();
|
||||
}
|
||||
|
||||
public void OnPostprocessBuild(BuildReport report)
|
||||
{
|
||||
Cleanup();
|
||||
}
|
||||
|
||||
public static string[] GetGuessedLibrariesForBuild()
|
||||
{
|
||||
var stagingAreaFolder = Path.Combine(ACTkEditorConstants.ProjectTempFolder, "StagingArea");
|
||||
return EditorTools.FindLibrariesAt(stagingAreaFolder);
|
||||
}
|
||||
|
||||
private void Prepare()
|
||||
{
|
||||
try
|
||||
{
|
||||
EditorApplication.LockReloadAssemblies();
|
||||
|
||||
if (!Directory.Exists(InjectionConstants.ResourcesFolder))
|
||||
{
|
||||
Directory.CreateDirectory(InjectionConstants.ResourcesFolder);
|
||||
}
|
||||
|
||||
File.WriteAllText(InjectionConstants.DataFilePath, "please remove me", Encoding.Unicode);
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
EditorApplication.update += OnEditorUpdate;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ACTk.PrintExceptionForSupport("Injection Detector preparation failed!", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
EditorApplication.UnlockReloadAssemblies();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEditorUpdate()
|
||||
{
|
||||
if (!BuildPipeline.isBuildingPlayer)
|
||||
Cleanup();
|
||||
}
|
||||
|
||||
private void Cleanup()
|
||||
{
|
||||
InjectionRoutines.Cleanup();
|
||||
EditorApplication.update -= OnEditorUpdate;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e79f56c36f349f64995908c2bc571662
|
||||
timeCreated: 1552680217
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,276 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
internal class UserWhitelistEditor : EditorWindow
|
||||
{
|
||||
private const string InitialCustomName = "AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null";
|
||||
private static List<AllowedAssembly> whitelist;
|
||||
private static string whitelistPath;
|
||||
|
||||
private Vector2 scrollPosition;
|
||||
private bool manualAssemblyWhitelisting;
|
||||
private string manualAssemblyWhitelistingName = InitialCustomName;
|
||||
|
||||
internal static void ShowWindow()
|
||||
{
|
||||
EditorWindow myself = GetWindow<UserWhitelistEditor>(false, "Whitelist Editor", true);
|
||||
myself.minSize = new Vector2(500, 200);
|
||||
}
|
||||
|
||||
private void OnLostFocus()
|
||||
{
|
||||
manualAssemblyWhitelisting = false;
|
||||
manualAssemblyWhitelistingName = InitialCustomName;
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
if (whitelist == null)
|
||||
{
|
||||
whitelist = new List<AllowedAssembly>();
|
||||
LoadAndParseWhitelist();
|
||||
}
|
||||
|
||||
var tmpStyle = new GUIStyle(EditorStyles.largeLabel)
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
fontStyle = FontStyle.Bold
|
||||
};
|
||||
GUILayout.Label("User-defined Whitelist of Assemblies trusted by Injection Detector", tmpStyle);
|
||||
|
||||
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
|
||||
var whitelistUpdated = false;
|
||||
|
||||
var count = whitelist.Count;
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var assembly = whitelist[i];
|
||||
using (GUITools.Horizontal())
|
||||
{
|
||||
GUILayout.Label(assembly.ToString());
|
||||
if (GUILayout.Button(new GUIContent("-", "Remove Assembly from Whitelist"), GUILayout.Width(30)))
|
||||
{
|
||||
whitelist.Remove(assembly);
|
||||
whitelistUpdated = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpStyle = new GUIStyle(EditorStyles.largeLabel)
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter
|
||||
};
|
||||
GUILayout.Label("- no Assemblies added so far (use buttons below to add) -", tmpStyle);
|
||||
}
|
||||
|
||||
if (manualAssemblyWhitelisting)
|
||||
{
|
||||
manualAssemblyWhitelistingName = EditorGUILayout.TextField(manualAssemblyWhitelistingName);
|
||||
|
||||
using (GUITools.Horizontal())
|
||||
{
|
||||
if (GUILayout.Button("Save"))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (manualAssemblyWhitelistingName.StartsWith("Cause:"))
|
||||
{
|
||||
throw new Exception("Please remove Cause: from the assembly name!");
|
||||
}
|
||||
|
||||
var assName = new AssemblyName(manualAssemblyWhitelistingName.Trim());
|
||||
|
||||
var res = TryWhitelistAssemblyName(assName, true);
|
||||
if (res != WhitelistingResult.Exists)
|
||||
{
|
||||
whitelistUpdated = true;
|
||||
}
|
||||
manualAssemblyWhitelisting = false;
|
||||
manualAssemblyWhitelistingName = InitialCustomName;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ShowNotification(new GUIContent(e.Message));
|
||||
}
|
||||
|
||||
GUI.FocusControl("");
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Cancel"))
|
||||
{
|
||||
manualAssemblyWhitelisting = false;
|
||||
manualAssemblyWhitelistingName = InitialCustomName;
|
||||
GUI.FocusControl("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
|
||||
using (GUITools.Horizontal())
|
||||
{
|
||||
GUILayout.Space(20);
|
||||
if (GUILayout.Button("Add Assembly"))
|
||||
{
|
||||
var assemblyPath = EditorUtility.OpenFilePanel("Choose an Assembly to add", "", "dll");
|
||||
if (!string.IsNullOrEmpty(assemblyPath))
|
||||
{
|
||||
whitelistUpdated |= TryWhitelistAssemblies(new[] {assemblyPath}, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (GUILayout.Button("Add Assemblies from Folder"))
|
||||
{
|
||||
var selectedFolder = EditorUtility.OpenFolderPanel("Choose a Folder with Assemblies", "", "");
|
||||
if (!string.IsNullOrEmpty(selectedFolder))
|
||||
{
|
||||
var libraries = EditorTools.FindLibrariesAt(selectedFolder);
|
||||
whitelistUpdated |= TryWhitelistAssemblies(libraries);
|
||||
}
|
||||
}
|
||||
|
||||
if (!manualAssemblyWhitelisting)
|
||||
{
|
||||
if (GUILayout.Button("Add Assembly manually"))
|
||||
{
|
||||
manualAssemblyWhitelisting = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
if (GUILayout.Button("Clear"))
|
||||
{
|
||||
if (EditorUtility.DisplayDialog("Please confirm",
|
||||
"Are you sure you wish to completely clear your Injection Detector whitelist?", "Yes", "No"))
|
||||
{
|
||||
whitelist.Clear();
|
||||
whitelistUpdated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
GUILayout.Space(20);
|
||||
}
|
||||
|
||||
GUILayout.Space(20);
|
||||
|
||||
if (whitelistUpdated)
|
||||
{
|
||||
WriteWhitelist();
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryWhitelistAssemblies(IList<string> libraries, bool singleFile = false)
|
||||
{
|
||||
var added = 0;
|
||||
var updated = 0;
|
||||
|
||||
var count = libraries.Count;
|
||||
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
var libraryPath = libraries[i];
|
||||
try
|
||||
{
|
||||
var assName = AssemblyName.GetAssemblyName(libraryPath);
|
||||
var whitelistingResult = TryWhitelistAssemblyName(assName, singleFile);
|
||||
switch (whitelistingResult)
|
||||
{
|
||||
case WhitelistingResult.Added:
|
||||
added++;
|
||||
break;
|
||||
case WhitelistingResult.Updated:
|
||||
updated++;
|
||||
break;
|
||||
case WhitelistingResult.Exists:
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (singleFile)
|
||||
ShowNotification(new GUIContent("Selected file is not a valid .NET assembly!"));
|
||||
}
|
||||
}
|
||||
|
||||
if (!singleFile)
|
||||
{
|
||||
ShowNotification(new GUIContent("Assemblies added: " + added + ", updated: " + updated));
|
||||
}
|
||||
|
||||
return added > 0 || updated > 0;
|
||||
}
|
||||
|
||||
private WhitelistingResult TryWhitelistAssemblyName(AssemblyName assName, bool singleFile)
|
||||
{
|
||||
var result = WhitelistingResult.Exists;
|
||||
|
||||
var assNameString = assName.Name;
|
||||
var hash = InjectionRoutines.GetAssemblyHash(assName);
|
||||
|
||||
var allowed = whitelist.FirstOrDefault(allowedAssembly => allowedAssembly.Name == assNameString);
|
||||
|
||||
if (allowed != null)
|
||||
{
|
||||
if (allowed.AddHash(hash))
|
||||
{
|
||||
if (singleFile) ShowNotification(new GUIContent("New hash added!"));
|
||||
result = WhitelistingResult.Updated;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (singleFile) ShowNotification(new GUIContent("Assembly already exists!"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
allowed = new AllowedAssembly(assNameString, new[] {hash});
|
||||
whitelist.Add(allowed);
|
||||
|
||||
if (singleFile) ShowNotification(new GUIContent("Assembly added!"));
|
||||
result = WhitelistingResult.Added;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void LoadAndParseWhitelist()
|
||||
{
|
||||
whitelist = ACTkSettings.Instance.InjectionDetectorWhiteList;
|
||||
}
|
||||
|
||||
private static void WriteWhitelist()
|
||||
{
|
||||
ACTkSettings.Instance.InjectionDetectorWhiteList = whitelist;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
|
||||
private enum WhitelistingResult : byte
|
||||
{
|
||||
Exists,
|
||||
Added,
|
||||
Updated
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bd28be63d7a09224da0cac7e3178896d
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d1140a4b6184eae45916fdae3da40a10
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,253 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using Common;
|
||||
using UnityEditor;
|
||||
|
||||
public static partial class MigrateUtils
|
||||
{
|
||||
private static bool MigrateObscuredDouble(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValue == null)
|
||||
return false;
|
||||
|
||||
var fakeValue = sp.FindPropertyRelative("fakeValue");
|
||||
|
||||
var migratedVersion = sp.FindPropertyRelative("migratedVersion");
|
||||
if (migratedVersion != null)
|
||||
{
|
||||
if (migratedVersion.stringValue == MigrationVersion)
|
||||
{
|
||||
if (!fakeValue.prefabOverride)
|
||||
return false;
|
||||
}
|
||||
|
||||
migratedVersion.stringValue = MigrationVersion;
|
||||
}
|
||||
|
||||
var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte8");
|
||||
var hiddenValueOld = default(ACTkByte8);
|
||||
var oldValueExists = false;
|
||||
|
||||
if (hiddenValueOldProperty?.FindPropertyRelative("b1") != null)
|
||||
{
|
||||
hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue;
|
||||
hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue;
|
||||
hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue;
|
||||
hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue;
|
||||
hiddenValueOld.b5 = (byte)hiddenValueOldProperty.FindPropertyRelative("b5").intValue;
|
||||
hiddenValueOld.b6 = (byte)hiddenValueOldProperty.FindPropertyRelative("b6").intValue;
|
||||
hiddenValueOld.b7 = (byte)hiddenValueOldProperty.FindPropertyRelative("b7").intValue;
|
||||
hiddenValueOld.b8 = (byte)hiddenValueOldProperty.FindPropertyRelative("b8").intValue;
|
||||
|
||||
if (hiddenValueOld.b1 != 0 ||
|
||||
hiddenValueOld.b2 != 0 ||
|
||||
hiddenValueOld.b3 != 0 ||
|
||||
hiddenValueOld.b4 != 0 ||
|
||||
hiddenValueOld.b5 != 0 ||
|
||||
hiddenValueOld.b6 != 0 ||
|
||||
hiddenValueOld.b7 != 0 ||
|
||||
hiddenValueOld.b8 != 0)
|
||||
{
|
||||
oldValueExists = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!oldValueExists)
|
||||
return false;
|
||||
|
||||
var union = new LongBytesUnion {b8 = hiddenValueOld};
|
||||
union.b8.Shuffle();
|
||||
hiddenValue.longValue = union.l;
|
||||
|
||||
hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b5").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b6").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b7").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b8").intValue = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool MigrateObscuredFloat(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValue == null)
|
||||
return false;
|
||||
|
||||
var fakeValue = sp.FindPropertyRelative("fakeValue");
|
||||
|
||||
var migratedVersion = sp.FindPropertyRelative("migratedVersion");
|
||||
if (migratedVersion != null)
|
||||
{
|
||||
if (migratedVersion.stringValue == MigrationVersion)
|
||||
{
|
||||
if (!fakeValue.prefabOverride)
|
||||
return false;
|
||||
}
|
||||
|
||||
migratedVersion.stringValue = MigrationVersion;
|
||||
}
|
||||
|
||||
var hiddenValueOldProperty = sp.FindPropertyRelative("hiddenValueOldByte4");
|
||||
var hiddenValueOld = default(ACTkByte4);
|
||||
var oldValueExists = false;
|
||||
|
||||
if (hiddenValueOldProperty?.FindPropertyRelative("b1") != null)
|
||||
{
|
||||
hiddenValueOld.b1 = (byte)hiddenValueOldProperty.FindPropertyRelative("b1").intValue;
|
||||
hiddenValueOld.b2 = (byte)hiddenValueOldProperty.FindPropertyRelative("b2").intValue;
|
||||
hiddenValueOld.b3 = (byte)hiddenValueOldProperty.FindPropertyRelative("b3").intValue;
|
||||
hiddenValueOld.b4 = (byte)hiddenValueOldProperty.FindPropertyRelative("b4").intValue;
|
||||
|
||||
if (hiddenValueOld.b1 != 0 ||
|
||||
hiddenValueOld.b2 != 0 ||
|
||||
hiddenValueOld.b3 != 0 ||
|
||||
hiddenValueOld.b4 != 0)
|
||||
{
|
||||
oldValueExists = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!oldValueExists)
|
||||
return false;
|
||||
|
||||
var union = new FloatIntBytesUnion {b4 = hiddenValueOld};
|
||||
union.b4.Shuffle();
|
||||
hiddenValue.longValue = union.i;
|
||||
|
||||
hiddenValueOldProperty.FindPropertyRelative("b1").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b2").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b3").intValue = 0;
|
||||
hiddenValueOldProperty.FindPropertyRelative("b4").intValue = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool MigrateObscuredVector2(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValue == null)
|
||||
return false;
|
||||
|
||||
var fakeValue = sp.FindPropertyRelative("fakeValue");
|
||||
|
||||
var migratedVersion = sp.FindPropertyRelative("migratedVersion");
|
||||
if (migratedVersion != null)
|
||||
{
|
||||
if (migratedVersion.stringValue == MigrationVersion)
|
||||
{
|
||||
if (!fakeValue.prefabOverride)
|
||||
return false;
|
||||
}
|
||||
|
||||
migratedVersion.stringValue = MigrationVersion;
|
||||
}
|
||||
|
||||
var hiddenValueX = hiddenValue.FindPropertyRelative("x");
|
||||
var hiddenValueY = hiddenValue.FindPropertyRelative("y");
|
||||
|
||||
var union = new FloatIntBytesUnion {i = hiddenValueX.intValue};
|
||||
union.b4.Shuffle();
|
||||
hiddenValueX.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueY.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueY.intValue = union.i;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool MigrateObscuredVector3(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValue == null)
|
||||
return false;
|
||||
|
||||
var fakeValue = sp.FindPropertyRelative("fakeValue");
|
||||
|
||||
var migratedVersion = sp.FindPropertyRelative("migratedVersion");
|
||||
if (migratedVersion != null)
|
||||
{
|
||||
if (migratedVersion.stringValue == MigrationVersion)
|
||||
{
|
||||
if (!fakeValue.prefabOverride)
|
||||
return false;
|
||||
}
|
||||
|
||||
migratedVersion.stringValue = MigrationVersion;
|
||||
}
|
||||
|
||||
var hiddenValueX = hiddenValue.FindPropertyRelative("x");
|
||||
var hiddenValueY = hiddenValue.FindPropertyRelative("y");
|
||||
var hiddenValueZ = hiddenValue.FindPropertyRelative("z");
|
||||
|
||||
var union = new FloatIntBytesUnion {i = hiddenValueX.intValue};
|
||||
union.b4.Shuffle();
|
||||
hiddenValueX.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueY.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueY.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueZ.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueZ.intValue = union.i;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool MigrateObscuredQuaternion(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValue == null)
|
||||
return false;
|
||||
|
||||
var fakeValue = sp.FindPropertyRelative("fakeValue");
|
||||
|
||||
var migratedVersion = sp.FindPropertyRelative("migratedVersion");
|
||||
if (migratedVersion != null)
|
||||
{
|
||||
if (migratedVersion.stringValue == MigrationVersion)
|
||||
{
|
||||
if (!fakeValue.prefabOverride)
|
||||
return false;
|
||||
}
|
||||
|
||||
migratedVersion.stringValue = MigrationVersion;
|
||||
}
|
||||
|
||||
var hiddenValueX = hiddenValue.FindPropertyRelative("x");
|
||||
var hiddenValueY = hiddenValue.FindPropertyRelative("y");
|
||||
var hiddenValueZ = hiddenValue.FindPropertyRelative("z");
|
||||
var hiddenValueW = hiddenValue.FindPropertyRelative("w");
|
||||
|
||||
var union = new FloatIntBytesUnion {i = hiddenValueX.intValue};
|
||||
union.b4.Shuffle();
|
||||
hiddenValueX.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueY.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueY.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueZ.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueZ.intValue = union.i;
|
||||
|
||||
union.i = hiddenValueW.intValue;
|
||||
union.b4.Shuffle();
|
||||
hiddenValueW.intValue = union.i;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7e1925e5a5f04349bee0d734c5705598
|
||||
timeCreated: 1621638102
|
||||
@@ -1,160 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode
|
||||
{
|
||||
using Common;
|
||||
using System.Runtime.InteropServices;
|
||||
using ObscuredTypes;
|
||||
using PropertyDrawers;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
/// <summary>
|
||||
/// Class with utility functions to help with ACTk migrations after updates.
|
||||
/// </summary>
|
||||
public static partial class MigrateUtils
|
||||
{
|
||||
private const string MigrationVersion = "2";
|
||||
|
||||
/// <summary>
|
||||
/// Checks all prefabs in project for old version of obscured types and tries to migrate values to the new version.
|
||||
/// </summary>
|
||||
public static void MigrateObscuredTypesOnPrefabs(params string[] typesToMigrate)
|
||||
{
|
||||
if (!EditorUtility.DisplayDialog("ACTk Obscured types migration",
|
||||
"Are you sure you wish to scan all prefabs in your project and automatically migrate values to the new format?\n" +
|
||||
GetWhatMigratesString(typesToMigrate),
|
||||
"Yes", "No"))
|
||||
{
|
||||
Debug.Log(ACTk.LogPrefix + "Obscured types migration was canceled by user.");
|
||||
return;
|
||||
}
|
||||
|
||||
EditorTools.TraverseSerializedScriptsAssets(ProcessProperty, typesToMigrate);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks all scenes in project for old version of obscured types and tries to migrate values to the new version.
|
||||
/// </summary>
|
||||
public static void MigrateObscuredTypesInScene(params string[] typesToMigrate)
|
||||
{
|
||||
if (!EditorUtility.DisplayDialog("ACTk Obscured types migration",
|
||||
"Are you sure you wish to scan all opened scenes and automatically migrate values to the new format?\n" +
|
||||
GetWhatMigratesString(typesToMigrate),
|
||||
"Yes", "No"))
|
||||
{
|
||||
Debug.Log(ACTk.LogPrefix + "Obscured types migration was canceled by user.");
|
||||
return;
|
||||
}
|
||||
|
||||
EditorTools.TraverseSerializedScriptsInScenes(ProcessProperty, typesToMigrate);
|
||||
}
|
||||
|
||||
private static bool ProcessProperty(Object target, SerializedProperty sp, string label, string type)
|
||||
{
|
||||
var modified = false;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case "ObscuredDouble":
|
||||
{
|
||||
modified = MigrateObscuredDouble(sp);
|
||||
break;
|
||||
}
|
||||
case "ObscuredFloat":
|
||||
{
|
||||
modified = MigrateObscuredFloat(sp);
|
||||
break;
|
||||
}
|
||||
case "ObscuredVector2":
|
||||
{
|
||||
modified = MigrateObscuredVector2(sp);
|
||||
break;
|
||||
}
|
||||
case "ObscuredVector3":
|
||||
{
|
||||
modified = MigrateObscuredVector3(sp);
|
||||
break;
|
||||
}
|
||||
case "ObscuredQuaternion":
|
||||
{
|
||||
modified = MigrateObscuredQuaternion(sp);
|
||||
break;
|
||||
}
|
||||
case "ObscuredString":
|
||||
{
|
||||
modified = MigrateObscuredStringIfNecessary(sp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (modified)
|
||||
Debug.Log($"{ACTk.LogPrefix}Migrated property {sp.displayName}:{type} at the object {label}");
|
||||
|
||||
return modified;
|
||||
}
|
||||
|
||||
internal static bool MigrateObscuredStringIfNecessary(SerializedProperty sp)
|
||||
{
|
||||
var hiddenValueProperty = sp.FindPropertyRelative("hiddenValue");
|
||||
if (hiddenValueProperty == null) return false;
|
||||
|
||||
var currentCryptoKeyOldProperty = sp.FindPropertyRelative("currentCryptoKey");
|
||||
if (currentCryptoKeyOldProperty == null) return false;
|
||||
|
||||
var currentCryptoKeyOld = currentCryptoKeyOldProperty.stringValue;
|
||||
if (string.IsNullOrEmpty(currentCryptoKeyOld)) return false;
|
||||
|
||||
var hiddenCharsProperty = sp.FindPropertyRelative("hiddenChars");
|
||||
if (hiddenCharsProperty == null) return false;
|
||||
|
||||
var hiddenValue = ObscuredStringDrawer.GetBytesObsolete(hiddenValueProperty);
|
||||
|
||||
var decrypted =
|
||||
ObscuredString.EncryptDecryptObsolete(ObscuredString.GetStringObsolete(hiddenValue),
|
||||
currentCryptoKeyOld);
|
||||
|
||||
var currentCryptoKey = ObscuredString.GenerateKey();
|
||||
var hiddenChars = ObscuredString.InternalEncryptDecrypt(decrypted.ToCharArray(), currentCryptoKey);
|
||||
|
||||
ObscuredStringDrawer.SetChars(hiddenCharsProperty, hiddenChars);
|
||||
var currentCryptoKeyProperty = sp.FindPropertyRelative("cryptoKey");
|
||||
ObscuredStringDrawer.SetChars(currentCryptoKeyProperty, currentCryptoKey);
|
||||
|
||||
hiddenValueProperty.arraySize = 0;
|
||||
currentCryptoKeyOldProperty.stringValue = null;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string GetWhatMigratesString(string[] typesToMigrate)
|
||||
{
|
||||
return string.Join(", ", typesToMigrate) + " will migrated.";
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct LongBytesUnion
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public readonly long l;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public ACTkByte8 b8;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct FloatIntBytesUnion
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public int i;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public ACTkByte4 b4;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c1c7ff960ccd8a243ad385a3fe965e9e
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
@@ -1,7 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dfff86e18b5565b499779c37590c4d83
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,122 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using System.Numerics;
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredBigInteger))]
|
||||
internal class ObscuredBigIntegerDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative(nameof(ObscuredBigInteger.hiddenValue));
|
||||
var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredBigInteger.currentCryptoKey));
|
||||
var inited = sp.FindPropertyRelative(nameof(ObscuredBigInteger.inited));
|
||||
var fakeValue = sp.FindPropertyRelative(nameof(ObscuredBigInteger.fakeValue));
|
||||
var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredBigInteger.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = (uint)cryptoKey.intValue;
|
||||
BigInteger val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
{
|
||||
currentCryptoKey = ObscuredBigInteger.GenerateKey();
|
||||
cryptoKey.intValue = (int)currentCryptoKey;
|
||||
}
|
||||
|
||||
var encrypted = ObscuredBigInteger.Encrypt(0, currentCryptoKey);
|
||||
SetBigInteger(hiddenValue, encrypted);
|
||||
inited.boolValue = true;
|
||||
SetBigInteger(fakeValue, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredBigInteger.Decrypt(GetBigInteger(hiddenValue), currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, sp);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
var bigIntString = EditorGUI.DelayedTextField(position, label, val.ToString());
|
||||
#else
|
||||
var bigIntString = EditorGUI.TextField(position, label, val.ToString());
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
if (!BigInteger.TryParse(bigIntString, out var newValue))
|
||||
newValue = 0;
|
||||
|
||||
var encrypted = ObscuredBigInteger.Encrypt(newValue, currentCryptoKey);
|
||||
SetBigInteger(hiddenValue, encrypted);
|
||||
SetBigInteger(fakeValue, newValue);
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
private static BigInteger GetBigInteger(SerializedProperty serializableBigInteger)
|
||||
{
|
||||
var result = new SerializableBigInteger();
|
||||
var rawProperty = serializableBigInteger.FindPropertyRelative(nameof(SerializableBigInteger.raw));
|
||||
var signProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.sign));
|
||||
var bitsProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.bits));
|
||||
var bits = ReadBitsArray(bitsProperty);
|
||||
|
||||
result.raw = new SerializableBigInteger.BigIntegerContents
|
||||
{
|
||||
sign = signProperty.intValue,
|
||||
bits = bits
|
||||
};
|
||||
|
||||
return result.value;
|
||||
}
|
||||
|
||||
private static void SetBigInteger(SerializedProperty serializableBigInteger, BigInteger value)
|
||||
{
|
||||
var explicitStruct = new SerializableBigInteger
|
||||
{
|
||||
value = value
|
||||
};
|
||||
|
||||
var sign = explicitStruct.raw.sign;
|
||||
var bits = explicitStruct.raw.bits;
|
||||
|
||||
var rawProperty = serializableBigInteger.FindPropertyRelative(nameof(SerializableBigInteger.raw));
|
||||
var signProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.sign));
|
||||
var bitsProperty = rawProperty.FindPropertyRelative(nameof(SerializableBigInteger.BigIntegerContents.bits));
|
||||
|
||||
signProperty.intValue = sign;
|
||||
WriteBitsArray(bitsProperty, bits);
|
||||
}
|
||||
|
||||
private static uint[] ReadBitsArray(SerializedProperty bits)
|
||||
{
|
||||
var count = bits.arraySize;
|
||||
if (count == 0)
|
||||
return null;
|
||||
var result = new uint[count];
|
||||
for (var i = 0; i < count; i++)
|
||||
result[i] = (uint)bits.GetArrayElementAtIndex(i).longValue;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void WriteBitsArray(SerializedProperty bitsProperty, uint[] bits)
|
||||
{
|
||||
bitsProperty.arraySize = bits?.Length ?? 0;
|
||||
for (var i = 0; i < bits?.Length; i++)
|
||||
bitsProperty.GetArrayElementAtIndex(i).longValue = bits[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c48a363379404a3f8ffa0970bd1f7653
|
||||
timeCreated: 1653693062
|
||||
@@ -1,54 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredBool))]
|
||||
internal class ObscuredBoolDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label)
|
||||
{
|
||||
var hiddenValue = sp.FindPropertyRelative(nameof(ObscuredBool.hiddenValue));
|
||||
var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredBool.currentCryptoKey));
|
||||
var inited = sp.FindPropertyRelative(nameof(ObscuredBool.inited));
|
||||
var fakeValue = sp.FindPropertyRelative(nameof(ObscuredBool.fakeValue));
|
||||
var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredBool.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.intValue;
|
||||
var val = false;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.intValue = ObscuredBool.GenerateKey();
|
||||
inited.boolValue = true;
|
||||
hiddenValue.intValue = ObscuredBool.Encrypt(false, (byte)currentCryptoKey);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredBool.Decrypt(hiddenValue.intValue, (byte)currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, sp);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
val = EditorGUI.Toggle(position, label, val);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.intValue = ObscuredBool.Encrypt(val, (byte)currentCryptoKey);
|
||||
|
||||
fakeValue.boolValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2a0ae33a4804dd5468c37cee3d9e4a15
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,74 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using CodeStage.AntiCheat.ObscuredTypes;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(ObscuredDateTime))]
|
||||
internal class ObscuredDateTimeDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDateTime.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDateTime.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredDateTime.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredDateTime.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDateTime.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.longValue;
|
||||
var val = new DateTime(0);
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.longValue = ObscuredDateTime.GenerateKey();
|
||||
hiddenValue.longValue = ObscuredDateTime.Encrypt(new DateTime(0), currentCryptoKey);
|
||||
inited.boolValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredDateTime.Decrypt(hiddenValue.longValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
var labelRect = position;
|
||||
labelRect.width = position.width * 0.75f;
|
||||
label = EditorGUI.BeginProperty(labelRect, label, prop);
|
||||
EditorGUI.BeginChangeCheck();
|
||||
var dateString = val.ToString("o", DateTimeFormatInfo.InvariantInfo);
|
||||
var input = EditorGUI.DelayedTextField(labelRect, label, dateString);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
DateTime.TryParse(input, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out val);
|
||||
hiddenValue.longValue = ObscuredDateTime.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.longValue = val.ToBinary();
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
|
||||
var kindRect = position;
|
||||
kindRect.x = labelRect.xMax + 5;
|
||||
kindRect.width = position.width * 0.25f - 5;
|
||||
label = EditorGUI.BeginProperty(kindRect, GUIContent.none, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
var kind = val.Kind;
|
||||
var kindInput = (DateTimeKind)EditorGUI.EnumPopup(kindRect, label, kind);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
val = DateTime.SpecifyKind(val, kindInput);
|
||||
hiddenValue.longValue = ObscuredDateTime.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.longValue = val.ToBinary();
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4822eb673254d3fa09b8add898e8445
|
||||
timeCreated: 1684493697
|
||||
@@ -1,143 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using Common;
|
||||
using ObscuredTypes;
|
||||
|
||||
using System.Globalization;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredDecimal))]
|
||||
internal class ObscuredDecimalDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDecimal.hiddenValue));
|
||||
var hiddenValue1 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b1));
|
||||
var hiddenValue2 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b2));
|
||||
var hiddenValue3 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b3));
|
||||
var hiddenValue4 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b4));
|
||||
var hiddenValue5 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b5));
|
||||
var hiddenValue6 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b6));
|
||||
var hiddenValue7 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b7));
|
||||
var hiddenValue8 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b8));
|
||||
var hiddenValue9 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b9));
|
||||
var hiddenValue10 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b10));
|
||||
var hiddenValue11 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b11));
|
||||
var hiddenValue12 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b12));
|
||||
var hiddenValue13 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b13));
|
||||
var hiddenValue14 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b14));
|
||||
var hiddenValue15 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b15));
|
||||
var hiddenValue16 = hiddenValue.FindPropertyRelative(nameof(ACTkByte16.b16));
|
||||
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDecimal.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredDecimal.inited));
|
||||
//SerializedProperty fakeValue = prop.FindPropertyRelative("fakeValue");
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDecimal.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.longValue;
|
||||
var union = new DecimalBytesUnion();
|
||||
decimal val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.longValue = ObscuredDecimal.GenerateKey();
|
||||
inited.boolValue = true;
|
||||
|
||||
union.d = ObscuredDecimal.Encrypt(0, currentCryptoKey);
|
||||
|
||||
hiddenValue1.intValue = union.b16.b1;
|
||||
hiddenValue2.intValue = union.b16.b2;
|
||||
hiddenValue3.intValue = union.b16.b3;
|
||||
hiddenValue4.intValue = union.b16.b4;
|
||||
hiddenValue5.intValue = union.b16.b5;
|
||||
hiddenValue6.intValue = union.b16.b6;
|
||||
hiddenValue7.intValue = union.b16.b7;
|
||||
hiddenValue8.intValue = union.b16.b8;
|
||||
hiddenValue9.intValue = union.b16.b9;
|
||||
hiddenValue10.intValue = union.b16.b10;
|
||||
hiddenValue11.intValue = union.b16.b11;
|
||||
hiddenValue12.intValue = union.b16.b12;
|
||||
hiddenValue13.intValue = union.b16.b13;
|
||||
hiddenValue14.intValue = union.b16.b14;
|
||||
hiddenValue15.intValue = union.b16.b15;
|
||||
hiddenValue16.intValue = union.b16.b16;
|
||||
}
|
||||
else
|
||||
{
|
||||
union.b16.b1 = (byte)hiddenValue1.intValue;
|
||||
union.b16.b2 = (byte)hiddenValue2.intValue;
|
||||
union.b16.b3 = (byte)hiddenValue3.intValue;
|
||||
union.b16.b4 = (byte)hiddenValue4.intValue;
|
||||
union.b16.b5 = (byte)hiddenValue5.intValue;
|
||||
union.b16.b6 = (byte)hiddenValue6.intValue;
|
||||
union.b16.b7 = (byte)hiddenValue7.intValue;
|
||||
union.b16.b8 = (byte)hiddenValue8.intValue;
|
||||
union.b16.b9 = (byte)hiddenValue9.intValue;
|
||||
union.b16.b10 = (byte)hiddenValue10.intValue;
|
||||
union.b16.b11 = (byte)hiddenValue11.intValue;
|
||||
union.b16.b12 = (byte)hiddenValue12.intValue;
|
||||
union.b16.b13 = (byte)hiddenValue13.intValue;
|
||||
union.b16.b14 = (byte)hiddenValue14.intValue;
|
||||
union.b16.b15 = (byte)hiddenValue15.intValue;
|
||||
union.b16.b16 = (byte)hiddenValue16.intValue;
|
||||
|
||||
val = ObscuredDecimal.Decrypt(union.d, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
var input = EditorGUI.DelayedTextField(position, label, val.ToString(CultureInfo.InvariantCulture));
|
||||
#else
|
||||
var input = EditorGUI.TextField(position, label, val.ToString(CultureInfo.InvariantCulture));
|
||||
#endif
|
||||
decimal.TryParse(input, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out val);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
union.d = ObscuredDecimal.Encrypt(val, currentCryptoKey);
|
||||
|
||||
hiddenValue1.intValue = union.b16.b1;
|
||||
hiddenValue2.intValue = union.b16.b2;
|
||||
hiddenValue3.intValue = union.b16.b3;
|
||||
hiddenValue4.intValue = union.b16.b4;
|
||||
hiddenValue5.intValue = union.b16.b5;
|
||||
hiddenValue6.intValue = union.b16.b6;
|
||||
hiddenValue7.intValue = union.b16.b7;
|
||||
hiddenValue8.intValue = union.b16.b8;
|
||||
hiddenValue9.intValue = union.b16.b9;
|
||||
hiddenValue10.intValue = union.b16.b10;
|
||||
hiddenValue11.intValue = union.b16.b11;
|
||||
hiddenValue12.intValue = union.b16.b12;
|
||||
hiddenValue13.intValue = union.b16.b13;
|
||||
hiddenValue14.intValue = union.b16.b14;
|
||||
hiddenValue15.intValue = union.b16.b15;
|
||||
hiddenValue16.intValue = union.b16.b16;
|
||||
|
||||
//fakeValue.doubleValue = 0;
|
||||
fakeValueActive.boolValue = false;
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct DecimalBytesUnion
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public decimal d;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public ACTkByte16 b16;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b695953c62fb4e84aa3bcf20ed203871
|
||||
timeCreated: 1508363700
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,59 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredDouble))]
|
||||
internal class ObscuredDoubleDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredDouble.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredDouble.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredDouble.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredDouble.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredDouble.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.longValue;
|
||||
|
||||
double val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.longValue = ObscuredDouble.GenerateKey();
|
||||
|
||||
inited.boolValue = true;
|
||||
hiddenValue.longValue = ObscuredDouble.Encrypt(0, currentCryptoKey);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredDouble.Decrypt(hiddenValue.longValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
val = EditorGUI.DelayedDoubleField(position, label, val);
|
||||
#else
|
||||
val = EditorGUI.DoubleField(position, label, val);
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.longValue = ObscuredDouble.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.doubleValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5f1f384feecf6f94e9229f7d2b8ea644
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,59 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredFloat))]
|
||||
internal class ObscuredFloatDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredFloat.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredFloat.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredFloat.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredFloat.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredFloat.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.intValue;
|
||||
|
||||
float val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.intValue = ObscuredFloat.GenerateKey();
|
||||
|
||||
inited.boolValue = true;
|
||||
hiddenValue.intValue = ObscuredFloat.Encrypt(0, currentCryptoKey);
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredFloat.Decrypt(hiddenValue.intValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
val = EditorGUI.DelayedFloatField(position, label, val);
|
||||
#else
|
||||
val = EditorGUI.FloatField(position, label, val);
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.intValue = ObscuredFloat.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.floatValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 68a1078367903c94bb9914b21b55172d
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,57 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredInt))]
|
||||
internal class ObscuredIntDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredInt.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredInt.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredInt.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredInt.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredInt.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.intValue;
|
||||
var val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.intValue = ObscuredInt.GenerateKey();
|
||||
hiddenValue.intValue = ObscuredInt.Encrypt(0, currentCryptoKey);
|
||||
inited.boolValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredInt.Decrypt(hiddenValue.intValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
val = EditorGUI.DelayedIntField(position, label, val);
|
||||
#else
|
||||
val = EditorGUI.IntField(position, label, val);
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.intValue = ObscuredInt.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.intValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0d720256b4500364ba597cd9f71f28e1
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,53 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredLong))]
|
||||
internal class ObscuredLongDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredLong.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredLong.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredLong.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredLong.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredLong.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = cryptoKey.longValue;
|
||||
long val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.longValue = ObscuredLong.GenerateKey();
|
||||
hiddenValue.longValue = ObscuredLong.Encrypt(0, currentCryptoKey);
|
||||
inited.boolValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredLong.Decrypt(hiddenValue.longValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
val = EditorGUI.LongField(position, label, val);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.longValue = ObscuredLong.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.longValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 98c9f8eb20d73134e96287318b713c39
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,90 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredQuaternion))]
|
||||
internal class ObscuredQuaternionDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredQuaternion.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredQuaternion.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredQuaternion.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredQuaternion.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredQuaternion.fakeValueActive));
|
||||
|
||||
var hiddenValueX = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.x));
|
||||
var hiddenValueY = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.y));
|
||||
var hiddenValueZ = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.z));
|
||||
var hiddenValueW = hiddenValue.FindPropertyRelative(nameof(ObscuredQuaternion.RawEncryptedQuaternion.w));
|
||||
|
||||
var currentCryptoKey = cryptoKey.intValue;
|
||||
var val = Quaternion.identity;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = cryptoKey.intValue = ObscuredQuaternion.GenerateKey();
|
||||
var ev = ObscuredQuaternion.Encrypt(Quaternion.identity, currentCryptoKey);
|
||||
hiddenValueX.intValue = ev.x;
|
||||
hiddenValueY.intValue = ev.y;
|
||||
hiddenValueZ.intValue = ev.z;
|
||||
hiddenValueW.intValue = ev.w;
|
||||
inited.boolValue = true;
|
||||
|
||||
fakeValue.quaternionValue = Quaternion.identity;
|
||||
}
|
||||
else
|
||||
{
|
||||
var ev = new ObscuredQuaternion.RawEncryptedQuaternion
|
||||
{
|
||||
x = hiddenValueX.intValue,
|
||||
y = hiddenValueY.intValue,
|
||||
z = hiddenValueZ.intValue,
|
||||
w = hiddenValueW.intValue
|
||||
};
|
||||
val = ObscuredQuaternion.Decrypt(ev, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
EditorGUI.BeginChangeCheck();
|
||||
val = Vector4ToQuaternion(EditorGUI.Vector4Field(position, label, QuaternionToVector4(val)));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
var ev = ObscuredQuaternion.Encrypt(val, currentCryptoKey);
|
||||
hiddenValueX.intValue = ev.x;
|
||||
hiddenValueY.intValue = ev.y;
|
||||
hiddenValueZ.intValue = ev.z;
|
||||
hiddenValueW.intValue = ev.w;
|
||||
|
||||
fakeValue.quaternionValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2f;
|
||||
}
|
||||
|
||||
private Vector4 QuaternionToVector4(Quaternion value)
|
||||
{
|
||||
return new Vector4(value.x, value.y, value.z, value.w);
|
||||
}
|
||||
|
||||
private Quaternion Vector4ToQuaternion(Vector4 value)
|
||||
{
|
||||
return new Quaternion(value.x, value.y, value.z, value.w);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1cd362a81eab4155a2f1585c5d7ba876
|
||||
timeCreated: 1544725257
|
||||
@@ -1,57 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredShort))]
|
||||
internal class ObscuredShortDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
|
||||
{
|
||||
var hiddenValue = prop.FindPropertyRelative(nameof(ObscuredShort.hiddenValue));
|
||||
var cryptoKey = prop.FindPropertyRelative(nameof(ObscuredShort.currentCryptoKey));
|
||||
var inited = prop.FindPropertyRelative(nameof(ObscuredShort.inited));
|
||||
var fakeValue = prop.FindPropertyRelative(nameof(ObscuredShort.fakeValue));
|
||||
var fakeValueActive = prop.FindPropertyRelative(nameof(ObscuredShort.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = (short)cryptoKey.intValue;
|
||||
short val = 0;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey == 0)
|
||||
currentCryptoKey = (short)(cryptoKey.intValue = ObscuredShort.GenerateKey());
|
||||
hiddenValue.intValue = ObscuredShort.Encrypt(0, currentCryptoKey);
|
||||
inited.boolValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
val = ObscuredShort.Decrypt((short)hiddenValue.intValue, currentCryptoKey);
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, prop);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
val = (short)EditorGUI.DelayedIntField(position, label, val);
|
||||
#else
|
||||
val = (short)EditorGUI.IntField(position, label, val);
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
hiddenValue.intValue = ObscuredShort.Encrypt(val, currentCryptoKey);
|
||||
fakeValue.intValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eaf7a22e1b4319f40b23596cea6556a4
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
@@ -1,137 +0,0 @@
|
||||
#region copyright
|
||||
// ------------------------------------------------------
|
||||
// Copyright (C) Dmitriy Yukhanov [https://codestage.net]
|
||||
// ------------------------------------------------------
|
||||
#endregion
|
||||
|
||||
namespace CodeStage.AntiCheat.EditorCode.PropertyDrawers
|
||||
{
|
||||
using ObscuredTypes;
|
||||
|
||||
using System;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[CustomPropertyDrawer(typeof(ObscuredString))]
|
||||
internal class ObscuredStringDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty sp, GUIContent label)
|
||||
{
|
||||
MigrateUtils.MigrateObscuredStringIfNecessary(sp);
|
||||
|
||||
var hiddenChars = sp.FindPropertyRelative(nameof(ObscuredString.hiddenChars));
|
||||
var cryptoKey = sp.FindPropertyRelative(nameof(ObscuredString.cryptoKey));
|
||||
var inited = sp.FindPropertyRelative(nameof(ObscuredString.inited));
|
||||
var fakeValue = sp.FindPropertyRelative(nameof(ObscuredString.fakeValue));
|
||||
var fakeValueActive = sp.FindPropertyRelative(nameof(ObscuredString.fakeValueActive));
|
||||
|
||||
var currentCryptoKey = GetChars(cryptoKey);
|
||||
|
||||
var val = string.Empty;
|
||||
|
||||
if (!inited.boolValue)
|
||||
{
|
||||
if (currentCryptoKey.Length == 0)
|
||||
{
|
||||
currentCryptoKey = ObscuredString.GenerateKey();
|
||||
SetChars(cryptoKey, currentCryptoKey);
|
||||
}
|
||||
inited.boolValue = true;
|
||||
EncryptAndSetChars(val.ToCharArray(), hiddenChars, currentCryptoKey);
|
||||
fakeValue.stringValue = val;
|
||||
}
|
||||
else
|
||||
{
|
||||
var size = hiddenChars.FindPropertyRelative("Array.size");
|
||||
var showMixed = size.hasMultipleDifferentValues;
|
||||
|
||||
if (!showMixed)
|
||||
{
|
||||
for (var i = 0; i < hiddenChars.arraySize; i++)
|
||||
{
|
||||
showMixed |= hiddenChars.GetArrayElementAtIndex(i).hasMultipleDifferentValues;
|
||||
if (showMixed) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!showMixed)
|
||||
val = Decrypt(hiddenChars, currentCryptoKey);
|
||||
else
|
||||
EditorGUI.showMixedValue = true;
|
||||
}
|
||||
|
||||
if (label.text.IndexOf('[') != -1)
|
||||
{
|
||||
var dataIndex = sp.propertyPath.IndexOf("Array.data[", StringComparison.Ordinal);
|
||||
|
||||
if (dataIndex >= 0)
|
||||
{
|
||||
dataIndex += 11;
|
||||
var index = "Element " + sp.propertyPath.Substring(dataIndex, sp.propertyPath.IndexOf("]", dataIndex, StringComparison.Ordinal) - dataIndex);
|
||||
label.text = index;
|
||||
}
|
||||
}
|
||||
|
||||
label = EditorGUI.BeginProperty(position, label, sp);
|
||||
|
||||
EditorGUI.BeginChangeCheck();
|
||||
#if UNITY_2022_1_OR_NEWER
|
||||
val = EditorGUI.DelayedTextField(position, label, val);
|
||||
#else
|
||||
val = EditorGUI.TextField(position, label, val);
|
||||
#endif
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
EncryptAndSetChars(val.ToCharArray(), hiddenChars, currentCryptoKey);
|
||||
fakeValue.stringValue = val;
|
||||
fakeValueActive.boolValue = true;
|
||||
}
|
||||
|
||||
EditorGUI.showMixedValue = false;
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
private static void EncryptAndSetChars(char[] val, SerializedProperty prop, char[] key)
|
||||
{
|
||||
var encrypted = ObscuredString.InternalEncryptDecrypt(val, key);
|
||||
SetChars(prop, encrypted);
|
||||
}
|
||||
|
||||
private static string Decrypt(SerializedProperty hiddenChars, char[] currentCryptoKey)
|
||||
{
|
||||
var chars = new char[hiddenChars.arraySize];
|
||||
for (var i = 0; i < hiddenChars.arraySize; i++)
|
||||
chars[i] = (char)hiddenChars.GetArrayElementAtIndex(i).intValue;
|
||||
|
||||
return ObscuredString.Decrypt(chars, currentCryptoKey);
|
||||
}
|
||||
|
||||
public static byte[] GetBytesObsolete(SerializedProperty property)
|
||||
{
|
||||
var length = property.arraySize;
|
||||
var result = new byte[length];
|
||||
for (var i = 0; i < length; i++)
|
||||
result[i] = (byte)property.GetArrayElementAtIndex(i).intValue;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void SetChars(SerializedProperty property, char[] array)
|
||||
{
|
||||
property.ClearArray();
|
||||
property.arraySize = array.Length;
|
||||
for (var i = 0; i < array.Length; i++)
|
||||
property.GetArrayElementAtIndex(i).intValue = array[i];
|
||||
}
|
||||
|
||||
private static char[] GetChars(SerializedProperty property)
|
||||
{
|
||||
var length = property.arraySize;
|
||||
var result = new char[length];
|
||||
for (var i = 0; i < length; i++)
|
||||
result[i] = (char)property.GetArrayElementAtIndex(i).intValue;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user