A => .hgignore +10 -0
@@ 0,0 1,10 @@
+syntax: glob
+Library/
+Build/
+Temp/
+obj
+**.csproj
+*.orig
+*.orig.meta
+*.userprefs
+*.sln
A => Assets/Ent.meta +5 -0
@@ 0,0 1,5 @@
+fileFormatVersion: 2
+guid: 25238f7a2b9484af2bdd71f7023c7930
+folderAsset: yes
+DefaultImporter:
+ userData:
A => Assets/Ent/Ent.cs +295 -0
@@ 0,0 1,295 @@
+using System;
+using System.IO;
+using Ent;
+
+namespace Ent
+{
+ /// <summary>
+ /// Apply various randomness tests to a stream of bytes
+ /// Original code by John Walker -- September 1996
+ /// http://www.fourmilab.ch/
+ ///
+ /// C# port of ENT (ent - pseudorandom number sequence test)
+ /// by Brett Trotter
+ /// blt@iastate.edu
+ /// </summary>
+
+ public class EntCalc
+ {
+ static double[,] chsqt = new double[2, 10]
+ {
+ {0.5, 0.25, 0.1, 0.05, 0.025, 0.01, 0.005, 0.001, 0.0005, 0.0001},
+ {0.0, 0.6745, 1.2816, 1.6449, 1.9600, 2.3263, 2.5758, 3.0902, 3.2905, 3.7190}
+ };
+
+ private static int MONTEN = 6; /* Bytes used as Monte Carlo co-ordinates
+ * This should be no more bits than the mantissa
+ * of your "double" floating point type. */
+
+ private uint[] monte = new uint[MONTEN];
+ private double[] prob = new double[256]; /* Probabilities per bin for entropy */
+ private long[] ccount = new long[256]; /* Bins to count occurrences of values */
+ private long totalc = 0; /* Total bytes counted */
+
+ private int mp;
+ private bool sccfirst;
+ private long inmont, mcount;
+ private double a;
+ private double cexp;
+ private double incirc;
+ private double montex, montey, montepi;
+ private double scc, sccun, sccu0, scclast, scct1, scct2, scct3;
+ private double ent, chisq, datasum;
+
+ private bool binary = false; /* Treat input as a bitstream */
+
+ public struct EntCalcResult
+ {
+ public double Entropy;
+ public double ChiSquare;
+ public double Mean;
+ public double MonteCarloPiCalc;
+ public double SerialCorrelation;
+ public long[] OccuranceCount;
+
+ public double ChiProbability;
+ public double MonteCarloErrorPct;
+ public double OptimumCompressionReductionPct;
+ public double ExpectedMeanForRandom;
+
+ public long NumberOfSamples;
+ }
+
+
+ /* Initialise random test counters. */
+ public EntCalc(bool binmode)
+ {
+ int i;
+
+ binary = binmode; /* Set binary / byte mode */
+
+ /* Initialise for calculations */
+
+ ent = 0.0; /* Clear entropy accumulator */
+ chisq = 0.0; /* Clear Chi-Square */
+ datasum = 0.0; /* Clear sum of bytes for arithmetic mean */
+
+ mp = 0; /* Reset Monte Carlo accumulator pointer */
+ mcount = 0; /* Clear Monte Carlo tries */
+ inmont = 0; /* Clear Monte Carlo inside count */
+ incirc = 65535.0 * 65535.0; /* In-circle distance for Monte Carlo */
+
+ sccfirst = true; /* Mark first time for serial correlation */
+ scct1 = scct2 = scct3 = 0.0; /* Clear serial correlation terms */
+
+ incirc = Math.Pow(Math.Pow(256.0, (double) (MONTEN / 2)) - 1, 2.0);
+
+ for (i = 0; i < 256; i++)
+ {
+ ccount[i] = 0;
+ }
+ totalc = 0;
+ }
+
+
+ /* AddSample -- Add one or more bytes to accumulation. */
+ public void AddSample(int buf, bool Fold)
+ {
+ AddSample((byte) buf, Fold);
+ }
+ public void AddSample(byte buf, bool Fold)
+ {
+ byte[] tmpByte = new byte[1];
+ tmpByte[0] = buf;
+ AddSample(tmpByte, Fold);
+ }
+ public void AddSample(byte[] buf, bool Fold)
+ {
+ int c, bean;
+
+ foreach(byte bufByte in buf)
+ {
+ bean = 0; // reset bean
+
+ byte oc = bufByte;
+
+/* Have not implemented folding yet. Plan to use System.Text.Encoding to do so.
+ *
+ * if (fold && isISOalpha(oc) && isISOupper(oc))
+ * {
+ * oc = toISOlower(oc);
+ * }
+ */
+
+ do
+ {
+ if (binary)
+ {
+ c = ((oc & 0x80)); // Get the MSB of the byte being read in
+ }
+ else
+ {
+ c = oc;
+ }
+ ccount[c]++; /* Update counter for this bin */
+ totalc++;
+
+ /* Update inside / outside circle counts for Monte Carlo computation of PI */
+
+ if (bean == 0)
+ {
+ monte[mp++] = oc; /* Save character for Monte Carlo */
+ if (mp >= MONTEN)
+ { /* Calculate every MONTEN character */
+ int mj;
+
+ mp = 0;
+ mcount++;
+ montex = montey = 0;
+ for (mj = 0; mj < MONTEN / 2; mj++)
+ {
+ montex = (montex * 256.0) + monte[mj];
+ montey = (montey * 256.0) + monte[(MONTEN / 2) + mj];
+ }
+ if ((montex * montex + montey * montey) <= incirc)
+ {
+ inmont++;
+ }
+ }
+ }
+
+ /* Update calculation of serial correlation coefficient */
+
+ sccun = c;
+ if (sccfirst)
+ {
+ sccfirst = false;
+ scclast = 0;
+ sccu0 = sccun;
+ }
+ else
+ {
+ scct1 = scct1 + scclast * sccun;
+ }
+ scct2 = scct2 + sccun;
+ scct3 = scct3 + (sccun * sccun);
+ scclast = sccun;
+ oc <<= 1; // left shift by one
+ } while (binary && (++bean < 8)); // keep looping if we're in binary mode and while the bean counter is less than 8 (bits)
+ }
+ } // end foreach
+
+
+ /* EndCalculation -- Complete calculation and return results. */
+ public EntCalcResult EndCalculation()
+ {
+ int i;
+
+ /* Complete calculation of serial correlation coefficient */
+
+ scct1 = scct1 + scclast * sccu0;
+ scct2 = scct2 * scct2;
+ scc = totalc * scct3 - scct2;
+ if (scc == 0.0)
+ {
+ scc = -100000;
+ }
+ else
+ {
+ scc = (totalc * scct1 - scct2) / scc;
+ }
+
+ /* Scan bins and calculate probability for each bin and
+ Chi-Square distribution */
+
+ cexp = totalc / (binary ? 2.0 : 256.0); /* Expected count per bin */
+ for (i = 0; i < (binary ? 2 : 256); i++)
+ {
+ prob[i] = (double) ccount[i] / totalc;
+ a = ccount[i] - cexp;
+ chisq = chisq + (a * a) / cexp;
+ datasum += ((double) i) * ccount[i];
+ }
+
+ /* Calculate entropy */
+
+ for (i = 0; i < (binary ? 2 : 256); i++)
+ {
+ if (prob[i] > 0.0)
+ {
+ ent += prob[i] * log2(1 / prob[i]);
+ }
+ }
+
+ /* Calculate Monte Carlo value for PI from percentage of hits
+ within the circle */
+
+ montepi = 4.0 * (((double) inmont) / mcount);
+
+
+ /* Calculate probability of observed distribution occurring from
+ the results of the Chi-Square test */
+
+ double chip = Math.Sqrt(2.0 * chisq) - Math.Sqrt(2.0 * (binary ? 1 : 255.0) - 1.0);
+ a = Math.Abs(chip);
+ for (i = 9; i >= 0; i--)
+ {
+ if (chsqt[1,i] < a)
+ {
+ break;
+ }
+ }
+ chip = (chip >= 0.0) ? chsqt[0,i] : 1.0 - chsqt[0,i];
+
+ double compReductionPct = ((binary ? 1 : 8) - ent) / (binary ? 1.0 : 8.0);
+
+ /* Return results */
+ EntCalcResult result = new EntCalcResult();
+ result.Entropy = ent;
+ result.ChiSquare = chisq;
+ result.ChiProbability = chip;
+ result.Mean = datasum / totalc;
+ result.ExpectedMeanForRandom = binary ? 0.5 : 127.5;
+ result.MonteCarloPiCalc = montepi;
+ result.MonteCarloErrorPct = (Math.Abs(Math.PI - montepi) / Math.PI);
+ result.SerialCorrelation = scc;
+ result.OptimumCompressionReductionPct = compReductionPct;
+ result.OccuranceCount = this.ccount;
+ result.NumberOfSamples = this.totalc;
+ return result;
+ }
+
+
+ /* LOG2 -- Calculate log to the base 2 */
+ static double log2(double x)
+ {
+ return Math.Log(x, 2); //can use this in C#
+ }
+ }
+ public class EntFileCalc
+ {
+ public static Ent.EntCalc.EntCalcResult CalculateFile(ref System.IO.FileStream inStream)
+ {
+
+ Ent.EntCalc entCalc = new EntCalc(false);
+ while (inStream.Position < inStream.Length)
+ {
+ entCalc.AddSample((byte) inStream.ReadByte(), false);
+ }
+
+ return entCalc.EndCalculation();
+ }
+ public static Ent.EntCalc.EntCalcResult CalculateFile(string inFileName)
+ {
+ System.IO.FileStream instream = new System.IO.FileStream(inFileName,System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None);
+
+ instream.Position = 0;
+
+ Ent.EntCalc.EntCalcResult tmpRes = CalculateFile(ref instream);
+
+ instream.Close();
+
+ return tmpRes;
+ }
+ }
+}
No newline at end of file
A => Assets/Ent/Ent.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: 00adecf0323434370bae2e5f80e25e16
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/Implementations.meta +5 -0
@@ 0,0 1,5 @@
+fileFormatVersion: 2
+guid: fafe29739c7dc42c3819f62c26ce816e
+folderAsset: yes
+DefaultImporter:
+ userData:
A => Assets/Implementations/MurmurHash.cs +173 -0
@@ 0,0 1,173 @@
+/***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is HashTableHashing.SuperFastHash.
+ *
+ * The Initial Developer of the Original MurmurHash2 Code is
+ * Davy Landman.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Thomas Kejser
+ * Turning this code into SQL Server CLR version
+ * and adding MurmurHash3 implementation based on C++ source.
+ * Rune Skovbo Johansen
+ * Removing all SQL dependencies (take byte array instead of SqlBinary).
+ * Adding overload that takes an int array (less code and executes faster).
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+using System;
+
+public struct MurmurHash {
+ private UInt32 seed; /* Define your own seed here */
+
+ public MurmurHash (int seedValue) {
+ seed = (UInt32)seedValue;
+ }
+
+ public Int32 GetHash (byte[] data) {
+ const UInt32 c1 = 0xcc9e2d51;
+ const UInt32 c2 = 0x1b873593;
+
+ int curLength = data.Length; // Current position in byte array
+ int length = curLength; // The const length we need to fix tail
+ UInt32 h1 = seed;
+ UInt32 k1 = 0;
+
+ // Body, eat stream a 32-bit int at a time
+ Int32 currentIndex = 0;
+ while (curLength >= 4) {
+ // Get four bytes from the input into an UInt32
+ k1 = (UInt32)(data[currentIndex++]
+ | data[currentIndex++] << 8
+ | data[currentIndex++] << 16
+ | data[currentIndex++] << 24);
+
+ // Bitmagic hash
+ k1 *= c1;
+ k1 = rotl32 (k1, 15);
+ k1 *= c2;
+
+ h1 ^= k1;
+ h1 = rotl32 (h1, 13);
+ h1 = h1 * 5 + 0xe6546b64;
+ curLength -= 4;
+ }
+
+ // Tail, the reminder bytes that did not make it to a full int.
+ // (This switch is slightly more ugly than the C++ implementation
+ // because we can't fall through.)
+ switch (curLength) {
+ case 3:
+ k1 = (UInt32)(data[currentIndex++]
+ | data[currentIndex++] << 8
+ | data[currentIndex++] << 16);
+ k1 *= c1;
+ k1 = rotl32 (k1, 15);
+ k1 *= c2;
+ h1 ^= k1;
+ break;
+ case 2:
+ k1 = (UInt32)(data[currentIndex++]
+ | data[currentIndex++] << 8);
+ k1 *= c1;
+ k1 = rotl32 (k1, 15);
+ k1 *= c2;
+ h1 ^= k1;
+ break;
+ case 1:
+ k1 = (UInt32)(data[currentIndex++]);
+ k1 *= c1;
+ k1 = rotl32 (k1, 15);
+ k1 *= c2;
+ h1 ^= k1;
+ break;
+ };
+
+ // Finalization, magic chants to wrap it all up
+ h1 ^= (UInt32)length;
+ h1 = fmix (h1);
+
+ return (Int32)h1;
+ }
+
+ public Int32 GetHash (params int[] data) {
+ const UInt32 c1 = 0xcc9e2d51;
+ const UInt32 c2 = 0x1b873593;
+
+ UInt32 h1 = seed;
+ UInt32 k1 = 0;
+
+ // Body, eat stream a 32-bit int at a time
+ int length = data.Length;
+ for (int i=0; i<length; i++) {
+ unchecked {
+ k1 = (UInt32)data[i];
+ }
+
+ // Bitmagic hash
+ k1 *= c1;
+ k1 = rotl32 (k1, 15);
+ k1 *= c2;
+
+ h1 ^= k1;
+ h1 = rotl32 (h1, 13);
+ h1 = h1 * 5 + 0xe6546b64;
+ }
+
+ // Finalization, magic chants to wrap it all up
+ h1 ^= (UInt32)(length*4);
+ h1 = fmix (h1);
+
+ return (Int32)h1;
+ }
+
+ public float Value (params int[] data) {
+ return Math.Abs (GetHash (data)) / (float)int.MaxValue;
+ }
+
+ public int Range (int min, int max, params int[] data) {
+ return min + (int)(((UInt32)GetHash (data)) % (max - min));
+ }
+
+ public float Range (float min, float max, params int[] data) {
+ return min + ((UInt32)GetHash (data) * (float)(max - min)) / UInt32.MaxValue;
+ }
+
+ private static UInt32 rotl32 (UInt32 x, byte r) {
+ return (x << r) | (x >> (32 - r));
+ }
+
+ private static UInt32 fmix (UInt32 h) {
+ h ^= h >> 16;
+ h *= 0x85ebca6b;
+ h ^= h >> 13;
+ h *= 0xc2b2ae35;
+ h ^= h >> 16;
+ return h;
+ }
+};
A => Assets/Implementations/MurmurHash.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: 2591f89c8b47743ba9b3a109cd76263d
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/Implementations/PcgHash.cs +29 -0
@@ 0,0 1,29 @@
+using System;
+
+public static class PcgHash {
+ public static int Hash (int i, int j) {
+ int a = i;
+ int b = j;
+ for (int r = 0; r < 3; r++) {
+ a = rot ((int) ((a^0xcafebabe) + (b^0xfaceb00c)), 23);
+ b = rot ((int) ((a^0xdeadbeef) + (b^0x8badf00d)), 5);
+ }
+ return a^b;
+ }
+
+ public static int Hash (int i) {
+ int a = i;
+ int b = 0;
+ for (int r = 0; r < 3; r++) {
+ a = rot ((int) ((a^0xcafebabe) + (b^0xfaceb00c)), 23);
+ b = rot ((int) ((a^0xdeadbeef) + (b^0x8badf00d)), 5);
+ }
+ return a^b;
+ }
+
+ private static int rot (int x, int b) {
+ return (x << b) ^ (x >> (32-b)); // broken rotate because I'm in java and lazy
+ }
+}
+
+
A => Assets/Implementations/PcgHash.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: d6eebd4bc9fa046e6923180ea0ce1a13
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/Testing.meta +5 -0
@@ 0,0 1,5 @@
+fileFormatVersion: 2
+guid: f9b4baa6180fe438784eb0d5760042dc
+folderAsset: yes
+DefaultImporter:
+ userData:
A => Assets/Testing/Extensions.cs +26 -0
@@ 0,0 1,26 @@
+using System;
+
+public static class Extensions {
+ public static string Ordinal (this int num) {
+ if (num < 0)
+ return num.ToString();
+
+ switch (num % 100) {
+ case 11:
+ case 12:
+ case 13:
+ return num + "th";
+ }
+
+ switch (num % 10) {
+ case 1:
+ return num + "st";
+ case 2:
+ return num + "nd";
+ case 3:
+ return num + "rd";
+ default:
+ return num + "th";
+ }
+ }
+}
A => Assets/Testing/Extensions.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: 21212a04d36bd457aad738911b7eab83
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/Testing/RandomHashTest.cs +129 -0
@@ 0,0 1,129 @@
+using System;
+using System.Diagnostics;
+using System.Collections.Generic;
+
+public interface RandomSequence {
+ int Next ();
+ void Reset ();
+ string GetName ();
+}
+
+public class RandomHashTest {
+ public RandomSequence sequence;
+ public string name;
+ public string result;
+ public float[,] coordsArray = new float[256,256];
+ public float[] diagonalSums = new float[256];
+ public float diagonalsDeviation = 0;
+
+ public RandomHashTest (RandomSequence randomSequence) {
+ sequence = randomSequence;
+ name = sequence.GetName ().Replace ("#", "0\u2026n");
+ Test ();
+ Console.WriteLine (result);
+ }
+
+ public int Function256 () {
+ return GetInRange (sequence.Next (), 256);
+ }
+
+ public int GetInRange (int i, int range) {
+ return ((i % range) + range) % range;
+ }
+
+ public void Reset () {
+ sequence.Reset ();
+ }
+
+ private void Test () {
+ int[] ints = new int[500000];
+
+ // Call random function
+ sequence.Reset ();
+ Stopwatch stopWatch = new Stopwatch ();
+ stopWatch.Start ();
+ for (int i=0; i<ints.Length; i++)
+ ints[i] = sequence.Next ();
+ stopWatch.Stop ();
+
+ // Convert to bytes
+ byte[] bytes = new byte[ints.Length];
+ for (int i = 0; i < bytes.Length; i++)
+ bytes[i] = (byte)GetInRange (ints[i], 256);
+
+ // Test randomness data
+ Ent.EntCalc ent = new Ent.EntCalc (false);
+ ent.AddSample (bytes, false);
+ Ent.EntCalc.EntCalcResult calcResult = ent.EndCalculation ();
+
+ // Create coords data
+ Reset ();
+ float samplesPerPixelInverse = (256f * 256f) / ints.Length;
+ for (int i=0; i<ints.Length; i+=6) {
+ int x = Function256 ();
+ int y = Function256 ();
+ coordsArray[x,y] += samplesPerPixelInverse;
+ }
+
+ // Calculate coords results
+ for (int j=0; j<256; j++) {
+ for (int i=0; i<256; i++) {
+ float value = coordsArray[i,j];
+ diagonalSums[(i + j) % 256] += value * 0.5f;
+ diagonalSums[((i - j) + 256) % 256] += value * 0.5f;
+ }
+ }
+ diagonalsDeviation = StandardDeviation (new List<float> (diagonalSums));
+
+ // Get string with result
+ result = GetResult (name, calcResult, stopWatch.ElapsedMilliseconds);
+ }
+
+ public static float StandardDeviation (List<float> valueList) {
+ float m = 0.0f;
+ float s = 0.0f;
+ int k = 1;
+ foreach (float value in valueList)
+ {
+ float tmpM = m;
+ m += (value - tmpM) / k;
+ s += (value - tmpM) * (value - m);
+ k++;
+ }
+ return (float)System.Math.Sqrt (s / (k-1));
+ }
+
+ string GetResult (string name, Ent.EntCalc.EntCalcResult result, float duration) {
+ double meanValueQuality = Clamp01 (1 - Math.Abs (127.5 - result.Mean) / 128);
+ double serialCorrelationQuality = Clamp01 (1 - 2 * Math.Abs (result.SerialCorrelation));
+ double piQuality = Clamp01 (1 - 10 * result.MonteCarloErrorPct);
+ double diagonalsDeviationQuality = Clamp01 (1 - diagonalsDeviation / 256);
+ double combined = Math.Min (Math.Min (Math.Min (meanValueQuality, serialCorrelationQuality), piQuality), diagonalsDeviationQuality);
+
+ return string.Format (
+ " value quality\n"
+ + "Mean Value: {0,8:F4} {1,7:P0}\n"
+ + "Serial Correlation: {2,8:F4} {3,7:P0}\n"
+ + "Monte Carlo Pi Value: {4,8:F4} {5,7:P0}\n"
+ + "Diagonals Deviation: {6,8:F4} {7,7:P0}\n"
+ + "<b>Overall Quality: {8,7:P0}</b>\n"
+ + "\n"
+ + "Execution Time: {9,6} ms",
+
+ result.Mean, meanValueQuality,
+ result.SerialCorrelation, serialCorrelationQuality,
+ result.MonteCarloPiCalc, piQuality,
+ diagonalsDeviation, diagonalsDeviationQuality,
+ combined,
+ duration
+ );
+ }
+
+ private static double Clamp01 (double val) {
+ return Clamp (val, 0, 1);
+ }
+
+ private static double Clamp (double val, double min, double max) {
+ return Math.Min (max, Math.Max (val, min));
+ }
+}
A => Assets/Testing/RandomHashTest.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: 9455ad132e8024ca6a484e83bbb73ecf
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/Testing/RandomHashTester.cs +210 -0
@@ 0,0 1,210 @@
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+
+public class RandomHashTester {
+ public List<RandomHashTest> tests = new List<RandomHashTest> ();
+
+ public RandomHashTester () {
+ AddTest (new SystemRandomWrapper (0));
+ AddTest (new SystemRandomSeedVarianceWrapper (0));
+ AddTest (new SystemRandomSeedVarianceWrapper (100));
+ AddTest (new SystemRandomScrambledSeedVarianceWrapper (0));
+ AddTest (new LinearFunction (19969, 207));
+ AddTest (new PcgHashWrapper ());
+ AddTest (new MD5HashWrapper ());
+ AddTest (new MurmurHashWrapper (0));
+ AddTest (new MurmurHashSeedVarianceWrapper (0));
+ }
+
+ private void AddTest (RandomSequence sequence) {
+ tests.Add (new RandomHashTest (sequence));
+ }
+}
+
+public class SystemRandomWrapper : RandomSequence {
+ private int seed;
+ private Random rand;
+ public SystemRandomWrapper (int seed) {
+ this.seed = seed;
+ Reset ();
+ }
+ public void Reset () {
+ rand = new Random (seed);
+ }
+ public int Next () {
+ return rand.Next ();
+ }
+ public string GetName () {
+ return string.Format ("System.Random\nnumbers # of seed {0}", seed);
+ }
+}
+
+public class SystemRandomSeedVarianceWrapper : RandomSequence {
+ private int index;
+ private int seed;
+ public SystemRandomSeedVarianceWrapper (int index) {
+ this.index = index;
+ Reset ();
+ }
+ public void Reset () {
+ seed = 0;
+ }
+ public int Next () {
+ Random rand = new Random (seed);
+ seed++;
+ // Get the number in the sequence corresponding to index.
+ // This is super slow for large index values!
+ for (int i=0; i<index; i++)
+ rand.Next ();
+ return rand.Next ();
+ }
+ public string GetName () {
+ return string.Format ("System.Random\n{0} number of seed #", index.Ordinal ());
+ }
+}
+
+public class SystemRandomScrambledWrapper : RandomSequence {
+ private int seed;
+ private Random rand;
+ public SystemRandomScrambledWrapper (int seed) {
+ this.seed = (int)((seed ^ 0x5DEECE66DL) & ((1L << 48) - 1));
+ Reset ();
+ }
+ public void Reset () {
+ rand = new Random (seed);
+ }
+ public int Next () {
+ return rand.Next ();
+ }
+ public string GetName () {
+ return string.Format ("System.Random (Scrambled)\nnumbers # of seed {0}", seed);
+ }
+}
+
+public class SystemRandomScrambledSeedVarianceWrapper : RandomSequence {
+ private int index;
+ private int seed;
+ public SystemRandomScrambledSeedVarianceWrapper (int index) {
+ this.index = index;
+ Reset ();
+ }
+ public void Reset () {
+ seed = 0;
+ }
+ public int Next () {
+ int seedModified = (int)((seed ^ 0x5DEECE66DL) & ((1L << 48) - 1));
+ Random rand = new Random (seedModified);
+ seed++;
+ // Get the number in the sequence corresponding to index.
+ // This is super slow for large index values!
+ for (int i=0; i<index; i++)
+ rand.Next ();
+ return rand.Next ();
+ }
+ public string GetName () {
+ return string.Format ("System.Random (Scrambled)\n{0} number of seed #", index.Ordinal ());
+ }
+}
+
+public class MurmurHashWrapper : RandomSequence {
+ private int seed;
+ private MurmurHash hash;
+ private int index;
+ public MurmurHashWrapper (int seed) {
+ this.seed = seed;
+ hash = new MurmurHash (seed);
+ Reset ();
+ }
+ public void Reset () {
+ index = 0;
+ }
+ public int Next () {
+ int value = hash.GetHash (index);
+ index++;
+ return value;
+ }
+ public string GetName () {
+ return string.Format ("MurmurHash3\nnumbers # of seed {0}", seed);
+ }
+}
+
+public class MurmurHashSeedVarianceWrapper : RandomSequence {
+ private int index;
+ private int seed;
+ public MurmurHashSeedVarianceWrapper (int index) {
+ this.index = index;
+ Reset ();
+ }
+ public void Reset () {
+ seed = 0;
+ }
+ public int Next () {
+ int value = new MurmurHash (seed).GetHash (index);
+ seed++;
+ return value;
+ }
+ public string GetName () {
+ return string.Format ("MurmurHash3\n{0} number of seed #", index.Ordinal ());
+ }
+}
+
+public class PcgHashWrapper : RandomSequence {
+ private int index;
+ public PcgHashWrapper () {
+ Reset ();
+ }
+ public void Reset () {
+ index = 0;
+ }
+ public int Next () {
+ int value = PcgHash.Hash (index);
+ index++;
+ return value;
+ }
+ public string GetName () {
+ return "PcgHash\nnumbers #";
+ }
+}
+
+public class MD5HashWrapper : RandomSequence {
+ private MD5 hash;
+ private int index;
+ public MD5HashWrapper () {
+ hash = MD5.Create ();
+ Reset ();
+ }
+ public void Reset () {
+ index = 0;
+ }
+ public int Next () {
+ int value = BitConverter.ToInt32 (hash.ComputeHash (BitConverter.GetBytes (index)), 0);
+ index++;
+ return value;
+ }
+ public string GetName () {
+ return "MD5\nnumbers #";
+ }
+}
+
+public class LinearFunction : RandomSequence {
+ private int multiplier;
+ private int divisor;
+ private int index;
+ public LinearFunction (int multiplier, int divisor) {
+ this.multiplier = multiplier;
+ this.divisor = divisor;
+ Reset ();
+ }
+ public void Reset () {
+ index = 0;
+ }
+ public int Next () {
+ int value = index * multiplier / divisor;
+ index++;
+ return value;
+ }
+ public string GetName () {
+ return string.Format ("Linear function i * {0} / {1}\nnumbers #", multiplier, divisor);
+ }
+}
A => Assets/Testing/RandomHashTester.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: f23d8f70c7d2e4d758e364eab0aaa675
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/UnityFrontend.meta +5 -0
@@ 0,0 1,5 @@
+fileFormatVersion: 2
+guid: e791f0ce197034e51a1b53b75db07d6d
+folderAsset: yes
+DefaultImporter:
+ userData:
A => Assets/UnityFrontend/Courier New.ttf +0 -0
A => Assets/UnityFrontend/Courier New.ttf.meta +14 -0
@@ 0,0 1,14 @@
+fileFormatVersion: 2
+guid: c62870e0e417e455fbf0dab83663a9fb
+TrueTypeFontImporter:
+ serializedVersion: 2
+ fontSize: 12
+ forceTextureCase: -2
+ characterSpacing: 1
+ characterPadding: 0
+ includeFontData: 1
+ use2xBehaviour: 0
+ fontNames: []
+ customCharacters:
+ fontRenderingMode: 0
+ userData:
A => Assets/UnityFrontend/NoiseTestMB.cs +165 -0
@@ 0,0 1,165 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+public class TestFront {
+ public bool enabled = true;
+ public Texture2D noiseTexture;
+ public Texture2D coordTexture;
+}
+
+public class NoiseTestMB : MonoBehaviour {
+ RandomHashTester tester;
+ TestFront[] fronts;
+ Vector2 scroll;
+ bool showOptions = false;
+
+ const int width = 256;
+ const int hSpacing = 20;
+ const int vSpacing = 10;
+ public Font font;
+ GUIStyle header;
+ GUIStyle style;
+ bool showNoise = true;
+ bool showCoords = true;
+ bool showStats = true;
+
+ void Start () {
+ tester = new RandomHashTester ();
+ fronts = new TestFront[tester.tests.Count];
+
+ for (int i=0; i<fronts.Length; i++) {
+ Initialize (i);
+ }
+ }
+
+ void Initialize (int testNr) {
+ RandomHashTest test = tester.tests[testNr];
+ TestFront front = new TestFront ();
+ fronts[testNr] = front;
+
+ // Create noise texture.
+ front.noiseTexture = new Texture2D (256, 256);
+ front.noiseTexture.filterMode = FilterMode.Point;
+ test.Reset ();
+ for (int j=front.noiseTexture.height-1; j>=0; j--) {
+ for (int i=0; i<front.noiseTexture.width; i++) {
+ float f = test.Function256 () / 255f;
+ front.noiseTexture.SetPixel (i, j, new Color (f,f,f,1));
+ }
+ }
+ front.noiseTexture.Apply ();
+
+ // Create coords texture.
+ front.coordTexture = new Texture2D (256, 256);
+ front.coordTexture.filterMode = FilterMode.Point;
+ for (int j=front.coordTexture.height-1; j>=0; j--) {
+ for (int i=0; i<front.coordTexture.width; i++) {
+ float f = Mathf.Min (1, test.coordsArray[i,j]);
+ front.coordTexture.SetPixel (i, j, new Color (f,f,f,1));
+ }
+ }
+ front.coordTexture.Apply ();
+ }
+
+ void OnGUI () {
+ if (style == null) {
+ style = new GUIStyle ("label");
+ style.font = font;
+ style.normal.textColor = Color.black;
+ style.fontSize = 10;
+ header = new GUIStyle ("label");
+ header.normal.textColor = Color.black;
+ header.fontSize = 12;
+ header.fontStyle = FontStyle.Bold;
+ }
+
+ scroll = GUI.BeginScrollView (
+ new Rect (0, 0, Screen.width, Screen.height-20),
+ scroll,
+ new Rect (0, 0, hSpacing + (width + hSpacing) * fronts.Count (e => e.enabled), 720));
+
+ float left = hSpacing;
+ float top = 10;
+ for (int i=0; i<fronts.Length; i++) {
+ TestFront front = fronts[i];
+ if (!front.enabled)
+ continue;
+
+ RandomHashTest test = tester.tests[i];
+ top = vSpacing;
+ float height;
+
+ height = 34;
+ GUI.Label (new Rect (left, top, width, height), test.name, header);
+ top += height + vSpacing;
+
+ if (showNoise) {
+ height = 256;
+ GUI.DrawTexture (new Rect (left, top, 256, height), front.noiseTexture);
+ top += height;
+
+ height = 20;
+ GUI.Label (new Rect (left, top, width, height), "Sequence of 65536 random values.", style);
+ top += height + vSpacing;
+ }
+
+ if (showCoords) {
+ height = 256;
+ GUI.DrawTexture (new Rect (left, top, 256, height), front.coordTexture);
+ top += height;
+
+ height = 20;
+ GUI.Label (new Rect (left, top, width, height), "Plot of 500000 random coordinates.", style);
+ top += height + vSpacing;
+ }
+
+ if (showStats) {
+ height = 96;
+ GUI.Label (new Rect (left, top, width, height), test.result, style);
+ top += height + vSpacing;
+ }
+
+ left += width + hSpacing;
+ }
+
+ GUI.EndScrollView ();
+
+ if (GUI.Button (new Rect (0, Screen.height - 20, 80, 20), "Options"))
+ showOptions = !showOptions;
+
+ if (GUI.Button (new Rect (90, Screen.height - 20, 80, 20), "Screenshot"))
+ StartCoroutine (CaptureScreenshot ((int)left, (int)top));
+
+ if (showOptions)
+ GUILayout.Window (0, new Rect (0, 0, Screen.width, Screen.height-20), OptionsWindow, "Options");
+ }
+
+ void OptionsWindow (int id) {
+ for (int i = 0; i < fronts.Length; i++) {
+ fronts[i].enabled = GUILayout.Toggle (fronts[i].enabled, tester.tests[i].name);
+ }
+ GUILayout.Space (10);
+ showNoise = GUILayout.Toggle (showNoise, "Show Noise Image");
+ showCoords = GUILayout.Toggle (showCoords, "Show Coordinates Plot");
+ showStats = GUILayout.Toggle (showStats, "Show Statistics");
+ }
+
+ IEnumerator CaptureScreenshot (int width, int height) {
+ yield return new WaitForEndOfFrame ();
+
+ // Create a texture, RGB24 format
+ var tex = new Texture2D (width, height, TextureFormat.RGB24, false);
+ // Read screen contents into the texture
+ tex.ReadPixels (new Rect (0, Screen.height - height, width, height), 0, 0);
+ tex.Apply ();
+
+ // Encode texture into PNG
+ var bytes = tex.EncodeToPNG ();
+ Destroy (tex);
+
+ // Save PNG
+ System.IO.File.WriteAllBytes (Application.dataPath + "/../Random.png", bytes);
+ }
+}
A => Assets/UnityFrontend/NoiseTestMB.cs.meta +8 -0
@@ 0,0 1,8 @@
+fileFormatVersion: 2
+guid: f196a99beabb9428c922e6f623041baf
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
A => Assets/UnityFrontend/Test.unity +200 -0
@@ 0,0 1,200 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+ m_ObjectHideFlags: 0
+ m_PVSData:
+ m_PVSObjectsArray: []
+ m_PVSPortalsArray: []
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: .25
+ backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+ m_Fog: 0
+ m_FogColor: {r: .5, g: .5, b: .5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: .00999999978
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1}
+ m_SkyboxMaterial: {fileID: 0}
+ m_HaloStrength: .5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 0}
+ m_ObjectHideFlags: 0
+--- !u!127 &3
+LevelGameManager:
+ m_ObjectHideFlags: 0
+--- !u!157 &4
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ m_LightProbes: {fileID: 0}
+ m_Lightmaps: []
+ m_LightmapsMode: 1
+ m_BakedColorSpace: 0
+ m_UseDualLightmapsInForward: 0
+ m_LightmapEditorSettings:
+ m_Resolution: 50
+ m_LastUsedResolution: 0
+ m_TextureWidth: 1024
+ m_TextureHeight: 1024
+ m_BounceBoost: 1
+ m_BounceIntensity: 1
+ m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1}
+ m_SkyLightIntensity: 0
+ m_Quality: 0
+ m_Bounces: 1
+ m_FinalGatherRays: 1000
+ m_FinalGatherContrastThreshold: .0500000007
+ m_FinalGatherGradientThreshold: 0
+ m_FinalGatherInterpolationPoints: 15
+ m_AOAmount: 0
+ m_AOMaxDistance: .100000001
+ m_AOContrast: 1
+ m_LODSurfaceMappingDistance: 1
+ m_Padding: 0
+ m_TextureCompression: 0
+ m_LockAtlas: 0
+--- !u!196 &5
+NavMeshSettings:
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ agentRadius: .5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: .400000006
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ accuratePlacement: 0
+ minRegionArea: 2
+ widthInaccuracy: 16.666666
+ heightInaccuracy: 10
+ m_NavMesh: {fileID: 0}
+--- !u!1 &535878205
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 535878206}
+ - 20: {fileID: 535878207}
+ - 92: {fileID: 535878209}
+ - 124: {fileID: 535878210}
+ - 81: {fileID: 535878208}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &535878206
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 535878205}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+--- !u!20 &535878207
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 535878205}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 1, g: 1, b: 1, a: .0196078438}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: .300000012
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 100
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_HDR: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: .0219999999
+--- !u!81 &535878208
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 535878205}
+ m_Enabled: 1
+--- !u!92 &535878209
+Behaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 535878205}
+ m_Enabled: 1
+--- !u!124 &535878210
+Behaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 535878205}
+ m_Enabled: 1
+--- !u!1 &1232387675
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 4
+ m_Component:
+ - 4: {fileID: 1232387676}
+ - 114: {fileID: 1232387677}
+ m_Layer: 0
+ m_Name: GameObject
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1232387676
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1232387675}
+ 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: 0}
+ m_RootOrder: 0
+--- !u!114 &1232387677
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1232387675}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f196a99beabb9428c922e6f623041baf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ font: {fileID: 12800000, guid: c62870e0e417e455fbf0dab83663a9fb, type: 3}
A => Assets/UnityFrontend/Test.unity.meta +4 -0
@@ 0,0 1,4 @@
+fileFormatVersion: 2
+guid: af86cb29a19cd4fd0a758477522d87ea
+DefaultImporter:
+ userData:
A => ProjectSettings/AudioManager.asset +12 -0
@@ 0,0 1,12 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!11 &1
+AudioManager:
+ m_ObjectHideFlags: 0
+ m_Volume: 1
+ Rolloff Scale: 1
+ m_SpeedOfSound: 347
+ Doppler Factor: 1
+ Default Speaker Mode: 2
+ m_DSPBufferSize: 0
+ m_DisableAudio: 0
A => ProjectSettings/DynamicsManager.asset +15 -0
@@ 0,0 1,15 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!55 &1
+PhysicsManager:
+ m_ObjectHideFlags: 0
+ m_Gravity: {x: 0, y: -9.81000042, z: 0}
+ m_DefaultMaterial: {fileID: 0}
+ m_BounceThreshold: 2
+ m_SleepVelocity: .150000006
+ m_SleepAngularVelocity: .140000001
+ m_MaxAngularVelocity: 7
+ m_MinPenetrationForPenalty: .00999999978
+ m_SolverIterationCount: 6
+ m_RaycastsHitTriggers: 1
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
A => ProjectSettings/EditorBuildSettings.asset +7 -0
@@ 0,0 1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1045 &1
+EditorBuildSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Scenes: []
A => ProjectSettings/EditorSettings.asset +12 -0
@@ 0,0 1,12 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!159 &1
+EditorSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 3
+ m_ExternalVersionControlSupport: Hidden Meta Files
+ m_SerializationMode: 2
+ m_WebSecurityEmulationEnabled: 0
+ m_WebSecurityEmulationHostUrl: http://www.mydomain.com/mygame.unity3d
+ m_DefaultBehaviorMode: 0
+ m_SpritePackerMode: 2
A => ProjectSettings/GraphicsSettings.asset +10 -0
@@ 0,0 1,10 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!30 &1
+GraphicsSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_AlwaysIncludedShaders:
+ - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+ - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0}
A => ProjectSettings/InputManager.asset +327 -0
@@ 0,0 1,327 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!13 &1
+InputManager:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Axes:
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: left
+ positiveButton: right
+ altNegativeButton: a
+ altPositiveButton: d
+ gravity: 3
+ dead: .00100000005
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton: down
+ positiveButton: up
+ altNegativeButton: s
+ altPositiveButton: w
+ gravity: 3
+ dead: .00100000005
+ sensitivity: 3
+ snap: 1
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left ctrl
+ altNegativeButton:
+ altPositiveButton: mouse 0
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left alt
+ altNegativeButton:
+ altPositiveButton: mouse 1
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: left cmd
+ altNegativeButton:
+ altPositiveButton: mouse 2
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: space
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse X
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: .100000001
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse Y
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: .100000001
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Mouse ScrollWheel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: .100000001
+ snap: 0
+ invert: 0
+ type: 1
+ axis: 2
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Window Shake X
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: .100000001
+ snap: 0
+ invert: 0
+ type: 3
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Window Shake Y
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: 0
+ sensitivity: .100000001
+ snap: 0
+ invert: 0
+ type: 3
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Horizontal
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: .189999998
+ sensitivity: 1
+ snap: 0
+ invert: 0
+ type: 2
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Vertical
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton:
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 0
+ dead: .189999998
+ sensitivity: 1
+ snap: 0
+ invert: 1
+ type: 2
+ axis: 1
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire1
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 0
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire2
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 1
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Fire3
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 2
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Jump
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: joystick button 3
+ altNegativeButton:
+ altPositiveButton:
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: return
+ altNegativeButton:
+ altPositiveButton: joystick button 0
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Submit
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: enter
+ altNegativeButton:
+ altPositiveButton: space
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
+ - serializedVersion: 3
+ m_Name: Cancel
+ descriptiveName:
+ descriptiveNegativeName:
+ negativeButton:
+ positiveButton: escape
+ altNegativeButton:
+ altPositiveButton: joystick button 1
+ gravity: 1000
+ dead: .00100000005
+ sensitivity: 1000
+ snap: 0
+ invert: 0
+ type: 0
+ axis: 0
+ joyNum: 0
A => ProjectSettings/NavMeshLayers.asset +133 -0
@@ 0,0 1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!126 &1
+NavMeshLayers:
+ m_ObjectHideFlags: 0
+ Built-in Layer 0:
+ name: Default
+ cost: 1
+ editType: 2
+ Built-in Layer 1:
+ name: Not Walkable
+ cost: 1
+ editType: 0
+ Built-in Layer 2:
+ name: Jump
+ cost: 2
+ editType: 2
+ User Layer 0:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 1:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 2:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 3:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 4:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 5:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 6:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 7:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 8:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 9:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 10:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 11:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 12:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 13:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 14:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 15:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 16:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 17:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 18:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 19:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 20:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 21:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 22:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 23:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 24:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 25:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 26:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 27:
+ name:
+ cost: 1
+ editType: 3
+ User Layer 28:
+ name:
+ cost: 1
+ editType: 3
A => ProjectSettings/NetworkManager.asset +8 -0
@@ 0,0 1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!149 &1
+NetworkManager:
+ m_ObjectHideFlags: 0
+ m_DebugLevel: 0
+ m_Sendrate: 15
+ m_AssetToPrefab: {}
A => ProjectSettings/Physics2DSettings.asset +22 -0
@@ 0,0 1,22 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!19 &1
+Physics2DSettings:
+ m_ObjectHideFlags: 0
+ m_Gravity: {x: 0, y: -9.81000042}
+ m_DefaultMaterial: {fileID: 0}
+ m_VelocityIterations: 8
+ m_PositionIterations: 3
+ m_VelocityThreshold: 1
+ m_MaxLinearCorrection: .200000003
+ m_MaxAngularCorrection: 8
+ m_MaxTranslationSpeed: 100
+ m_MaxRotationSpeed: 360
+ m_BaumgarteScale: .200000003
+ m_BaumgarteTimeOfImpactScale: .75
+ m_TimeToSleep: .5
+ m_LinearSleepTolerance: .00999999978
+ m_AngularSleepTolerance: 2
+ m_RaycastsHitTriggers: 1
+ m_DeleteStopsCallbacks: 1
+ m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
A => ProjectSettings/ProjectSettings.asset +248 -0
@@ 0,0 1,248 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!129 &1
+PlayerSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 3
+ AndroidProfiler: 0
+ defaultScreenOrientation: 0
+ targetDevice: 2
+ targetGlesGraphics: 1
+ targetResolution: 0
+ accelerometerFrequency: 60
+ companyName: DefaultCompany
+ productName: NoiseProject
+ defaultCursor: {fileID: 0}
+ cursorHotspot: {x: 0, y: 0}
+ defaultScreenWidth: 1024
+ defaultScreenHeight: 768
+ defaultScreenWidthWeb: 960
+ defaultScreenHeightWeb: 600
+ m_RenderingPath: 1
+ m_MobileRenderingPath: 1
+ m_ActiveColorSpace: 0
+ m_MTRendering: 1
+ m_MobileMTRendering: 0
+ m_UseDX11: 1
+ m_Stereoscopic3D: 0
+ iosShowActivityIndicatorOnLoading: -1
+ androidShowActivityIndicatorOnLoading: -1
+ displayResolutionDialog: 1
+ allowedAutorotateToPortrait: 1
+ allowedAutorotateToPortraitUpsideDown: 1
+ allowedAutorotateToLandscapeRight: 1
+ allowedAutorotateToLandscapeLeft: 1
+ useOSAutorotation: 1
+ use32BitDisplayBuffer: 0
+ use24BitDepthBuffer: 0
+ defaultIsFullScreen: 0
+ defaultIsNativeResolution: 1
+ runInBackground: 0
+ captureSingleScreen: 0
+ Override IPod Music: 0
+ Prepare IOS For Recording: 0
+ enableHWStatistics: 1
+ usePlayerLog: 1
+ stripPhysics: 0
+ forceSingleInstance: 0
+ resizableWindow: 0
+ useMacAppStoreValidation: 0
+ gpuSkinning: 0
+ xboxPIXTextureCapture: 0
+ xboxEnableAvatar: 0
+ xboxEnableKinect: 0
+ xboxEnableKinectAutoTracking: 0
+ xboxEnableFitness: 0
+ visibleInBackground: 0
+ macFullscreenMode: 2
+ d3d9FullscreenMode: 1
+ d3d11ForceExclusiveMode: 0
+ xboxSpeechDB: 0
+ xboxEnableHeadOrientation: 0
+ xboxEnableGuest: 0
+ videoMemoryForVertexBuffers: 0
+ m_SupportedAspectRatios:
+ 4:3: 1
+ 5:4: 1
+ 16:10: 1
+ 16:9: 1
+ Others: 1
+ iPhoneBundleIdentifier: com.Company.ProductName
+ metroEnableIndependentInputSource: 0
+ metroEnableLowLatencyPresentationAPI: 0
+ productGUID: 6df95189062f9420cbb882f30a3abe0f
+ iPhoneBundleVersion: 1.0
+ AndroidBundleVersionCode: 1
+ AndroidMinSdkVersion: 9
+ AndroidPreferredInstallLocation: 1
+ aotOptions:
+ apiCompatibilityLevel: 2
+ iPhoneStrippingLevel: 0
+ iPhoneScriptCallOptimization: 0
+ ForceInternetPermission: 0
+ ForceSDCardPermission: 0
+ CreateWallpaper: 0
+ APKExpansionFiles: 0
+ StripUnusedMeshComponents: 0
+ iPhoneSdkVersion: 988
+ iPhoneTargetOSVersion: 10
+ uIPrerenderedIcon: 0
+ uIRequiresPersistentWiFi: 0
+ uIStatusBarHidden: 1
+ uIExitOnSuspend: 0
+ uIStatusBarStyle: 0
+ iPhoneSplashScreen: {fileID: 0}
+ iPhoneHighResSplashScreen: {fileID: 0}
+ iPhoneTallHighResSplashScreen: {fileID: 0}
+ iPhone47inSplashScreen: {fileID: 0}
+ iPhone55inPortraitSplashScreen: {fileID: 0}
+ iPhone55inLandscapeSplashScreen: {fileID: 0}
+ iPadPortraitSplashScreen: {fileID: 0}
+ iPadHighResPortraitSplashScreen: {fileID: 0}
+ iPadLandscapeSplashScreen: {fileID: 0}
+ iPadHighResLandscapeSplashScreen: {fileID: 0}
+ AndroidTargetDevice: 0
+ AndroidSplashScreenScale: 0
+ AndroidKeystoreName:
+ AndroidKeyaliasName:
+ resolutionDialogBanner: {fileID: 0}
+ m_BuildTargetIcons: []
+ m_BuildTargetBatching: []
+ webPlayerTemplate: APPLICATION:Default
+ m_TemplateCustomTags: {}
+ XboxTitleId:
+ XboxImageXexPath:
+ XboxSpaPath:
+ XboxGenerateSpa: 0
+ XboxDeployKinectResources: 0
+ XboxSplashScreen: {fileID: 0}
+ xboxEnableSpeech: 0
+ xboxAdditionalTitleMemorySize: 0
+ xboxDeployKinectHeadOrientation: 0
+ xboxDeployKinectHeadPosition: 0
+ ps3TitleConfigPath:
+ ps3DLCConfigPath:
+ ps3ThumbnailPath:
+ ps3BackgroundPath:
+ ps3SoundPath:
+ ps3TrophyCommId:
+ ps3NpCommunicationPassphrase:
+ ps3TrophyPackagePath:
+ ps3BootCheckMaxSaveGameSizeKB: 128
+ ps3TrophyCommSig:
+ ps3SaveGameSlots: 1
+ ps3TrialMode: 0
+ psp2Splashimage: {fileID: 0}
+ psp2LiveAreaGate: {fileID: 0}
+ psp2LiveAreaBackround: {fileID: 0}
+ psp2NPTrophyPackPath:
+ psp2NPCommsID:
+ psp2NPCommsPassphrase:
+ psp2NPCommsSig:
+ psp2ParamSfxPath:
+ psp2PackagePassword:
+ psp2DLCConfigPath:
+ psp2ThumbnailPath:
+ psp2BackgroundPath:
+ psp2SoundPath:
+ psp2TrophyCommId:
+ psp2TrophyPackagePath:
+ psp2PackagedResourcesPath:
+ flashStrippingLevel: 2
+ spritePackerPolicy:
+ scriptingDefineSymbols: {}
+ metroPackageName: NoiseProject
+ metroPackageLogo:
+ metroPackageLogo140:
+ metroPackageLogo180:
+ metroPackageLogo240:
+ metroPackageVersion:
+ metroCertificatePath:
+ metroCertificatePassword:
+ metroCertificateSubject:
+ metroCertificateIssuer:
+ metroCertificateNotAfter: 0000000000000000
+ metroApplicationDescription: NoiseProject
+ 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:
+ metroTileShortName:
+ metroCommandLineArgsFile:
+ metroTileShowName: 0
+ metroMediumTileShowName: 0
+ metroLargeTileShowName: 0
+ metroWideTileShowName: 0
+ metroDefaultTileSize: 1
+ metroTileForegroundText: 1
+ metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1}
+ metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1}
+ metroSplashScreenUseBackgroundColor: 0
+ metroCapabilities: {}
+ metroUnprocessedPlugins: []
+ metroCompilationOverrides: 1
+ blackberryDeviceAddress:
+ blackberryDevicePassword:
+ blackberryTokenPath:
+ blackberryTokenExires:
+ blackberryTokenAuthor:
+ blackberryTokenAuthorId:
+ blackberryAuthorId:
+ blackberryCskPassword:
+ blackberrySaveLogPath:
+ blackberryAuthorIdOveride: 0
+ blackberrySharedPermissions: 0
+ blackberryCameraPermissions: 0
+ blackberryGPSPermissions: 0
+ blackberryDeviceIDPermissions: 0
+ blackberryMicrophonePermissions: 0
+ blackberryGamepadSupport: 0
+ blackberryBuildId: 0
+ blackberryLandscapeSplashScreen: {fileID: 0}
+ blackberryPortraitSplashScreen: {fileID: 0}
+ blackberrySquareSplashScreen: {fileID: 0}
+ tizenProductDescription:
+ tizenProductURL:
+ tizenCertificatePath:
+ tizenCertificatePassword:
+ tizenGPSPermissions: 0
+ tizenMicrophonePermissions: 0
+ stvDeviceAddress:
+ firstStreamedLevelWithResources: 0
+ unityRebuildLibraryVersion: 9
+ unityForwardCompatibleVersion: 39
+ unityStandardAssetsVersion: 0
A => ProjectSettings/QualitySettings.asset +132 -0
@@ 0,0 1,132 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!47 &1
+QualitySettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 5
+ m_CurrentQuality: 3
+ m_QualitySettings:
+ - serializedVersion: 2
+ name: Fastest
+ pixelLightCount: 0
+ shadows: 0
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 15
+ blendWeights: 1
+ textureQuality: 1
+ anisotropicTextures: 0
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ vSyncCount: 0
+ lodBias: .300000012
+ maximumLODLevel: 0
+ particleRaycastBudget: 4
+ excludedTargetPlatforms: []
+ - serializedVersion: 2
+ name: Fast
+ pixelLightCount: 0
+ shadows: 0
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 20
+ blendWeights: 2
+ textureQuality: 0
+ anisotropicTextures: 0
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ vSyncCount: 0
+ lodBias: .400000006
+ maximumLODLevel: 0
+ particleRaycastBudget: 16
+ excludedTargetPlatforms: []
+ - serializedVersion: 2
+ name: Simple
+ pixelLightCount: 1
+ shadows: 1
+ shadowResolution: 0
+ shadowProjection: 1
+ shadowCascades: 1
+ shadowDistance: 20
+ blendWeights: 2
+ textureQuality: 0
+ anisotropicTextures: 1
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 0
+ vSyncCount: 0
+ lodBias: .699999988
+ maximumLODLevel: 0
+ particleRaycastBudget: 64
+ excludedTargetPlatforms: []
+ - serializedVersion: 2
+ name: Good
+ pixelLightCount: 2
+ shadows: 2
+ shadowResolution: 1
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 40
+ blendWeights: 2
+ textureQuality: 0
+ anisotropicTextures: 1
+ antiAliasing: 0
+ softParticles: 0
+ softVegetation: 1
+ vSyncCount: 1
+ lodBias: 1
+ maximumLODLevel: 0
+ particleRaycastBudget: 256
+ excludedTargetPlatforms: []
+ - serializedVersion: 2
+ name: Beautiful
+ pixelLightCount: 3
+ shadows: 2
+ shadowResolution: 2
+ shadowProjection: 1
+ shadowCascades: 2
+ shadowDistance: 70
+ blendWeights: 4
+ textureQuality: 0
+ anisotropicTextures: 2
+ antiAliasing: 2
+ softParticles: 1
+ softVegetation: 1
+ vSyncCount: 1
+ lodBias: 1.5
+ maximumLODLevel: 0
+ particleRaycastBudget: 1024
+ excludedTargetPlatforms: []
+ - serializedVersion: 2
+ name: Fantastic
+ pixelLightCount: 4
+ shadows: 2
+ shadowResolution: 2
+ shadowProjection: 1
+ shadowCascades: 4
+ shadowDistance: 150
+ blendWeights: 4
+ textureQuality: 0
+ anisotropicTextures: 2
+ antiAliasing: 2
+ softParticles: 1
+ softVegetation: 1
+ vSyncCount: 1
+ lodBias: 2
+ maximumLODLevel: 0
+ particleRaycastBudget: 4096
+ excludedTargetPlatforms: []
+ m_PerPlatformDefaultQuality:
+ Android: 2
+ FlashPlayer: 3
+ GLES Emulation: 3
+ PS3: 3
+ Standalone: 3
+ Web: 3
+ Wii: 3
+ XBOX360: 3
+ iPhone: 2
A => ProjectSettings/TagManager.asset +43 -0
@@ 0,0 1,43 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!78 &1
+TagManager:
+ tags:
+ -
+ Builtin Layer 0: Default
+ Builtin Layer 1: TransparentFX
+ Builtin Layer 2: Ignore Raycast
+ Builtin Layer 3:
+ Builtin Layer 4: Water
+ Builtin Layer 5: UI
+ Builtin Layer 6:
+ Builtin Layer 7:
+ User Layer 8:
+ User Layer 9:
+ User Layer 10:
+ User Layer 11:
+ User Layer 12:
+ User Layer 13:
+ User Layer 14:
+ User Layer 15:
+ User Layer 16:
+ User Layer 17:
+ User Layer 18:
+ User Layer 19:
+ User Layer 20:
+ User Layer 21:
+ User Layer 22:
+ User Layer 23:
+ User Layer 24:
+ User Layer 25:
+ User Layer 26:
+ User Layer 27:
+ User Layer 28:
+ User Layer 29:
+ User Layer 30:
+ User Layer 31:
+ m_SortingLayers:
+ - name: Default
+ userID: 0
+ uniqueID: 0
+ locked: 0
A => ProjectSettings/TimeManager.asset +8 -0
@@ 0,0 1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!5 &1
+TimeManager:
+ m_ObjectHideFlags: 0
+ Fixed Timestep: .0199999996
+ Maximum Allowed Timestep: .333333343
+ m_TimeScale: 1