提交修改

This commit is contained in:
Bob.Song
2026-03-06 09:44:00 +08:00
parent e125bb869e
commit db7bc90fe2
3631 changed files with 9050 additions and 395938 deletions

72
.codelyignore Normal file
View 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
View File

@@ -0,0 +1,5 @@
{
"recommendations": [
"visualstudiotoolsforunity.vstuc"
]
}

10
.vscode/launch.json vendored Normal file
View 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
View 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
View File

@@ -0,0 +1,6 @@
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.ManagedGame"
]
}

View File

@@ -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: []

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 570f929f99741ed49aad0cceac6c7105
guid: bc2dab5b568ebf8429604de96d35e9a8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View File

@@ -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: []

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 79122942d190042669bd4a184e83db8b
guid: b5d230639ac2f4a4794bae0df8b72241
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View File

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

View 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

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 15c6acaf90c83834db6cef8e66f3abc0
guid: c0249bc9528ffb242a4f01ce0d2383f2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View 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

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d87cbfe2ec8a9b04aa5c532acc09f9e7
guid: 74a4cf74bd523614db86691e288028a3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

View 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

View File

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

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 52c313066dda63c459f7c826dbb8eed1
folderAsset: yes
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,2 +0,0 @@
Please, check out latest Anti-Cheat Toolkit Code Library API Docs here:
https://codestage.net/uas_files/actk/api/

View File

@@ -1,6 +0,0 @@
fileFormatVersion: 2
guid: f4c375fd5bde53c42b0ebc6ee503f7a1
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +0,0 @@
fileFormatVersion: 2
guid: a707e4914fc9f014790c02a3cd0b455d
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ac5220baa6a51bb47a5c640ddf6c0ce8
folderAsset: yes
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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
}

View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 8ef82b58ed1acc8419a02b8a05286620
timeCreated: 1554196096
licenseType: Store
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 1ff6bc3cba85fba4e922af0d4a624023
folderAsset: yes
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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();
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: a9ee7d4a58674ac69c27bc7c29417309
timeCreated: 1552925230

View File

@@ -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;
}
}
}

View File

@@ -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:

View File

@@ -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>();
}
}
}

View File

@@ -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")]

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: a1cc293465f841498ad940f7813ccedd
timeCreated: 1588809689

View File

@@ -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;
}
}
}

View File

@@ -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); } }
}
}

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}
}

View File

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

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f0c63cf6cabe3a547a0b46de95bff055
folderAsset: yes
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 6025f911d895a7e43a5d5c6229254129
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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() {}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 6b59c308aff5e054991de809a3b5985b
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 8df36b70906d65d43bcb3ddce3fe36ba
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 199f39969debe8f46afc5f32b333be3b
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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
}
}

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 2fb4c7beaf58d554ab0f85d86b53726e
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@@ -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;
}
}
}

View File

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

View File

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

View File

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

View File

@@ -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;
}
}
}
}

View File

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

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 881ba0c65bee45139ca757895221c6ab
timeCreated: 1680806941

View File

@@ -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);
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 9717d52c2bf842caaa8575f8f2947afa
timeCreated: 1680806503

View File

@@ -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);
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 02b38fd3639d4fd7a1a6732fadbeebc8
timeCreated: 1680806778

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 59e19c7338f04be697d7788c76f0cde6
timeCreated: 1552927805

View File

@@ -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 + ")";
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 99e59ee643091664d874b8418be8b78e
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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";
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: fdb8abbb3fde4da3aa210fccf74e9524
timeCreated: 1552925592

View File

@@ -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;
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 682e4f8bd25b4b3f9ab90c2c080decf5
timeCreated: 1552927820

View File

@@ -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();
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 4ed4f862c6dc42a49c1f47d1e9ee2fb5
timeCreated: 1552945114

View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: bb730acf6c1569848b1187cd6c0e312c
folderAsset: yes
timeCreated: 1552913902
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: e79f56c36f349f64995908c2bc571662
timeCreated: 1552680217
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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
}
}
}

View File

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

View File

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

View File

@@ -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;
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 7e1925e5a5f04349bee0d734c5705598
timeCreated: 1621638102

View File

@@ -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;
}
}
}

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: c1c7ff960ccd8a243ad385a3fe965e9e
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: dfff86e18b5565b499779c37590c4d83
folderAsset: yes
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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];
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: c48a363379404a3f8ffa0970bd1f7653
timeCreated: 1653693062

View File

@@ -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();
}
}
}

View File

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

View File

@@ -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();
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: d4822eb673254d3fa09b8add898e8445
timeCreated: 1684493697

View File

@@ -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;
}
}
}

View File

@@ -1,12 +0,0 @@
fileFormatVersion: 2
guid: b695953c62fb4e84aa3bcf20ed203871
timeCreated: 1508363700
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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();
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 5f1f384feecf6f94e9229f7d2b8ea644
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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();
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 68a1078367903c94bb9914b21b55172d
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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();
}
}
}

View File

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

View File

@@ -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();
}
}
}

View File

@@ -1,10 +0,0 @@
fileFormatVersion: 2
guid: 98c9f8eb20d73134e96287318b713c39
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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);
}
}
}

View File

@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 1cd362a81eab4155a2f1585c5d7ba876
timeCreated: 1544725257

View File

@@ -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();
}
}
}

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: eaf7a22e1b4319f40b23596cea6556a4
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@@ -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