[{"data":1,"prerenderedAt":612},["ShallowReactive",2],{"knowledge:en:\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-cohesion-experiment-card":3,"knowledge-locales:\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-cohesion-experiment-card":611},{"id":4,"title":5,"appliesTo":6,"body":9,"description":594,"extension":595,"meta":596,"navigation":597,"path":598,"publishedAt":599,"seo":600,"status":601,"stem":602,"tags":603,"technologies":608,"updatedAt":599,"__hash__":610},"knowledge_en\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-cohesion-experiment-card.md","Evaluating Unity ECS cohesion by separating measurement, observation, and decision",[7,8],"Unity 6000.5.1f1","Windows Standalone x64 Development Build",{"type":10,"value":11,"toc":580},"minimark",[12,17,82,86,90,123,127,130,181,184,188,191,332,335,339,342,440,443,446,449,459,462,476,479,483,497,500,504,507,524,527,531,553,557],[13,14,16],"h2",{"id":15},"experiment-card","Experiment card",[18,19,20,33],"table",{},[21,22,23],"thead",{},[24,25,26,30],"tr",{},[27,28,29],"th",{},"Item",[27,31,32],{},"Detail",[34,35,36,45,53,61,69],"tbody",{},[24,37,38,42],{},[39,40,41],"td",{},"Question",[39,43,44],{},"How does adding local cohesion change the appearance and Player cost of a minimal Boids-lite setup?",[24,46,47,50],{},[39,48,49],{},"Comparison",[39,51,52],{},"Keep separation and alignment enabled while toggling only cohesion",[24,54,55,58],{},[39,56,57],{},"Measurement",[39,59,60],{},"Run a Windows Player three times per condition with 1,000 and 5,000 entities",[24,62,63,66],{},[39,64,65],{},"Observation",[39,67,68],{},"Move 1,000 fixed-seed entities toward the same target and compare motion and post-arrival behavior",[24,70,71,74],{},[39,72,73],{},"Decision",[39,75,76,77,81],{},"Adopt acceleration ",[78,79,80],"code",{},"1.0"," as the initial value for this minimal setup",[83,84,85],"p",{},"The important part of this experiment is that the adoption decision is not explained by a single number. The direction of the CPU Main difference changed with entity count, and the per-run ranges overlapped. A fixed-condition visual check, meanwhile, made local grouping look slightly stronger. The value was therefore adopted because it added the intended visual behavior without revealing a visible conflict with existing behavior—not because performance improved.",[13,87,89],{"id":88},"conclusions","Conclusions",[91,92,93,105,108,111,114,117],"ul",{},[94,95,96,97,100,101,104],"li",{},"With 1,000 entities, the average CPU Main difference with cohesion enabled was ",[78,98,99],{},"+0.026 ms","; with 5,000 entities, it was ",[78,102,103],{},"-0.086 ms",".",[94,106,107],{},"The direction was inconsistent and the ranges from three runs per condition overlapped, so the experiment does not establish an increase or decrease in cost.",[94,109,110],{},"Average Unity reserved memory did not differ between disabled and enabled cohesion at either entity count.",[94,112,113],{},"In a fixed-seed visual comparison of 1,000 entities moving to the same target, local grouping looked slightly stronger with cohesion enabled.",[94,115,116],{},"Through approximately six seconds after arrival, no cohesion-specific overdensity, expansion and contraction of the group, or oscillation around the center was observed.",[94,118,119,120,122],{},"Acceleration ",[78,121,80],{}," is an initial value only for this minimal Boids-lite setup. It is neither a general recommendation nor a value justified by a performance difference.",[13,124,126],{"id":125},"separate-measurement-observation-and-decision","Separate measurement, observation, and decision",[83,128,129],{},"An experiment report should not merge these three types of result.",[18,131,132,145],{},[21,133,134],{},[24,135,136,139,142],{},[27,137,138],{},"Type",[27,140,141],{},"What this experiment covers",[27,143,144],{},"Valid scope",[34,146,147,157,168],{},[24,148,149,151,154],{},[39,150,57],{},[39,152,153],{},"A\u002FB comparison of CPU Main and reserved memory",[39,155,156],{},"The documented Player, conditions, and three runs per condition",[24,158,159,162,165],{},[39,160,161],{},"Visual observation",[39,163,164],{},"Grouping and the absence of visibly unstable motion",[39,166,167],{},"Fixed seed, 1,000 entities, the same target, and approximately six seconds after arrival",[24,169,170,172,178],{},[39,171,73],{},[39,173,174,175,177],{},"Use cohesion acceleration ",[78,176,80],{}," as the initial value",[39,179,180],{},"This minimal Boids-lite setup only",[83,182,183],{},"“The appearance improved,” “the average changed,” and “the value became the default” are separate claims. The core lesson is not to turn a small average difference into a performance improvement, a short visual check into proof of stability, or one project's initial value into a general recommendation.",[13,185,187],{"id":186},"ab-measurement-conditions","A\u002FB measurement conditions",[83,189,190],{},"The same Windows Standalone x64 Development Build was used, with only cohesion toggled.",[18,192,193,202],{},[21,194,195],{},[24,196,197,199],{},[27,198,29],{},[27,200,201],{},"Condition",[34,203,204,214,227,235,246,254,269,277,285,293,301,308,316,324],{},[24,205,206,209],{},[39,207,208],{},"Unity",[39,210,211],{},[78,212,213],{},"6000.5.1f1",[24,215,216,219],{},[39,217,218],{},"Entities \u002F Entities Graphics",[39,220,221,224,225],{},[78,222,223],{},"6.5.0"," \u002F ",[78,226,223],{},[24,228,229,232],{},[39,230,231],{},"CPU",[39,233,234],{},"13th Gen Intel Core i7-13700H, 14 cores \u002F 20 logical processors",[24,236,237,240],{},[39,238,239],{},"GPU \u002F driver",[39,241,242,243],{},"NVIDIA GeForce RTX 4060 Laptop GPU, Direct3D 12, 7,957 MB VRAM, driver ",[78,244,245],{},"32.0.15.7283",[24,247,248,251],{},[39,249,250],{},"RAM",[39,252,253],{},"32 GB (34,078,425,088 bytes)",[24,255,256,259],{},[39,257,258],{},"OS",[39,260,261,262,265,266],{},"Microsoft Windows 11 Home ",[78,263,264],{},"10.0.26200",", build ",[78,267,268],{},"26200",[24,270,271,274],{},[39,272,273],{},"Display",[39,275,276],{},"1920×1080, windowed, VSync disabled",[24,278,279,282],{},[39,280,281],{},"Entity count",[39,283,284],{},"1,000 \u002F 5,000",[24,286,287,290],{},[39,288,289],{},"Steering",[39,291,292],{},"Separation enabled, alignment enabled",[24,294,295,298],{},[39,296,297],{},"Movement",[39,299,300],{},"Measurement targets changed at a fixed interval",[24,302,303,305],{},[39,304,49],{},[39,306,307],{},"Cohesion disabled \u002F enabled",[24,309,310,313],{},[39,311,312],{},"Warm-up",[39,314,315],{},"10 seconds",[24,317,318,321],{},[39,319,320],{},"Measurement period",[39,322,323],{},"30 seconds",[24,325,326,329],{},[39,327,328],{},"Repetitions",[39,330,331],{},"Three runs per condition",[83,333,334],{},"Before measurement, batchmode compilation, 106 Edit Mode tests, the Windows Development Build, and successful completion of every visible Player run were checked. The measurements are whole-Player frame metrics, not a Profiler Marker isolated to the cohesion computation.",[13,336,338],{"id":337},"measured-results","Measured results",[83,340,341],{},"The following values are averages from three runs per condition.",[18,343,344,368],{},[21,345,346],{},[24,347,348,351,355,358,362,365],{},[27,349,281],{"align":350},"right",[27,352,354],{"align":353},"center","Cohesion",[27,356,357],{"align":350},"CPU Main average",[27,359,361],{"align":360},"left","CPU Main range",[27,363,364],{"align":350},"Enabled average difference",[27,366,367],{"align":350},"Total Reserved Memory",[34,369,370,390,407,424],{},[24,371,372,375,378,381,384,387],{},[39,373,374],{"align":350},"1,000",[39,376,377],{"align":353},"Disabled",[39,379,380],{"align":350},"0.856 ms",[39,382,383],{"align":360},"0.831–0.882 ms",[39,385,386],{"align":350},"—",[39,388,389],{"align":350},"441.59 MiB",[24,391,392,394,397,400,403,405],{},[39,393,374],{"align":350},[39,395,396],{"align":353},"Enabled",[39,398,399],{"align":350},"0.882 ms",[39,401,402],{"align":360},"0.851–0.931 ms",[39,404,99],{"align":350},[39,406,389],{"align":350},[24,408,409,412,414,417,420,422],{},[39,410,411],{"align":350},"5,000",[39,413,377],{"align":353},[39,415,416],{"align":350},"1.370 ms",[39,418,419],{"align":360},"1.280–1.459 ms",[39,421,386],{"align":350},[39,423,389],{"align":350},[24,425,426,428,430,433,436,438],{},[39,427,411],{"align":350},[39,429,396],{"align":353},[39,431,432],{"align":350},"1.284 ms",[39,434,435],{"align":360},"1.247–1.331 ms",[39,437,103],{"align":350},[39,439,389],{"align":350},[83,441,442],{},"The enabled average increased at 1,000 entities and decreased at 5,000. The recorded per-run ranges also overlapped in both cases. Run-to-run variation may therefore be as large as or larger than the incremental cohesion cost in this test. These measurements do not support either “cohesion made it faster” or “cohesion made it slower.”",[83,444,445],{},"GPU FrameTiming produced unrealistic outliers in multiple runs and was excluded from the conclusion. Rejecting a metric that cannot be trusted, instead of reporting every available number, is part of the result.",[13,447,161],{"id":448},"visual-observation",[83,450,451,452,455,456,458],{},"The visual comparison moved 1,000 entities generated from fixed seed ",[78,453,454],{},"20260816"," toward the same screen-space target. Entity count was preserved, separation and alignment remained enabled, and cohesion acceleration was ",[78,457,80],{},". Motion was checked around 0.5 seconds after setting the target and the settled state around six seconds after arrival.",[83,460,461],{},"The observations were limited to the following:",[91,463,464,467,470,473],{},[94,465,466],{},"Local grouping looked slightly stronger with cohesion enabled.",[94,468,469],{},"Both conditions formed a dense group around the single target after arrival.",[94,471,472],{},"Through approximately six seconds, no enabled-only overdensity, expansion and contraction of the group, or oscillation around the center was observed.",[94,474,475],{},"No visible problem was found in target arrival, minimal avoidance from separation, or existing enemy behavior.",[83,477,478],{},"These are qualitative observations, not measurements of local density, flock shape, or nearest-neighbor distance. No publishable side-by-side image or video was retained, so the visual result is not presented as independently inspectable evidence. “Not observed” means only that the problem was not found during the documented short window and conditions.",[13,480,482],{"id":481},"adoption-decision","Adoption decision",[83,484,485,486,488,489,492,493,496],{},"This minimal Boids-lite setup adopted cohesion acceleration ",[78,487,80],{}," as its initial value. It is weaker than alignment at ",[78,490,491],{},"2.0"," and separation at ",[78,494,495],{},"6.0",", allowing the movement target to remain the primary direction while drawing allies slightly toward a local center.",[83,498,499],{},"The reason for adoption was that the fixed-condition check showed the intended visual change without revealing a visible conflict with existing behavior. The CPU Main average differences were not used to justify the decision. Different densities, neighbor counts, game rules, and rendering loads may require a different value.",[13,501,503],{"id":502},"turning-a-small-difference-into-the-next-experiment","Turning a small difference into the next experiment",[83,505,506],{},"When the direction of a difference is inconsistent and run ranges overlap, it is safer not to decide feature adoption or optimization from averages alone. A follow-up can add evidence according to the question being asked.",[91,508,509,512,515,518,521],{},[94,510,511],{},"Increase the run count and alternate or randomize execution order.",[94,513,514],{},"Inspect percentiles and short Profiler captures in addition to averages.",[94,516,517],{},"Add a cohesion-specific Profiler Marker to separate its cost from whole-Player variation.",[94,519,520],{},"Record the same local-density, nearest-neighbor, overlap-count, and arrival-time metrics in both conditions.",[94,522,523],{},"Retain publishable images or video at matching timestamps so visual observations can be checked again.",[83,525,526],{},"The goal is not to force a stronger conclusion out of a small difference. The measurement can remain “cost change not established,” the observation can remain “the appearance changed slightly under limited conditions,” and the decision can remain “an initial value was selected for the current prototype.”",[13,528,530],{"id":529},"caveats","Caveats",[91,532,533,536,539,542,545,548],{},[94,534,535],{},"The result is limited to one Windows Development Player, the documented entity counts, and three runs per condition.",[94,537,538],{},"CPU Main is a whole-Player average, not the execution time of cohesion alone.",[94,540,541],{},"Equal reserved memory does not prove that temporary allocators or in-frame allocations were identical.",[94,543,544],{},"The visual comparison was not quantitative and has no publishable image or video.",[94,546,547],{},"Finding no problem through approximately six seconds does not establish long-duration stability or behavior with other target layouts.",[94,549,119,550,552],{},[78,551,80],{}," is a decision for this setup, not a recommendation for Unity ECS or Boids in general.",[13,554,556],{"id":555},"related-resources","Related resources",[91,558,559,566,572],{},[94,560,561],{},[562,563,565],"a",{"href":564},"\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-windows-player-performance-baseline","Measuring 1,000 to 5,000 Unity ECS entities reproducibly in a Windows Player (Japanese)",[94,567,568],{},[562,569,571],{"href":570},"\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-uniform-grid-separation-ab-test","A\u002FB testing same-faction separation with a reused spatial index in Unity ECS (Japanese)",[94,573,574],{},[562,575,579],{"href":576,"rel":577},"https:\u002F\u002Fdocs.unity3d.com\u002F2022.2\u002FDocumentation\u002FManual\u002Fprofiler-profiling-applications.html",[578],"nofollow","Profiling your application in Unity",{"title":581,"searchDepth":582,"depth":582,"links":583},"",2,[584,585,586,587,588,589,590,591,592,593],{"id":15,"depth":582,"text":16},{"id":88,"depth":582,"text":89},{"id":125,"depth":582,"text":126},{"id":186,"depth":582,"text":187},{"id":337,"depth":582,"text":338},{"id":448,"depth":582,"text":161},{"id":481,"depth":582,"text":482},{"id":502,"depth":582,"text":503},{"id":529,"depth":582,"text":530},{"id":555,"depth":582,"text":556},"A small experiment that keeps A\u002FB measurements for 1,000 and 5,000 entities separate from a fixed-condition visual comparison and a project-specific default-value decision.","md",{},true,"\u002Fknowledge\u002Fgame\u002Funity\u002Fecs-cohesion-experiment-card","2026-09-03",{"title":5,"description":594},"published","knowledge\u002Fgame\u002Funity\u002Fecs-cohesion-experiment-card",[604,605,606,607,15],"ecs","boids","cohesion","performance",[609],"unity","UbQQpfieQP2nRKvYU-nHBVKFb9AJ2cmvD8zsh-dM_v0",{"ja":597,"en":597},1791891818860]