ááááşá¸áááşááąáŹááşáážáŻáá˝ááşá áááşáááş ááťáááşá¸áá
áşááŻááŻáážááˇáş áááźáŹáá ááťáááşáááşáááş áááŻáĄááşáááş- Unity áááş áááşá¸áĄáá˝ááş áááŻááşáááŻááş Random áážáááźáŽá¸ áááşá¸áážááˇáşáĄááźááŻááş System.Random áážááááşá áá
áşááťáááşá áááąáŹááťááşáá
áşááŻáá˝ááşá áážá
áşááŻááŻáśá¸áááş áá˝á˛ááźáŹá¸á
á˝áŹáĄááŻááşááŻááşáááŻááşáááş (áááşá¸áááŻáˇáááş ááźááˇáşááźá°á¸áážáŻáá
áşááŻááťážááŹáážááááˇáşááąáŹáşáááşá¸) áá
áşááťáááşá ááťá˝ááşááąáŹáşááśá
áŹá¸áá˛áˇáááŤáááşá
áááŻáˇááąáŹááş áááşá¸áááŻáˇáááş áĄááąá¸á
áááşáĄááťááşáĄáááşááťáŹá¸ááᯠááŹá¸ááááşáá˛áˇá፠- System.Random áááŻáˇ áá°á¸ááźáąáŹááşá¸ááźááşá¸áááş ááźáżááŹáĄáŹá¸ááŻáśá¸ááᯠááźáŻááźááşááąá¸áááşáážááˇáş ááŻáśááąáŹááşááŤáááşá ááᯠááťá˝ááşáŻááşáááŻáˇáááş áááşá¸ááᯠáĄááąá¸á
áááşááźááˇáşáážáŻááźáŽá¸ ááŻááąáááĄáááşá¸áááşááźáŻááŻááşáááş ááŻáśá¸ááźááşáá˛áˇáááş- áááşááťáž "áááşáááŻááşáááş" áááŻáˇáááŻááş ááźááŻáááşáááˇáşáážááşá¸áááŻááşááąáŹ RNG ááťáŹá¸ááźá
áşááźáŽá¸ áááşáááˇáşáĄááŹááᯠáá˝áąá¸ááťááşáááşáááşá¸á áááŻáˇáĄááźááşá áááşá¸áááŻáˇá "áááŻá¸ááŹá¸áážáŻ" áážááˇáş áááşáááşá áá˝á˛áá˝á˛ááąááąáŹ áááşááźááşáá°áááťááşááťáŹá¸ááᯠááťá˝ááşáŻááş áá
áşááźáááşáááşáááŻááźáŽá¸ ááźáŹá¸áááá˛áˇááááş - ááźáąááźáŹááŹá¸ááąáŹ ááááşááťáŹá¸áážááˇáş áĄá
á
áşáĄáážááşááááşááťáŹá¸ááᯠáááşáááŻáˇ áážááŻááşá¸áážááşááźááˇáşááźááŤá
ááŻáˇá
áĄáááŻááťáŻáśá¸áááŹááąá¸áĄá áŽáĄá ááş áááŻáˇáááŻááş RNG áááş áĄáážááşááááşáá˝ááş RNG ááźá áşáááşá
áĄáááşá áááşáááş ááťáááşá¸ááśááŤááş ááťááşáááąááŹááťáŹá¸áážááˇáş áááşá¸áážáŽá¸ááźáŽá¸ááŹá¸ááźá áşááŤá "á ááşá¸áááşááźááşá¸" ááášááááŻáˇ ááťááşááťááşá¸ááťáąáŹáşáá˝áŹá¸áááŻááşááŤáááşá
ááťáááşá¸ááśááŤááşááťáŹá¸ (RN) áááş áĄááşááááŻááŽá áĄáááşá¸áĄááźá áşáĄááťááŻáˇááᯠáĄááŻáśá¸ááźáŻá ááťáááşá¸ (ááááŻááá˛) ááŻááşáááşá¸á ááşááᯠáĄááŻáśá¸ááźáŻá ááŻááşááąá¸áááˇáş ááśááŤááşááťáŹá¸ á áĄáá˝á˛áááŻááşáá áşááŻááźá áşáááşá áááŻáááŻáááşáážáŹá á¤áĄááŹááťáŹá¸áááş áááşáááˇáşáááşášááťáŹáĽáááąááźááˇáşááťáž áĄááźááşáĄáážááşáááşá ááşáážáŻááážáááąáŹ áĄá áŽáĄá áĽáşáá áşááŻááźá áşáááş - áááşá¸áááŻáˇáá˝ááş áĄááźáąáŹááşá¸áááŹá¸áážááˇáş áĄááťááŻá¸áááşááąáŹááşáážáŻ áááşá ááşáážáŻááážáááŤá
ááťáááşá¸ááśááŤááşááᯠáááşááŽá¸ááąá¸áááˇáşáĄááŹááᯠRandom Number Generator (RNG) ááŻááąáŤáşáááşá áĄááŹáĄáŹá¸ááŻáśá¸áááş áá°ááááşá¸ááŻáááşáááąáŹáşáááşá¸ ááťá˝ááşáŻááşáááŻáˇáááş ááŽáĄááŻááŽááž áááşáá˝áąáˇáááŻáˇ áá˝áąáˇáá˝áŹá¸ááŤáá áááşá¸áá˛áˇáááŻáˇ sequence áááŻáááşááŽá¸áááşáĄáá˝ááş software algorithm áá áşááŻááᯠáĄááąáŹááşáĄáááşááąáŤáşáááşáážáŹ áá˝ááşáá°áááşáááŻááşá
áĄááźáąáŹááşá¸áááşá¸áážáŹ ááąááşááŽáá°ááŻáśá¸ áĄáŽáááşááá˝ááşá¸áá áşáá ášá ááşá¸ááťáŹá¸áá˝ááş áááŻáá˛áˇáááŻáˇ ááááşá¸áááŹááážáááźááşá¸ááźáąáŹááˇáş ááźá áşáááşá áááşá¸ááážááá˛á ááťáááşá¸ááśááŤááşááťáŹá¸áááş ááťáááşá¸áĄááźá áşááž áááşá á˛áá˝áŹá¸áᏠáááşá¸áááŻáˇá ááťááşáááąááŹáááş áááşáážáŹá¸á á˝áŹáááşáážááşááŹá¸ááąáŹ áĄááźáąáŹááşá¸ááźááťááşááťáŹá¸á ááŹáááşááŻááşááąáŹááşáážáŻáá áşááŻáĄááźá áşáááŻáˇ ááźáąáŹááşá¸áá˛áá˝áŹá¸áááşá IT áááşáááşáážá áĄáá°á¸ááźáŻáážáŻááťáŹá¸á á˝áŹáĄáá˝ááşá á¤áááşáážáŹ ááąá¸áááşááąáŹááźáżáᏠ(áĽáááŹá ááťážááŻáˇáážááşá áŹáááŻááşááźááşá¸) ááźá áşááąáŹáşáááşá¸ áĄááźáŹá¸áá°ááťáŹá¸áĄáá˝ááş ááŻáśá¸ááááşááśáááŻááşááąáŹ áĄááźáąáá áşááŻáážáááŤáááşá
áĄáážááşááááş ááťáááşá¸ááśááŤááşááťáŹá¸áááŻááşááąáŹáşáááşá¸ áááşá¸áááŻáˇáážááˇáş áĄááŽá¸á ááşááŻáśá¸ - Pseudo-random ááśááŤááşááťáŹá¸ (PRN) ááŻááąáŤáşááąáŹ áĄááŽá¸á ááşááŻáśá¸ ááźááşááŹáááˇáş algorithm áá áşááŻááᯠááąá¸ááŹá¸áááş áááŻáĄááşááŤáááşá á¤ááá ášá áááşáá˝ááş algorithm ááᯠpseudorandom ááśááŤááşááťááşáááąáᏠ(PRNG) ááŻááąáŤáşáááşá
PRNG áááşááŽá¸áááşáĄáá˝ááş áá˝áąá¸ááťááşá ááŹááťáŹá¸á á˝áŹáážáááąáŹáşáááşá¸ áĄáąáŹááşááŤáááŻáˇáááş áá°áááŻááşá¸áĄáá˝ááş áááşáááŻááşááááˇáşáááş-
- áááŹá áááŚá¸áĄá
ááźáŻáááş áááŻáĄááşáááşá
PRNG áá˝ááş entropy ááĄáááşá¸áĄááźá áşááážáááąáŹááźáąáŹááˇáşáááşá¸áááŻáĄááŻáśá¸áááźáŻááŽáááŚá¸áĄááźáąáĄááąáá áşááŻááąá¸áááŤáááşá áááşá¸ááᯠááśááŤááş (áááŻáˇáááŻááş vector) áĄááźá áş áááşáážááşááŹá¸ááźáŽá¸ ááťááŻá¸á áąáˇ (ááťáááşá¸ááťááŻá¸á áąáˇ) ááŻááąáŤáşáááşá áááźáŹááá ááááŻáááşááŹááŹááŽááąáŹááşáᏠáááŻáˇáááŻááş á áá áşáĄááťáááşáážááˇáşááŽááťážááąáŹ ááááşá¸ááťáŹá¸ááᯠáĄá áąáˇáá áşááŻáĄááźá áş áĄááŻáśá¸ááźáŻáááşá
- áá
áşáááşáááşá¸ ááťááŻá¸áá˝áŹá¸áááŻááşááźááşá¸á
PRNG áááş ááŻáśá¸ááĄááŻáśá¸áĄááźááşááźá áşáááşá áááŻáˇááźáąáŹááˇáş áááŚá¸áĄá áá˝ááş áááşáážááşááŹá¸ááąáŹ ááťááŻá¸á áąáˇáááş ááśááŤááşááťáŹá¸á áĄááŹáááş sequence áá áşááŻááŻáśá¸ááᯠáá°á¸ááźáŹá¸á á˝áŹ ááŻáśá¸ááźááşáááşá áááŻáááŻáááşáážáŹ áá°ááŽááąáŹááťááŻá¸á áąáˇááźááˇáş ááŽá¸ááźáŹá¸ PRNG (áá˝á˛ááźáŹá¸ááźáŹá¸ááŹá¸ááąáŹáĄááťáááşááťáŹá¸áá˝ááşá ááá°ááŽááąáŹááááŻááááşááťáŹá¸áá˝ááşá ááá°ááŽááąáŹá ááşáá ášá ááşá¸ááťáŹá¸áá˝ááş) áá°ááŽááąáŹáĄá áŽáĄá áĽáşááᯠááŻááşááąá¸áááşáᯠáááŻáááŻáááşá
PRNG ááᯠááąáŹáşááźáááˇáş ááźá
áşáááŻááşááźáą ááźááˇáşááźá°á¸áážáŻáááŻáááşá¸ áááááş áááŻáĄááşáááş - áááşá¸áááş áááşáááˇáş ááśááŤááşááťáŹá¸ ááŻááşááąá¸áááş áážááˇáş ááźá
áşáááŻááşááźáą áááşááťážáážááááşááᯠáááááş áááŻáĄááşááŤáááşá áĄááťáŹá¸á
áŻáážáŹ áááşá¸áááş ááŻáśáážááşááźááˇáşááźá°á¸áážáŻ áááŻáˇáááŻááş áá
áşááźáąá¸áᎠááźááˇáşááźá°á¸áážáŻááźá
áşáááşá
ááŻáśáážááş ááźááˇáşááźá°á¸ááźááşá¸ (áááş) áážááˇáş áá°ááŽááąáŹááşá¸ ááźááˇáşááźá°á¸ááźááşá¸ (ááŹ)á
ááťá˝ááşáŻááşáááŻáˇáá˝ááş áĄáááş 24 ááŻáśá¸ááŤááąáŹ áááŹá¸ááťážáááąáŹ ááąáášááŹáá áşááŻáážááááş áááŻááźááŤá ááŻáˇá áááşá¸áááŻáá áşááŤáá áá áşááŻááážááááşááźá áşáááŻááşááźáąáááş 1/24 áážááˇáş ááŽááťážááááˇáşáááş (áĄááźáŹá¸ááśááŤááşáá áşááŻááááŻááşááźáąáážááˇáş áĄáá°áá°áááşááźá áşáááş)á áĄááźáááşááąáŤááşá¸ááťáŹá¸á á˝áŹ áá áşáááŻááşááźáŽá¸ ááááşááťáŹá¸ááᯠáážááşáááşá¸áááşááŤáá áĄá á˝ááşá¸ááťáŹá¸áĄáŹá¸ááŻáśá¸áááş áááˇáşáážááşá¸ááźáąáĄáŹá¸ááźááˇáş áá°ááŽááąáŹááźáááşáážáŻááşá¸ááźááˇáş ááźáŻááşááťáá˝áŹá¸áááşááᯠáááááźáŻááááŤááááˇáşáááşá áĄááźáąááśáĄáŹá¸ááźááˇáşá á¤áĄááąááᯠáá°ááŽááąáŹááşá¸ááźááˇáşááźá°á¸áážáŻááźááˇáş RNG áᯠáá°ááááŻááşáááşá
ááŽáĄááşá áŹááŻáśá¸ áá ááŻáśá¸ááᯠáá áşááŤáááşá¸áá áşááźáŽá¸ á áŻá áŻááąáŤááşá¸ áĄáážááşáá˝áąááᯠááąáá˝ááşáááş ááŹááźá áşááá˛á ááŽáá˝ážááşáážáŻááᯠááááşá¸ááááşá¸áááŻááşááŤáˇáááŹá¸á ááážá áĄááťáŹá¸á áŻáážáŹá áááŹááááş 10 áážááşá áááŻáááŻáááşáážáŹ áĄááťááŻáˇááąáŹ ááťááşá¸ááťážáááşáááŻá¸áážááˇáş ááŽá¸á ááşáááşááźá áşáááşá ááááşáĄááąáážááˇáşá áá áşáááťááŽáá˝ááşáááş áĄááŹáááşááááşááᯠáĄááźááşá¸ááťááşá¸ áááˇáşáážááşá¸áááŻááşáááşá
áĄááźáąáŹááşá¸ááźááťááşáážáŹ ááťááşá¸ááťážááážááşááᯠááá°áááş ááąáŤááşá¸á ááşáĄááąáĄáá˝ááş áĄááťáŹá¸ááŻáśá¸ ááąáŤááşá¸á ááşáážáŻááťáŹá¸ áážáááąááąáŹááźáąáŹááˇáş ááźá áşáááşá áááşá¸áážááˇáş ááąá¸ááąá ááąáŤááşá¸á ááşáážáŻ áááşá¸ááŤá¸ááąááą - áážááˇáş ááťáąáŹáşááŽá á˝áŹ ááŻáśá¸áážáŻáśá¸áážáŻ ááźá áşáááŻááşááźáą áááşá¸ááŤá¸ááąááźá áşáááşá á¤ááąááŹááᯠááźááşááąáŹááşááááŤáá áááşá¸áááş ááąáŤááşá¸ááąáŹááşá¸ááŻáśááášááŹááşáážááˇáş áááşáá°áááşá áááŻáˇááźáąáŹááˇáşá áĄááťááŻáˇááąáŹáĄááťáááşáá˝á˛ááźááşá¸ááźááˇáşá áĄááşá áŹááŻáśá¸ áá ááŻááŤááąáŹá áá áşááᯠááŻáśáážááşááźááˇáşááźá°á¸áážáŻááźááˇáş RNG ááŻááąáŤáşáááŻáááŻááşáááşá
ááąáŹááşáĽáááŹáá
áşááŻá ááąááŹááşááąáŤáşáážáŹ ááŽáá
áşááźáááşáᏠáá
áşáážááşááᯠáá
áşááŹá ááąáááşáááŹá¸áááş ááááşááąáŤáşáá˝ááşááźáááŹá¸áááˇáş ááśááŤááşáĄáá˝á˛ (xá y) áááŻááŻááşááąá¸áááˇáş RNG ááźá
áşááááˇáşáááşá
áááşáááşáážá option áááş áááşáá˝áąáˇáááážááˇáş áááŻáááŻááŽá¸á
ááşááźáąáŹááşá¸ áááąáŹáá°ááŤáááş - áááşá¸áááş ááŻáśáážááşááźááˇáşááźá°á¸áážáŻáážáááąáŹ RNG ááźá
áşáááşá ááŤááąáááˇáş áážáąáŹááşáááşá¸ááąáá˛áˇááąáŹááşá¸áááşáážáŹ ááźááşáá˝áąááᯠááźááˇáşááźá˛ááťááşáááşáááŻáááşááąáŹáˇ RNG ááᯠáá
áşááźáąá¸áᎠááźááˇáşááąáážáŻáá˛áˇáĄáá° ááážáááŹá¸áá˛áˇ áážááşáááşáá˛áˇáá˝áąá¸ááťááşáážáŻá áááŻáááˇáşááąáŹáşááŤáááşá ááąááŻááťáĄáŹá¸ááźááˇáş áááşáá˛áá˝ááşáážáááąáŹ áĄááŻááşááąáŤáşáá°áááşá ááŽá¸á
ááşááᯠáá˝áąá¸ááťááşááŤá
ááᯠPNG áĄá áŽáĄá áĽáşá entropy áĄááźáąáŹááşá¸ááźáąáŹááźááŤá ááŻáˇá áĽáááŹáĄáŹá¸ááźááˇáşá á¤áá˛áˇáááŻáˇááąáŹáĄá ááźáŻááąáŹ sequence áá áşááŻáážááááşá
ááá ááá ááá ááá ááá ááá áá ááá ááá áá ááá áá á á áá ááá ááá ááá ááá áá á ááá ááá ááá ááá ááá ááá á áá ááá á áá ááá áá á áá á ááá ááá ááá ááá ááá ááá ááá ááá ááá ááá á á á áá ááá ááá ááá áá ááá ááá ááá áá ...
ááááá
áşááťááşáá˝ááş á¤ááśááŤááşááťáŹá¸áááş áááşááťáž ááťáááşá¸ááźá
áşááááşá¸á ááźááˇáşááźá°á¸áážáŻááᯠá
á
áşááąá¸ááźááşá¸ááźááˇáş á
áááşááźááŤá
ááŻáˇá
áááşá¸áááş áá°ááŽááąáŹááşá¸áážááˇáş ááŽá¸á
ááşááąáŹáşáááşá¸ ááááşá¸áážá
áşááŻáśá¸á áĄá
áŽáĄá
áĽáşááᯠáááşáážáŻááźáŽá¸ ááąááŹááşááąáŤáşáá˝ááş ááźááááááşááťáŹá¸áĄááźá
áş áĄáááášááŹááşááźááşáááŻááŤá á¤áĄááŹááᯠáááşááážááááşááźá
áşáááşá
ááŻáśá
áśááťáŹá¸ááᯠáážááşá¸áážááşá¸áááşá¸áááşá¸ ááźááşáááŻááşááŹáááşá áĄá
áŽáĄá
áĽáşáážá ááąááŹááťáŹá¸ááᯠááááťááąáŹáááşá¸ááźááˇáş á
áŽá
áĽáşááŹá¸ááąáŹááźáąáŹááˇáş (áááŻáááŻáááşáážáŹ áááşá¸áá˝ááş áĄááşááááŻááŽáááşá¸ááąáŹ)á áááşá¸áááş áĄáá˝ááş "áááşáááŻááşáážáŻ" ááᯠááźá
áşááąáŤáşá
áąáááŻááşáááşá áĄáááşá¸ááŻáśá¸áĄáŹá¸ááźááˇáşá áááŻáá˛áˇáááŻáˇááąáŹ PRNG áááş ááąááŹááşááąáŤáşáá˝ááş ááźááááááşááťáŹá¸ááŻááşááąá¸áááşáĄáá˝ááş áĄáá˝ááşáááˇáşááťáąáŹáşáážáŻááážáááŤá
ááąáŹááşáá áşááťááŻá¸-
ááá ááá ááá ááá ááá ááá áá ááá ááá áá ááá áá á á áá ááá ááá ááá ááá áá á ááá ááá ááá ááá ááá ááá á áá ááá á áá ááá áá á áá á ááá ááá ááá ááá ááá ááá ááá ááá ááá ááá á á á áá ááá ááá ááá áá ááá ááá ááá áá ...
ááąááŹááşááąáŤáşáážáŹááąáŹááş ááŽáážáŹ áĄáŹá¸ááŻáśá¸áĄáááşááźáąááąááŻáśááááşá
áĄááśáĄáááŻá¸áĄááťááşááᯠááźááˇáşááĄáąáŹááş (áá
áşááźáááşááťážááş ááááşá¸ááŻáśá¸ááŻáśá¸áááşááŤ)á
ááąáŹááşááááş ááŻáśá
áśááťáŹá¸á ááąá¸áááşááźááşááŻáśááąáŹáşáážáŻááᯠáááşááąáŹááşáááş áááźá
áşáááŻááşááąáŹáˇááŤá áááŻáˇááąáŹáş ááŻáśá
áśááťáŹá¸áááş á¤áĄáááŻááşá¸áĄááŹáážááˇáş áááŻááźáŽá¸ááąáŹááŻáśááťáŹá¸áá˝ááş áážáááąáááŻááşáááşá
PRNG ááťáŹá¸ááąáŤáşáá˝ááş áĄááźááşá¸áááşááŻáśá¸ áááŻáĄááşááťááşááťáŹá¸ááᯠáááşáážááşáááˇáş cryptography áá˝ááşá áááŻáááŻáˇááąáŹ áĄááźáąáĄááąáááş ááŻáśá¸ááááşáááśáááŻááşááŤá áááŻáˇááźáąáŹááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻáĄááťáááşáá˝ááş áááááąáŹáˇáᲠáááşá¸áááŻáˇá áĄáááşáĄáá˝áąá¸ááᯠáĄáá˛ááźááşáááş áĄáá°á¸ algorithms ááťáŹá¸ááᯠááŽáá˝ááşááŹá¸ááŤáááşá ááąáŤááşá¸á ááşá ááťááşááźáąáŹááźáŽá¸ ááŽá¸ááźáŹá¸ááąáŹááşá¸ááŤá¸áá˛áˇ áááŻááşáááşááŤáááşá
á ááşá¸áááşááźááşá¸
áá áşááŻááŻááᯠááąááťáŹááááááş áĄá˛ááŤááᯠáááşáááŻááŻááşááąáŹááşááá˛á áááşááŽá¸áá˝ááŻááˇáşá áá˝ááˇáşááźáŻááŹá¸áᲠááááááş áááşá¸ááźááşáá°á¸ááᏠáááşáááŹá¸á áĄááťááŻá¸áááşááťáŹá¸ áá˝á˛ááźáŹá¸áááŻááşáááşá
Unity áá˝ááş ááŹáááşáááŻá¸ááźááˇáş ááťáąáŹáşááźáŹá¸ááąáŹ ááźáŻáśááŹááťáááşá¸ááźááşá¸áĄáá˝ááş áĄááŹá¸áá°áááşááźá áşáááşá á áŹáá˝ááşá áŹáááşá¸áááş áááŻáĄááşááąáŹáĄááąá¸á áááşáĄááťááşáĄáááşááťáŹá¸ááᯠááąáŹáşááźááŤá ááąáŹááşá¸áá˝ááşááąáŹáşáááşá¸ ááąáŹááşá¸ááŤá¸áĄá áá˝ááş ááąáŹáşááźááŹá¸ááąáŹ ááŹááşáááşá¸áááş áááŻááťááşááąáŹ áĄááąá¸á áááşáĄááťááşááťáŹá¸ ááážáááźááşá¸ááźáąáŹááˇáş áĄáááĄááť ááźá áşáá˝áŹá¸ááŤáááşá
ááááááŹá áĄááŻááşááŻááşááŻáśááᯠáááşáááááŤáá áááşá¸ááᯠáážááşáááşá á˝áŹ áĄááŻáśá¸ááźáŻáááŻááşáááş áááŻááşááŤá ááąááŻááťáĄáŹá¸ááźááˇáşá ááźááˇáşááźá°á¸áážáŻáážááˇáşáááşáááşá áĄáááşá¸ááŻáśá¸ááąááťáŹá áąáááş ááąáŹááşááŻáśá¸áá˝ááş á á áşááąá¸ááźáŽá¸ á ááşá¸áááşáážáŻáá áşááŻááŻááşááąáŹááşáááş áĄááťáááşááťááąáŹááşááŹááźáŽááźá áşáááşá
ááźáąáážááşá¸ááťááşáááş áááŻá¸áážááşá¸ááźáŽá¸ ááááąáŹááşáááş - á áŹáááşá¸áááŹá¸ááťáŹá¸ááᯠá áŻááąáŹááşá¸ááŤá áááşáážááşá¸ááťááşááąááŹááá°ááźáŽá¸ ááááşááťáŹá¸ááᯠááźááˇáşáážáŻááŤá
ááŹááŹáááş
Unity áá˝ááş ááťáááşá¸ááśááŤááşááťáŹá¸ááŻááşááŻááşáááş áááşá¸áááşá¸ááťáŹá¸á á˝áŹáážááááş - ááťá˝ááşáŻááşáááŻáˇááŤá¸ááŻááᯠá ááşá¸áááşáá˛áˇáááşá
- System.Random.Next()á ááąá¸ááŹá¸ááąáŹáááşáááŻá¸ááťáŹá¸áĄáá˝áŹáĄááąá¸áá˝ááş ááááşá¸ááźááˇáşááťáŹá¸áááŻááŻááşááąá¸áááşá
- System.Random.NextDouble()á [0; á)á
- UnityEngine.Random.Range()á ááąá¸ááŹá¸ááąáŹáááşáááŻá¸ááťáŹá¸áĄáá˝áŹáĄááąá¸áá˝ááş ááááťááąáŹááśááŤááşááťáŹá¸ (floats) áá áşááŻáááşá¸áááŻááŻááşááąá¸áááşá
- UnityEngine.Random.valueá [0; á)á
- Unity.Mathematics.Random.NextFloat(). Unity.Mathematics á áŹááźááˇáşáááŻááşáĄáá áşá áá áşá áááşáá áşáááŻááşá¸á ááąá¸ááŹá¸ááąáŹáááşáááŻá¸ááťáŹá¸áĄáá˝áŹáĄááąá¸áá˝ááş ááááťááąáŹááśááŤááşááťáŹá¸ (floats) áá áşááŻáááşá¸áááŻááŻááşááąá¸áááşá
UnityEngine.Random.value áážáá˝á˛á áĄááźáŹá¸á áŹáá˝ááşá áŹáááşá¸ááťáŹá¸áá˝ááş ááąááŹáááŻááşá¸áááŻáááŻáá˝ááş áá°ááŽááąáŹááźááˇáşááąáážáŻááᯠáááşáážááşááŹá¸áááş (ááźááˇáşááźá°á¸áážáŻááᯠááááşáážááşááŹá¸ááąáŹáşáááşá¸ UnityEngine.Random.Range() áážááˇáş áá°ááŽááąáŹ áá°ááŽáážáŻááźááˇáş ááťážáąáŹáşáážááşá¸ááŹá¸áááş) áážááˇáş Unity.Mathematics.Random .NextFloat() (áĄááźáąááśáá˝ááş xorshift algorithm ááźá áşáááşá áááŻáááŻáááşáážáŹ áááşáááş áá°ááŽááąáŹááşá¸ááźááˇáşááźá°á¸áážáŻáá áşááŻáĄáá˝ááş áááşááśá áąáŹááˇáşáááŻááşá¸áááş áááŻáĄááşáááşáᯠáááŻáááŻáááş)á
ááŻáśáážááşáĄáŹá¸ááźááˇáşá ááťážáąáŹáşáááˇáşááŹá¸áááˇáşááááşááťáŹá¸ááᯠá áŹáá˝ááşá áŹáááşá¸áá˝ááş áááşáážááşááŹá¸áááˇáşáĄáááŻááşá¸ ááźáŻááŻááşááŹá¸áááşá
á ááşáážáŻáááŹ
áááşááźáááşá¸áááşá¸áá áşááŻá áŽááᯠáĄááŻáśá¸ááźáŻá ááťáááşá¸ááśááŤááşááťáŹá¸ááᯠáááşáááŻááşááŻááşááąá¸áááˇáş áĄáááŽááąá¸áážááşá¸áááşáá áşááŻááᯠááťá˝ááşáŻááşáááŻáˇááąá¸ááŹá¸áá˛áˇááźáŽá¸ ááááşááťáŹá¸ááᯠáááşáááşááŻááşááąáŹááşáááşáĄáá˝ááş ááááşá¸áááşá¸ááŹá¸áááşá
áĄá
áŽáĄá
áĽáşáá
áşááŻá
áŽá áĄáážááşáááş ááśááŤááş 100 ááźá
áşáááşá
ááťáááşá¸ááśááŤááşááťáŹá¸á áĄáá˝áŹáĄááąá¸áážáŹ [0, 100) ááźá
áşáááşá
ááąááŹááťáŹá¸ááᯠáá áşáážááşááááşááąáŹááşá¸áĄááťáŹá¸áĄááźáŹá¸ááž á áŻááąáŹááşá¸áá˛áˇáááş-
- Windows áááŻ
â Unity v2018.3.14f1á áááşá¸ááźááşááŻááşá Monoá .NET Standard 2.0 - MacOS
â Unity v2018.3.14f1á áááşá¸ááźááşááŻááşá Monoá .NET Standard 2.0
â Unity v5.6.4p4á áááşá¸ááźááşááŻááşá Monoá .NET Standard 2.0 - áĄááşá¸ááá˝ááŻááş
â Unity v2018.3.14f1á á ááşáá áşááŻá áŽáááşááąáŹááşáážáŻá Monoá .NET Standard 2.0 - iOS áááŻ
â Unity v2018.3.14f1á á ááşáá áşááŻá áŽáááşááąáŹááşáážáŻá il2cppá .NET Standard 2.0
áĄááąáŹááşáĄáááşááąáŹáşáážáŻ
ááťáááşá¸ááśááŤááşááťáŹá¸ááŻááşááŻááşáááş ááťá˝ááşáŻááşáááŻáˇáá˝ááş ááá°ááŽááąáŹáááşá¸áááşá¸ááťáŹá¸á á˝áŹáážááááşá áááşá¸áááŻáˇáá áşááŻá áŽáĄáá˝ááşá ááśáˇáááŻá¸ááąá¸áááˇáşáááˇáş ááŽá¸ááźáŹá¸ wrapper class ááᯠááąá¸ááŤáááşá
- áááşáááŻá¸ááťáŹá¸ [min/max) áĄáá˝áŹáĄááąá¸ááᯠáááşáážááşáááş ááźá áşáááŻááşááźáąáážááááşá constructor ááž áá áşáááˇáş áááşáážááşáááşááźá áşáááşá
- MF ááᯠááźááşááąá¸áááˇáşáááşá¸áááşá¸á áááŻááźáŽá¸ ááąááŻááť áĄáŹá¸ááźááˇáş float ááᯠáĄááťááŻá¸áĄá áŹá¸áĄááźá áş áá˝áąá¸ááźááŤá ááŻáˇá
- ááááşááťáŹá¸ááᯠáĄáážááşáĄááŹá¸ááźáŻááŻááşáááş ááťááŻá¸áááşáááşá¸áááşá¸áĄáááşá áĄáááşááźáąá áąáááşá áĄáááşá¸ááĄáááşáĄááźááˇáşáĄá áŻáś + MF áááŻááŻááşááŻááşáááşáĄááŻáśá¸ááźáŻáááˇáşáááşá¸áááşá¸áĄáááşááᯠáááşáááŻá¸áĄááźá áş ááťá˝ááşáŻááşáááŻáˇááźááşááąá¸ááŤáááşá
áŚá¸á á˝áŹá IRandomGenerator interface ááźááˇáşáááŻááşá áŹá¸ááźáŻáááˇáş abstraction áá áşááŻáááŻááźáąááźáŹááźááŤá ááŻáˇá
namespace RandomDistribution
{
public interface IRandomGenerator
{
string Name { get; }
float Generate();
}
}
System.Random.Next() ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸
á¤áááşá¸áááşá¸áááş áááˇáşáĄáŹá¸ áááşáááŻá¸ááťáŹá¸áĄáá˝áŹáĄááąá¸ááᯠáááşáážááşáá˝ááˇáşááźáŻááąáŹáşáááşá¸ áááşá¸áááş ááááşá¸ááźááˇáşááťáŹá¸ááᯠááźááşááąá¸ááąáŹáşáááşá¸ float ááťáŹá¸ááᯠáááŻáĄááşááŤáááşá ááááşá¸ááźááˇáşááᯠfloat áĄááźá áş áááŻá¸áááŻá¸áážááşá¸áážááşá¸ áĄáááášááŹááşáá˝ááˇáşáááŻáááŻááşáááşá áááŻáˇáááŻááş áĄáááŻááşá¸áĄááŹá áĄáááŻááşá¸áĄááŹááťáŹá¸á á˝áŹááźááˇáş áááşáááŻá¸ááťáŹá¸ááᯠááťá˛áˇáá˝ááşáááŻááşááźáŽá¸ áááşá¸áááŻáˇááᯠáĄáááşáĄáááşáááşá¸á áŹá¸ ááťááŻá¸áááşáá áşááŻá áŽáážááˇáş ááťáąáŹáşááźáąá¸ááąá¸áááŻááşáááşá ááááşáááş ááááťááąáŹáĄá áŽáĄá áĽáşááźááˇáş ááŻáśááąáĄáážááşáá˛áˇáááŻáˇ áá áşááŻááŻááźá áşááááˇáşáááşá áĄá á áşáĄáážááş float áááşáááŻá¸áážááˇáş áááŻááŽá¸á ááşááąáŹááźáąáŹááˇáş á¤áá˝áąá¸ááťááşáážáŻááᯠááťá˝ááşáŻááşáááŻáˇ áĄááŻáśá¸ááźáŻááŤáááşá
using System;
namespace RandomDistribution
{
public class SystemIntegerRandomGenerator : IRandomGenerator
{
private const int DefaultFactor = 100000;
private readonly Random _generator = new Random();
private readonly int _min;
private readonly int _max;
private readonly int _factor;
public string Name => "System.Random.Next()";
public SystemIntegerRandomGenerator(float min, float max, int factor = DefaultFactor)
{
_min = (int)min * factor;
_max = (int)max * factor;
_factor = factor;
}
public float Generate() => (float)_generator.Next(_min, _max) / _factor;
}
}
System.Random.NextDouble() ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸
á¤áá˝ááş ááŻáśááąáĄáá˝áŹáĄááąá¸áááşáááŻá¸ááťáŹá¸ [0; á)á áááşá¸ááᯠconstructor áá˝ááşáááşáážááşááŹá¸áááˇáşáá áşááŻááąáŤáşáá˝ááş áááąáŹááťááşááŻááşáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻá¸áážááşá¸ááąáŹááááşá¸áááşášááťáŹáááŻáĄááŻáśá¸ááźáŻáááş- X * (max â min) + min á
using System;
namespace RandomDistribution
{
public class SystemDoubleRandomGenerator : IRandomGenerator
{
private readonly Random _generator = new Random();
private readonly double _factor;
private readonly float _min;
public string Name => "System.Random.NextDouble()";
public SystemDoubleRandomGenerator(float min, float max)
{
_factor = max - min;
_min = min;
}
public float Generate() => (float)(_generator.NextDouble() * _factor) + _min;
}
}
UnityEngine.Random.Range() ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸
UnityEngine.Random static class á á¤áááşá¸áááşá¸áááş áááˇáşáĄáŹá¸ áááşáááŻá¸ááťáŹá¸ááᯠáĄáá˝áŹáĄááąá¸áá áşááŻáááşáážááşááźáŽá¸ float áĄááťááŻá¸áĄá áŹá¸ááᯠááźááşááąá¸áááŻááşáááşá ááąáŹááşáááş ááźáąáŹááşá¸áá˛áážáŻááťáŹá¸ ááźáŻááŻááşáááş ááááŻáĄááşááŤá
using UnityEngine;
namespace RandomDistribution
{
public class UnityRandomRangeGenerator : IRandomGenerator
{
private readonly float _min;
private readonly float _max;
public string Name => "UnityEngine.Random.Range()";
public UnityRandomRangeGenerator(float min, float max)
{
_min = min;
_max = max;
}
public float Generate() => Random.Range(_min, _max);
}
}
UnityEngine.Random.value ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á
ááŻáśááąáĄáááşá¸áĄá áŹá¸ UnityEngine.Random ááááşáááŻá¸áááŻááşáááŻááşáážáŻáááş ááŻáśááąáááşáááŻá¸ááťáŹá¸ [0; á)á System.Random.NextDouble() ááᯠáĄááąáŹááşáĄáááş ááąáŹáşáááˇáşáĄá፠ááąá¸ááŹá¸áááˇáş áĄáááŻááşá¸áĄááźáŹá¸áá áşááŻáá˝ááş áááşá¸ááᯠáááąáŹááťááşááŻááşááźááŤá ááŻáˇá
using UnityEngine;
namespace RandomDistribution
{
public class UnityRandomValueGenerator : IRandomGenerator
{
private readonly float _factor;
private readonly float _min;
public string Name => "UnityEngine.Random.value";
public UnityRandomValueGenerator(float min, float max)
{
_factor = max - min;
_min = min;
}
public float Generate() => (float)(Random.value * _factor) + _min;
}
}
Unity.Mathematics.Random.NextFloat() ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸
Unity.Mathematics.Random class á NextFloat() method áááş float áĄááťááŻá¸áĄá áŹá¸á floating point ááᯠreturn ááŻááşááźáŽá¸ values ââáĄáááŻááşá¸áĄááźáŹá¸ááᯠáááşáážááşáááŻááşá áąááŤáááşá áá áşááŻáááşá¸ááąáŹ áá˝á˛ááźáŹá¸ááťááşáážáŹ Unity.Mathematics.Random á áĽáááŹáá áşááŻá áŽááᯠááťááŻá¸á áąáˇáĄááťááŻáˇááźááˇáş áĄá ááźáŻááááşááźá áşááźáŽá¸á á¤áááşá¸ááźááˇáş áááşááŤááá˛áᲠsequence ááťáŹá¸ááᯠááŻááşááąá¸ááźááşá¸ááᯠáážáąáŹááşááźááşááŤáááşá
using Unity.Mathematics;
namespace RandomDistribution
{
public class UnityMathematicsRandomValueGenerator : IRandomGenerator
{
private Random _generator;
private readonly float _min;
private readonly float _max;
public string Name => "Unity.Mathematics.Random.NextFloat()";
public UnityMathematicsRandomValueGenerator(float min, float max)
{
_min = min;
_max = max;
_generator = new Random();
_generator.InitState(unchecked((uint)System.DateTime.Now.Ticks));
}
public float Generate() => _generator.NextFloat(_min, _max);
}
}
MainController ááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á
IRandomGenerator ááĄááąáŹááşáĄáááşááąáŹáşáážáŻáĄááťáŹá¸áĄááźáŹá¸áĄáááşáááˇáşááźá áşááąááŤááźáŽá áááŻáˇááąáŹááşá áááşááŻááşááąáŹááşáááşáĄáá˝ááş sequences ááťáŹá¸áááşááŽá¸áááşáážááˇáş ááážáááŹááąáŹ dataset ááᯠááááşá¸áááşá¸áááşáááŻáĄááşáááşá áááşá¸áááŻááŻááşááąáŹááşáááşá ááťá˝ááşáŻááşáááŻáˇáááş Unity áá˝ááş ááźááşáá˝ááşá¸áá áşááŻáážááˇáş MainController script áĄááąá¸áá áşááŻááᯠáááşááŽá¸áááşááźá áşááźáŽá¸á áááŻáĄááşáááˇáşáĄááŻááşáĄáŹá¸ááŻáśá¸ááᯠááŻááşááąáŹááşáááşááźá áşááźáŽá¸ UI áážááˇáşáĄááźááşáĄáážááşáááşááśááąá¸áĄáá˝ááş áá áşááťáááşáááşá¸áá˝ááş ááŹáááşáážááááşááźá áşáááşá
ááąááŹáĄáá˝á˛á áĄáá˝ááşáĄá áŹá¸áážááˇáş MF áááşáááŻá¸ááťáŹá¸á áĄáá˝áŹáĄááąá¸ááᯠáááşáážááşááźááˇáşááĄáąáŹááşá ááźááşáááşáááşáážááşááŹá¸ááąáŹ ááťááşáááąááŹááťáŹá¸á áĄáááşá¸áĄááťááşá¸áá áşááŻáážááˇáş áĄááŻááşááŻááşáááş áĄáááşáááˇáşááźá áşááąááąáŹ áááşá¸áááşá¸áá áşááŻáááŻáááşá¸ ááá°áááŻááşááŤá
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
private const int DefaultDatasetSize = 100000;
public float MinValue = 0f;
public float MaxValue = 100f;
...
private IRandomGenerator[] CreateRandomGenerators()
{
return new IRandomGenerator[]
{
new SystemIntegerRandomGenerator(MinValue, MaxValue),
new SystemDoubleRandomGenerator(MinValue, MaxValue),
new UnityRandomRangeGenerator(MinValue, MaxValue),
new UnityRandomValueGenerator(MinValue, MaxValue),
new UnityMathematicsRandomValueGenerator(MinValue, MaxValue)
};
}
...
}
}
áĄáᯠdataset áá áşááŻáááşááŽá¸ááźááˇáşááĄáąáŹááşá á¤ááá ášá áá˝ááşá ááąááŹááŻááşááŻááşááźááşá¸áááş ááááşááťáŹá¸ááᯠá áŹááŹá¸á áŽá¸ááźáąáŹááşá¸ (csv ááąáŹáşáááşááźááˇáş) áááŻáˇ áážááşáááşá¸áááşááźááşá¸áážááˇáşáĄáá° ááąáŤááşá¸á ááşáááşááźá áşáááşá IRandomGenerator áá áşááŻá áŽá áááşáááŻá¸ááťáŹá¸ááᯠááááşá¸áááşá¸áááşá áááşá¸ááááŻááşáááŻááş ááŽá¸ááźáŹá¸ááąáŹáşááśááᯠáá˝á˛ááąááąá¸ááźáŽá¸ áááá áŹááźáąáŹááşá¸áá˝ááş ááŽá¸á ááşáĄáááşááŤáážááááşá
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
...
private void GenerateCsvDataSet(TextWriter writer, int dataSetSize, params IRandomGenerator[] generators)
{
const char separator = ',';
int lastIdx = generators.Length - 1;
// write header
for (int j = 0; j <= lastIdx; j++)
{
writer.Write(generators[j].Name);
if (j != lastIdx)
writer.Write(separator);
}
writer.WriteLine();
// write data
for (int i = 0; i <= dataSetSize; i++)
{
for (int j = 0; j <= lastIdx; j++)
{
writer.Write(generators[j].Generate());
if (j != lastIdx)
writer.Write(separator);
}
if (i != dataSetSize)
writer.WriteLine();
}
}
...
}
}
ááťááşáážáááąááąá¸áááşáážáŹ GenerateCsvDataSet áááşá¸áááşá¸áááŻááąáŤáşáááŻááźáŽá¸ ááááşáĄáŹá¸ áááŻááşáá áşááŻáááŻáˇ ááááşá¸áááşá¸áááş áááŻáˇáááŻááş áĄááŻáśá¸á ááşáá ášá ááşá¸ááž áá˝ááşáááşááąáŤáşáážá ááąááŹááᯠáááşááśááážááááˇáşááŹááŹáááŻáˇ ááťááşááťááşá¸áá˝ážá˛ááźáąáŹááşá¸áááşááźá áşáááşá
namespace RandomDistribution
{
public class MainController : MonoBehaviour
{
...
public void GenerateCsvDataSet(string path, int dataSetSize, params IRandomGenerator[] generators)
{
using (var writer = File.CreateText(path))
{
GenerateCsvDataSet(writer, dataSetSize, generators);
}
}
public string GenerateCsvDataSet(int dataSetSize, params IRandomGenerator[] generators)
{
using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))
{
GenerateCsvDataSet(writer, dataSetSize, generators);
return writer.ToString();
}
}
...
}
}
áááąáŹááťááşááááşá¸áááşá¸ááźá
áşááťáŹá¸ áážáŹ áážáááąáááşá
ááááşááťáŹá¸áááŻ
áĄáśáˇáá˝ááşáĄááźá áşááťááşááážáá áá°áááŻáˇááťážáąáŹáşáááˇáşááŹá¸ááąáŹáĄááŹáááş áááşá¸áááŻáˇááážááááˇáşáĄááŹááźá áşáááş- ááá ášá áááŻááşá¸áá˝ááş áá°á¸ááąáŤááşá¸ááźáśá ááşáážáŻáĄááááşáĄááźá˝ááşáááŤáᲠááźááˇáşááťáŽááźááşá¸áááşá ááááşááąáŹááşá¸ááťáŹá¸áĄáá˝ááş ááŽá¸ááźáŹá¸ááááşááťáŹá¸ááᯠááŹá¸áážáááźááşá¸áážáŹ áĄáááášááŤááşááᯠáááźááşá፠- áááşá¸áááŻáˇáĄáŹá¸ááŻáśá¸áááş áááˇáşáážááşá¸ááźáąáĄáŹá¸ááźááˇáş áá°ááŽááąáŹááááşááťáŹá¸ááᯠááźáááŤáááşá
áĄááźá
áşáážááşáážáŹ-
ááťááŻá¸áááşááŤá¸ááŻááŻáśá¸ááž ááąááŹááşááąáŤáşáá˝ááş á
áŽáááşá¸ááťáŹá¸ááᯠááźááşááąáŹááşááźááşá¸-
áážááˇáş 3D ááźááˇáş ááŻáśááąáŹáşááźááşá¸á áááşáá°áááşááťážááąáŹ áĄááźáąáŹááşá¸áĄááŹááťáŹá¸á
á˝áŹ áááźá
áşááąáŤáşá
áąáááşáĄáá˝ááş System.Random.Next() áááááşáááŻáᏠááťááşááŹá¸áá˛áˇááŤáááşá
UnityEngine áááŻáśáážááşááźááˇáşááźá°á¸áážáŻáážááˇáşáááşáááşááźáŽá¸ ááááŤááşá¸áá˝ááşááąáŹáşááźááŹá¸ááąáŹ ááŹááşáááşá¸áááş áá°áˇááŹááŹáá° áááşááŤááá˛áᲠáááźá
áşáá˛áˇááŤ- áááşá¸áááş áĄá
áááŻááşá¸áá˝ááş áážáŹá¸áá˝ááşá¸ááąáááş áááŻáˇáááŻááş áĄááşááťááşáĄáá˝ááşá¸ áá
áşááŻáᯠááźáąáŹááşá¸áá˛áá˝áŹá¸áá˛áˇáááşá ááŤááąáááˇáş áĄááŻááąáŹáˇ ááąááťáŹáá˝áŹá¸ááźáŽá
source: www.habr.com