From 509b0d050face71278a9fde0cc76e17ef1d46fd7 Mon Sep 17 00:00:00 2001 From: Kai Arnold Date: Thu, 21 Jul 2016 21:47:08 -0700 Subject: [PATCH 1/2] update to Unity 5.3.4f1 --- .gitignore | 43 ++++++ .../ProjectSettings/ClusterInputManager.asset | 6 + .../ProjectSettings/ProjectSettings.asset | 144 ++++++++++++------ .../ProjectSettings/ProjectVersion.txt | 2 +- .../ProjectSettings/UnityAdsSettings.asset | 11 ++ .../UnityConnectSettings.asset | 14 ++ 6 files changed, 171 insertions(+), 49 deletions(-) create mode 100644 .gitignore create mode 100644 Unity Project/ProjectSettings/ClusterInputManager.asset create mode 100644 Unity Project/ProjectSettings/UnityAdsSettings.asset create mode 100644 Unity Project/ProjectSettings/UnityConnectSettings.asset diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad758dc --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +################## +# Unity ignores: +# +# !!! WARNING !!! +# +# … you MUST convert Unity to using Metafiles *before* you start using this +# .gitignore file, or you WILL lose data! +# + +# OS X only: +.DS_Store +*.swp +*.Trashes + +# All platforms: +Library +Temp +obj +*.csproj +*.pidb +*.unityproj +*.sln +*.userprefs +*.suo +*.pdb +playing1/obj +playing1server/bin + +Assembly-CSharp* +deleteme* + +# cruft and test code: +2DGameplayTutorialProject +CacheServer +NGUITest2 +Thumbs.db +hwd082012 +square.x3d +white disk.png +examples +~*.xls* +RECOVER_master_cs5* +PackageExperimenter diff --git a/Unity Project/ProjectSettings/ClusterInputManager.asset b/Unity Project/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/Unity Project/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/Unity Project/ProjectSettings/ProjectSettings.asset b/Unity Project/ProjectSettings/ProjectSettings.asset index b0ebb0a..af192be 100644 --- a/Unity Project/ProjectSettings/ProjectSettings.asset +++ b/Unity Project/ProjectSettings/ProjectSettings.asset @@ -3,17 +3,18 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 7 + serializedVersion: 8 AndroidProfiler: 0 defaultScreenOrientation: 4 targetDevice: 2 - targetResolution: 0 + useOnDemandResources: 0 accelerometerFrequency: 60 companyName: DefaultCompany productName: New Unity Project defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_ShowUnitySplashScreen: 1 + m_VirtualRealitySplashScreen: {fileID: 0} defaultScreenWidth: 1024 defaultScreenHeight: 768 defaultScreenWidthWeb: 960 @@ -28,6 +29,7 @@ PlayerSettings: androidShowActivityIndicatorOnLoading: -1 iosAppInBackgroundBehavior: 0 displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 allowedAutorotateToLandscapeRight: 1 @@ -54,17 +56,33 @@ PlayerSettings: xboxEnableKinectAutoTracking: 0 xboxEnableFitness: 0 visibleInBackground: 0 + allowFullscreenSwitch: 1 macFullscreenMode: 2 d3d9FullscreenMode: 1 d3d11FullscreenMode: 1 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + n3dsDisableStereoscopicView: 0 + n3dsEnableSharedListOpt: 1 + n3dsEnableVSync: 0 + uiUse16BitDepthBuffer: 0 + ignoreAlphaClear: 0 xboxOneResolution: 0 ps3SplashScreen: {fileID: 0} videoMemoryForVertexBuffers: 0 psp2PowerMode: 0 psp2AcquireBGM: 1 + wiiUTVResolution: 0 + wiiUGamePadMSAA: 1 + wiiUSupportsNunchuk: 0 + wiiUSupportsClassicController: 0 + wiiUSupportsBalanceBoard: 0 + wiiUSupportsMotionPlus: 0 + wiiUSupportsProController: 0 + wiiUAllowScreenCapture: 1 + wiiUControllerCount: 0 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -84,18 +102,24 @@ PlayerSettings: AndroidPreferredInstallLocation: 1 aotOptions: apiCompatibilityLevel: 2 + stripEngineCode: 1 iPhoneStrippingLevel: 0 iPhoneScriptCallOptimization: 0 + iPhoneBuildNumber: 0 ForceInternetPermission: 0 ForceSDCardPermission: 0 CreateWallpaper: 0 APKExpansionFiles: 0 preloadShaders: 0 StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: + serializedVersion: 2 + m_Bits: 238 iPhoneSdkVersion: 988 iPhoneTargetOSVersion: 22 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 uIStatusBarHidden: 1 uIExitOnSuspend: 0 uIStatusBarStyle: 0 @@ -109,6 +133,10 @@ PlayerSettings: iPadHighResPortraitSplashScreen: {fileID: 0} iPadLandscapeSplashScreen: {fileID: 0} iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSLargeIconLayers: [] + tvOSTopShelfImageLayers: [] iOSLaunchScreenType: 0 iOSLaunchScreenPortrait: {fileID: 0} iOSLaunchScreenLandscape: {fileID: 0} @@ -118,6 +146,15 @@ PlayerSettings: iOSLaunchScreenFillPct: 100 iOSLaunchScreenSize: 100 iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSDeviceRequirements: [] AndroidTargetDevice: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} @@ -135,12 +172,31 @@ PlayerSettings: m_BuildTargetIcons: - m_BuildTarget: m_Icons: - - m_Icon: {fileID: 0} - m_Size: 128 + - serializedVersion: 2 + m_Icon: {fileID: 0} + m_Width: 128 + m_Height: 128 m_BuildTargetBatching: [] m_BuildTargetGraphicsAPIs: [] webPlayerTemplate: APPLICATION:Default m_TemplateCustomTags: {} + wiiUTitleID: 0005000011000000 + wiiUGroupID: 00010000 + wiiUCommonSaveSize: 4096 + wiiUAccountSaveSize: 2048 + wiiUOlvAccessKey: 0 + wiiUTinCode: 0 + wiiUJoinGameId: 0 + wiiUJoinGameModeMask: 0000000000000000 + wiiUCommonBossSize: 0 + wiiUAccountBossSize: 0 + wiiUAddOnUniqueIDs: [] + wiiUMainThreadStackSize: 3072 + wiiULoaderThreadStackSize: 1024 + wiiUSystemHeapSize: 128 + wiiUTVStartupScreen: {fileID: 0} + wiiUGamePadStartupScreen: {fileID: 0} + wiiUProfilerLibPath: actionOnDotNetUnhandledException: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 @@ -191,15 +247,20 @@ PlayerSettings: ps4BackgroundImagePath: ps4StartupImagePath: ps4SaveDataImagePath: + ps4SdkOverride: ps4BGMPath: ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: ps4EnterButtonAssignment: 1 ps4ApplicationParam1: 0 ps4ApplicationParam2: 0 ps4ApplicationParam3: 0 ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 ps4GarlicHeapSize: 2048 ps4Passcode: 5PN2qmWqBlQ9wQj99nsQzldVI5ZuGXbE ps4pnSessions: 1 @@ -207,6 +268,19 @@ PlayerSettings: ps4pnFriends: 1 ps4pnGameCustomData: 1 playerPrefsSupport: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4IncludedModules: [] monoEnv: psp2Splashimage: {fileID: 0} psp2NPTrophyPackPath: @@ -258,10 +332,6 @@ PlayerSettings: spritePackerPolicy: scriptingDefineSymbols: {} metroPackageName: New Unity Project - metroPackageLogo: - metroPackageLogo140: - metroPackageLogo180: - metroPackageLogo240: metroPackageVersion: metroCertificatePath: metroCertificatePassword: @@ -269,44 +339,7 @@ PlayerSettings: metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 metroApplicationDescription: New Unity Project - metroStoreTileLogo80: - metroStoreTileLogo: - metroStoreTileLogo140: - metroStoreTileLogo180: - metroStoreTileWideLogo80: - metroStoreTileWideLogo: - metroStoreTileWideLogo140: - metroStoreTileWideLogo180: - metroStoreTileSmallLogo80: - metroStoreTileSmallLogo: - metroStoreTileSmallLogo140: - metroStoreTileSmallLogo180: - metroStoreSmallTile80: - metroStoreSmallTile: - metroStoreSmallTile140: - metroStoreSmallTile180: - metroStoreLargeTile80: - metroStoreLargeTile: - metroStoreLargeTile140: - metroStoreLargeTile180: - metroStoreSplashScreenImage: - metroStoreSplashScreenImage140: - metroStoreSplashScreenImage180: - metroPhoneAppIcon: - metroPhoneAppIcon140: - metroPhoneAppIcon240: - metroPhoneSmallTile: - metroPhoneSmallTile140: - metroPhoneSmallTile240: - metroPhoneMediumTile: - metroPhoneMediumTile140: - metroPhoneMediumTile240: - metroPhoneWideTile: - metroPhoneWideTile140: - metroPhoneWideTile240: - metroPhoneSplashScreenImage: - metroPhoneSplashScreenImage140: - metroPhoneSplashScreenImage240: + wsaImages: {} metroTileShortName: metroCommandLineArgsFile: metroTileShowName: 0 @@ -346,6 +379,17 @@ PlayerSettings: tizenSigningProfileName: tizenGPSPermissions: 0 tizenMicrophonePermissions: 0 + n3dsUseExtSaveData: 0 + n3dsCompressStaticMem: 1 + n3dsExtSaveDataNumber: 0x12345 + n3dsStackSize: 131072 + n3dsTargetPlatform: 2 + n3dsRegion: 7 + n3dsMediaSize: 0 + n3dsLogoStyle: 3 + n3dsTitle: GameName + n3dsProductCode: + n3dsApplicationId: 0xFF3FF stvDeviceAddress: stvProductDescription: stvProductAuthor: @@ -371,12 +415,16 @@ PlayerSettings: XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 intPropertyNames: + - Android::ScriptingBackend + - Standalone::ScriptingBackend - WebGL::ScriptingBackend - WebGL::audioCompressionFormat - WebGL::exceptionSupport - WebGL::memorySize - iOS::Architecture - iOS::ScriptingBackend + Android::ScriptingBackend: 0 + Standalone::ScriptingBackend: 0 WebGL::ScriptingBackend: 1 WebGL::audioCompressionFormat: 4 WebGL::exceptionSupport: 1 @@ -395,11 +443,11 @@ PlayerSettings: stringPropertyNames: - WebGL::emscriptenArgs - WebGL::template + - additionalIl2CppArgs::additionalIl2CppArgs WebGL::emscriptenArgs: WebGL::template: APPLICATION:Default - firstStreamedSceneWithResources: 0 + additionalIl2CppArgs::additionalIl2CppArgs: cloudProjectId: - projectId: projectName: organizationId: cloudEnabled: 0 diff --git a/Unity Project/ProjectSettings/ProjectVersion.txt b/Unity Project/ProjectSettings/ProjectVersion.txt index 78b2941..c4684cd 100644 --- a/Unity Project/ProjectSettings/ProjectVersion.txt +++ b/Unity Project/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 5.1.1f1 +m_EditorVersion: 5.3.4f1 m_StandardAssetsVersion: 0 diff --git a/Unity Project/ProjectSettings/UnityAdsSettings.asset b/Unity Project/ProjectSettings/UnityAdsSettings.asset new file mode 100644 index 0000000..224050c --- /dev/null +++ b/Unity Project/ProjectSettings/UnityAdsSettings.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!292 &1 +UnityAdsSettings: + m_ObjectHideFlags: 0 + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_EnabledPlatforms: 4294967295 + m_IosGameId: + m_AndroidGameId: diff --git a/Unity Project/ProjectSettings/UnityConnectSettings.asset b/Unity Project/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..9b7a578 --- /dev/null +++ b/Unity Project/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_TestEventUrl: + m_TestConfigUrl: From a6d9ac2ac73a9f01e51e7d2f7d629e5e686483b5 Mon Sep 17 00:00:00 2001 From: Kai Arnold Date: Thu, 21 Jul 2016 21:50:16 -0700 Subject: [PATCH 2/2] Allow maps to be created at design-time instead of run-time. This makes it easier to work with, and facilitates the creation of prefabs and (presumably) the use of NavMesh. Specifically: - refactor MeshGenerator to be a simple non-MonoBehavior class. This prevents it from storing any state on the GameObject, removing any run-time overhead and baggage. - similarly, pull out any residual state generated from the map creation process in MapGenerator. - add Generate, and Clear buttons that work at design-time. - add a Save button, which writes out the meshes to the project hierarchy, allowing prefabs to work. --- Unity Project/Assets/Editor.meta | 9 + .../Assets/Editor/MapGeneratorEditor.cs | 31 +++ .../Assets/Editor/MapGeneratorEditor.cs.meta | 12 ++ Unity Project/Assets/Scenes/Scene 3D.unity | 185 +++--------------- Unity Project/Assets/Scripts/MapGenerator.cs | 151 +++++++++----- Unity Project/Assets/Scripts/MeshGenerator.cs | 39 +--- 6 files changed, 192 insertions(+), 235 deletions(-) create mode 100644 Unity Project/Assets/Editor.meta create mode 100644 Unity Project/Assets/Editor/MapGeneratorEditor.cs create mode 100644 Unity Project/Assets/Editor/MapGeneratorEditor.cs.meta diff --git a/Unity Project/Assets/Editor.meta b/Unity Project/Assets/Editor.meta new file mode 100644 index 0000000..bc3cb59 --- /dev/null +++ b/Unity Project/Assets/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0394dad3b5e3ebb498230995b512c078 +folderAsset: yes +timeCreated: 1469162920 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Editor/MapGeneratorEditor.cs b/Unity Project/Assets/Editor/MapGeneratorEditor.cs new file mode 100644 index 0000000..fd07f26 --- /dev/null +++ b/Unity Project/Assets/Editor/MapGeneratorEditor.cs @@ -0,0 +1,31 @@ +using UnityEditor; +using UnityEngine; +using System.Collections; + +[CustomEditor(typeof(MapGenerator))] +public sealed class MapGeneratorEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + var mapGenerator = (MapGenerator)target; + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Generate")) + { + mapGenerator.GenerateMap(); + } + GUI.enabled = mapGenerator.IsGenerated; + if (GUILayout.Button("Clear")) + { + mapGenerator.ClearMap(); + } + if (GUILayout.Button("Save Meshes")) + { + mapGenerator.SaveMeshes(); + } + GUI.enabled = true; + GUILayout.EndHorizontal(); + } +} diff --git a/Unity Project/Assets/Editor/MapGeneratorEditor.cs.meta b/Unity Project/Assets/Editor/MapGeneratorEditor.cs.meta new file mode 100644 index 0000000..4406fd7 --- /dev/null +++ b/Unity Project/Assets/Editor/MapGeneratorEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6e0755c723192204c9a00e9df7ac88f3 +timeCreated: 1469162920 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity Project/Assets/Scenes/Scene 3D.unity b/Unity Project/Assets/Scenes/Scene 3D.unity index ff196ec..908fa0b 100644 --- a/Unity Project/Assets/Scenes/Scene 3D.unity +++ b/Unity Project/Assets/Scenes/Scene 3D.unity @@ -8,25 +8,25 @@ SceneSettings: m_PVSPortalsArray: [] m_OcclusionBakeSettings: smallestOccluder: 5 - smallestHole: .25 + smallestHole: 0.25 backfaceThreshold: 100 --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 serializedVersion: 6 m_Fog: 0 - m_FogColor: {r: .5, g: .5, b: .5, a: 1} + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 - m_FogDensity: .00999999978 + m_FogDensity: 0.01 m_LinearFogStart: 0 m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: .211999997, g: .226999998, b: .259000003, a: 1} - m_AmbientEquatorColor: {r: .114, g: .125, b: .133000001, a: 1} - m_AmbientGroundColor: {r: .0469999984, g: .0430000015, b: .0350000001, a: 1} + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} m_AmbientIntensity: 1 m_AmbientMode: 0 m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: .5 + m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 m_HaloTexture: {fileID: 0} @@ -37,13 +37,10 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} ---- !u!127 &3 -LevelGameManager: - m_ObjectHideFlags: 0 --- !u!157 &4 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 5 + serializedVersion: 6 m_GIWorkflowMode: 0 m_LightmapsMode: 1 m_GISettings: @@ -68,7 +65,8 @@ LightmapSettings: m_TextureCompression: 1 m_FinalGather: 0 m_FinalGatherRayCount: 1024 - m_LightmapSnapshot: {fileID: 0} + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} m_RuntimeCPUUsage: 25 --- !u!196 &5 NavMeshSettings: @@ -76,15 +74,15 @@ NavMeshSettings: m_ObjectHideFlags: 0 m_BuildSettings: serializedVersion: 2 - agentRadius: .5 + agentRadius: 0.5 agentHeight: 2 agentSlope: 45 - agentClimb: .400000006 + agentClimb: 0.4 ledgeDropHeight: 0 maxJumpAcrossDistance: 0 accuratePlacement: 0 minRegionArea: 2 - cellSize: .166666672 + cellSize: 0.16666667 manualCellSize: 0 m_NavMeshData: {fileID: 0} --- !u!1 &6949650 @@ -136,14 +134,14 @@ Camera: m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 2 - m_BackGroundColor: {r: .25, g: .25, b: .25, a: .0196078438} + m_BackGroundColor: {r: 0.25, g: 0.25, b: 0.25, a: 0.019607844} m_NormalizedViewPortRect: serializedVersion: 2 x: 0 y: 0 width: 1 height: 1 - near clip plane: .300000012 + near clip plane: 0.3 far clip plane: 1000 field of view: 60 orthographic: 0 @@ -155,10 +153,11 @@ Camera: m_RenderingPath: -1 m_TargetTexture: {fileID: 0} m_TargetDisplay: 0 + m_TargetEye: 3 m_HDR: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 - m_StereoSeparation: .0219999999 + m_StereoSeparation: 0.022 m_StereoMirrorMode: 0 --- !u!4 &6949655 Transform: @@ -166,8 +165,8 @@ Transform: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 6949650} - m_LocalRotation: {x: .707106829, y: 0, z: 0, w: .707106709} - m_LocalPosition: {x: 0, y: 62.9000015, z: 0} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071067} + m_LocalPosition: {x: 0, y: 62.9, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} @@ -181,7 +180,6 @@ GameObject: m_Component: - 4: {fileID: 509230443} - 114: {fileID: 509230442} - - 114: {fileID: 509230444} m_Layer: 0 m_Name: Map Generator m_TagString: Untagged @@ -205,6 +203,9 @@ MonoBehaviour: seed: 0 useRandomSeed: 1 randomFillPercent: 48 + generate2DCollider: 0 + wallMaterial: {fileID: 2100000, guid: 27714a88ffab24286add2e6b615090bc, type: 2} + caveMaterial: {fileID: 2100000, guid: 05fed37fcab6b40febc2e9f8b3aeb6c2, type: 2} --- !u!4 &509230443 Transform: m_ObjectHideFlags: 0 @@ -216,24 +217,8 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 631091596} - - {fileID: 777526923} - - {fileID: 663968339} m_Father: {fileID: 0} m_RootOrder: 1 ---- !u!114 &509230444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 509230441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6fd1c2e4166d04a9a83ca4082dd96614, type: 3} - m_Name: - m_EditorClassIdentifier: - walls: {fileID: 777526922} - cave: {fileID: 663968341} - is2D: 0 --- !u!1 &631091595 GameObject: m_ObjectHideFlags: 0 @@ -260,7 +245,7 @@ Transform: m_GameObject: {fileID: 631091595} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -4, z: 0} - m_LocalScale: {x: 15.0249996, y: 1, z: 7.875} + m_LocalScale: {x: 15.025, y: 1, z: 7.875} m_Children: [] m_Father: {fileID: 509230443} m_RootOrder: 0 @@ -282,8 +267,10 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_ScaleInLightmap: 1 m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 - m_AutoUVMaxDistance: .5 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 @@ -307,123 +294,3 @@ MeshFilter: m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 631091595} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &663968338 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 663968339} - - 33: {fileID: 663968341} - - 23: {fileID: 663968340} - m_Layer: 0 - m_Name: Cave Mesh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &663968339 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 663968338} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 509230443} - m_RootOrder: 2 ---- !u!23 &663968340 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 663968338} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_Materials: - - {fileID: 2100000, guid: 05fed37fcab6b40febc2e9f8b3aeb6c2, type: 2} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 1 - m_ReflectionProbeUsage: 1 - m_ProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_ImportantGI: 0 - m_AutoUVMaxDistance: .5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!33 &663968341 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 663968338} - m_Mesh: {fileID: 0} ---- !u!1 &777526921 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 777526923} - - 33: {fileID: 777526922} - - 23: {fileID: 777526924} - m_Layer: 0 - m_Name: Walls - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!33 &777526922 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 777526921} - m_Mesh: {fileID: 0} ---- !u!4 &777526923 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 777526921} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 509230443} - m_RootOrder: 1 ---- !u!23 &777526924 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 777526921} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_Materials: - - {fileID: 2100000, guid: 27714a88ffab24286add2e6b615090bc, type: 2} - m_SubsetIndices: - m_StaticBatchRoot: {fileID: 0} - m_UseLightProbes: 1 - m_ReflectionProbeUsage: 1 - m_ProbeAnchor: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_ImportantGI: 0 - m_AutoUVMaxDistance: .5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 diff --git a/Unity Project/Assets/Scripts/MapGenerator.cs b/Unity Project/Assets/Scripts/MapGenerator.cs index 050a769..8156855 100644 --- a/Unity Project/Assets/Scripts/MapGenerator.cs +++ b/Unity Project/Assets/Scripts/MapGenerator.cs @@ -1,4 +1,6 @@ using UnityEngine; +using UnityEditor; + using System.Collections; using System.Collections.Generic; using System; @@ -8,33 +10,43 @@ public class MapGenerator : MonoBehaviour { public int width; public int height; - public string seed; + public int seed; public bool useRandomSeed; [Range(0,100)] public int randomFillPercent; - int[,] map; - - void Start() { - GenerateMap(); - } - - void Update() { - if (Input.GetMouseButtonDown(0)) { - GenerateMap(); - } - } - - void GenerateMap() { - map = new int[width,height]; - RandomFillMap(); + public bool generate2DCollider = false; + public Material wallMaterial; + public Material caveMaterial; + + static GameObject CreateMeshParent(Transform parent, string name) { + var newObject = new GameObject(); + newObject.name = name; + + newObject.transform.SetParent(parent); + newObject.AddComponent(); + newObject.AddComponent(); + newObject.transform.localPosition = Vector3.zero; + newObject.transform.localScale = Vector3.one; + + return newObject; + } + static readonly string CAVE_NAME = "cave"; + static readonly string WALL_NAME = "wall"; + public void GenerateMap() { + + if (IsGenerated) { + ClearMap(); + } + var map = new int[width,height]; + RandomFillMap(map); for (int i = 0; i < 5; i ++) { - SmoothMap(); + SmoothMap(map); } - ProcessMap (); + ProcessMap(map); int borderSize = 1; int[,] borderedMap = new int[width + borderSize * 2,height + borderSize * 2]; @@ -50,12 +62,60 @@ void GenerateMap() { } } - MeshGenerator meshGen = GetComponent(); - meshGen.GenerateMesh(borderedMap, 1); - } - - void ProcessMap() { - List> wallRegions = GetRegions (1); + MeshGenerator meshGen = new MeshGenerator(); + var cave = CreateMeshParent(gameObject.transform, CAVE_NAME); + cave.GetComponent().material = caveMaterial; + cave.GetComponent().mesh = meshGen.GenerateCaveMesh(borderedMap, 1, generate2DCollider); + + if (generate2DCollider) { + meshGen.Generate2DColliders(cave.gameObject); + } + else { + var walls = CreateMeshParent(gameObject.transform, WALL_NAME); + walls.GetComponent().material = wallMaterial; + + var wallMesh = meshGen.CreateWallMesh(); + walls.GetComponent().mesh = wallMesh; + + MeshCollider wallCollider = walls.AddComponent(); + wallCollider.sharedMesh = wallMesh; + } + } + static void SafeDestroy(GameObject obj) + { +#if UNITY_EDITOR + DestroyImmediate(obj); +#else + Destroy(obj); +#endif + } + public bool IsGenerated { + get { return transform.FindChild(CAVE_NAME) != null; } + } + public void ClearMap() { + var cave = transform.FindChild(CAVE_NAME); + if (cave != null) { + SafeDestroy(cave.gameObject); + } + var walls = transform.FindChild(WALL_NAME); + if (walls != null) { + SafeDestroy(walls.gameObject); + } + } + public void SaveMeshes() { + if (IsGenerated) { + SaveMesh(transform.FindChild(CAVE_NAME).GetComponent().sharedMesh, "cave"); + SaveMesh(transform.FindChild(WALL_NAME).GetComponent().sharedMesh, "wall"); + } + } + static void SaveMesh(Mesh mesh, string name) { + var path = "Assets/" + name + ".asset"; + + Debug.Log("Mesh saved to: " + path); + AssetDatabase.CreateAsset(mesh, path); + } + void ProcessMap(int[,] map) { + List> wallRegions = GetRegions(map, 1); int wallThresholdSize = 50; foreach (List wallRegion in wallRegions) { @@ -66,7 +126,7 @@ void ProcessMap() { } } - List> roomRegions = GetRegions (0); + List> roomRegions = GetRegions(map, 0); int roomThresholdSize = 50; List survivingRooms = new List (); @@ -84,10 +144,10 @@ void ProcessMap() { survivingRooms [0].isMainRoom = true; survivingRooms [0].isAccessibleFromMainRoom = true; - ConnectClosestRooms (survivingRooms); + ConnectClosestRooms(map, survivingRooms); } - void ConnectClosestRooms(List allRooms, bool forceAccessibilityFromMainRoom = false) { + void ConnectClosestRooms(int[,] map, List allRooms, bool forceAccessibilityFromMainRoom = false) { List roomListA = new List (); List roomListB = new List (); @@ -143,31 +203,31 @@ void ConnectClosestRooms(List allRooms, bool forceAccessibilityFromMainRoo } } if (possibleConnectionFound && !forceAccessibilityFromMainRoom) { - CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); + CreatePassage(map, bestRoomA, bestRoomB, bestTileA, bestTileB); } } if (possibleConnectionFound && forceAccessibilityFromMainRoom) { - CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); - ConnectClosestRooms(allRooms, true); + CreatePassage(map, bestRoomA, bestRoomB, bestTileA, bestTileB); + ConnectClosestRooms(map, allRooms, true); } if (!forceAccessibilityFromMainRoom) { - ConnectClosestRooms(allRooms, true); + ConnectClosestRooms(map, allRooms, true); } } - void CreatePassage(Room roomA, Room roomB, Coord tileA, Coord tileB) { + void CreatePassage(int[,] map, Room roomA, Room roomB, Coord tileA, Coord tileB) { Room.ConnectRooms (roomA, roomB); //Debug.DrawLine (CoordToWorldPoint (tileA), CoordToWorldPoint (tileB), Color.green, 100); List line = GetLine (tileA, tileB); foreach (Coord c in line) { - DrawCircle(c,5); + DrawCircle(map, c,5); } } - void DrawCircle(Coord c, int r) { + void DrawCircle(int[,] map, Coord c, int r) { for (int x = -r; x <= r; x++) { for (int y = -r; y <= r; y++) { if (x*x + y*y <= r*r) { @@ -236,14 +296,14 @@ Vector3 CoordToWorldPoint(Coord tile) { return new Vector3 (-width / 2 + .5f + tile.tileX, 2, -height / 2 + .5f + tile.tileY); } - List> GetRegions(int tileType) { + List> GetRegions(int[,] map, int tileType) { List> regions = new List> (); int[,] mapFlags = new int[width,height]; for (int x = 0; x < width; x ++) { for (int y = 0; y < height; y ++) { if (mapFlags[x,y] == 0 && map[x,y] == tileType) { - List newRegion = GetRegionTiles(x,y); + List newRegion = GetRegionTiles(map, x,y); regions.Add(newRegion); foreach (Coord tile in newRegion) { @@ -256,7 +316,7 @@ List> GetRegions(int tileType) { return regions; } - List GetRegionTiles(int startX, int startY) { + List GetRegionTiles(int[,] map, int startX, int startY) { List tiles = new List (); int[,] mapFlags = new int[width,height]; int tileType = map [startX, startY]; @@ -288,12 +348,9 @@ bool IsInMapRange(int x, int y) { } - void RandomFillMap() { - if (useRandomSeed) { - seed = Time.time.ToString(); - } - - System.Random pseudoRandom = new System.Random(seed.GetHashCode()); + void RandomFillMap(int[,] map) { + seed = useRandomSeed ? UnityEngine.Random.Range(0, int.MaxValue) : seed; + UnityEngine.Random.seed = seed; for (int x = 0; x < width; x ++) { for (int y = 0; y < height; y ++) { @@ -301,16 +358,16 @@ void RandomFillMap() { map[x,y] = 1; } else { - map[x,y] = (pseudoRandom.Next(0,100) < randomFillPercent)? 1: 0; + map[x,y] = (UnityEngine.Random.Range(0,100) < randomFillPercent)? 1: 0; } } } } - void SmoothMap() { + void SmoothMap(int[,] map) { for (int x = 0; x < width; x ++) { for (int y = 0; y < height; y ++) { - int neighbourWallTiles = GetSurroundingWallCount(x,y); + int neighbourWallTiles = GetSurroundingWallCount(map,x,y); if (neighbourWallTiles > 4) map[x,y] = 1; @@ -321,7 +378,7 @@ void SmoothMap() { } } - int GetSurroundingWallCount(int gridX, int gridY) { + int GetSurroundingWallCount(int[,] map, int gridX, int gridY) { int wallCount = 0; for (int neighbourX = gridX - 1; neighbourX <= gridX + 1; neighbourX ++) { for (int neighbourY = gridY - 1; neighbourY <= gridY + 1; neighbourY ++) { diff --git a/Unity Project/Assets/Scripts/MeshGenerator.cs b/Unity Project/Assets/Scripts/MeshGenerator.cs index 2c61302..70c20ec 100644 --- a/Unity Project/Assets/Scripts/MeshGenerator.cs +++ b/Unity Project/Assets/Scripts/MeshGenerator.cs @@ -2,22 +2,17 @@ using System.Collections; using System.Collections.Generic; -public class MeshGenerator : MonoBehaviour { - - public SquareGrid squareGrid; - public MeshFilter walls; - public MeshFilter cave; - - public bool is2D; - - List vertices; +public class MeshGenerator +{ + SquareGrid squareGrid; + List vertices; List triangles; Dictionary> triangleDictionary = new Dictionary> (); List> outlines = new List> (); HashSet checkedVertices = new HashSet(); - public void GenerateMesh(int[,] map, float squareSize) { + public Mesh GenerateCaveMesh(int[,] map, float squareSize, bool generate2DCollider) { triangleDictionary.Clear (); outlines.Clear (); @@ -35,8 +30,6 @@ public void GenerateMesh(int[,] map, float squareSize) { } Mesh mesh = new Mesh(); - cave.mesh = mesh; - mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.RecalculateNormals(); @@ -49,19 +42,10 @@ public void GenerateMesh(int[,] map, float squareSize) { uvs[i] = new Vector2(percentX,percentY); } mesh.uv = uvs; - - - if (is2D) { - Generate2DColliders(); - } else { - CreateWallMesh (); - } + return mesh; } - void CreateWallMesh() { - - MeshCollider currentCollider = GetComponent (); - Destroy(currentCollider); + public Mesh CreateWallMesh() { CalculateMeshOutlines (); @@ -89,17 +73,14 @@ void CreateWallMesh() { } wallMesh.vertices = wallVertices.ToArray (); wallMesh.triangles = wallTriangles.ToArray (); - walls.mesh = wallMesh; - MeshCollider wallCollider = gameObject.AddComponent (); - wallCollider.sharedMesh = wallMesh; + return wallMesh; } - - void Generate2DColliders() { + public void Generate2DColliders(GameObject gameObject) { EdgeCollider2D[] currentColliders = gameObject.GetComponents (); for (int i = 0; i < currentColliders.Length; i++) { - Destroy(currentColliders[i]); + GameObject.DestroyImmediate(currentColliders[i]); } CalculateMeshOutlines ();