├── .gitignore ├── Assets ├── RuntimeDebugDraw.cs ├── RuntimeDebugDraw.cs.meta ├── Sample.meta └── Sample │ ├── Cube.prefab │ ├── Cube.prefab.meta │ ├── ExampleScript.cs │ ├── ExampleScript.cs.meta │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── Misc └── screenshot.gif ├── ProjectSettings └── ProjectSettings.asset └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /Assets/AssetStoreTools* 7 | /.vs/ 8 | 9 | # Autogenerated VS/MD/Consulo solution and project files 10 | ExportedObj/ 11 | .consulo/ 12 | *.csproj 13 | *.unityproj 14 | *.sln 15 | *.suo 16 | *.tmp 17 | *.user 18 | *.userprefs 19 | *.pidb 20 | *.booproj 21 | *.svd 22 | 23 | 24 | # Unity3D generated meta files 25 | *.pidb.meta 26 | 27 | # Unity3D Generated File On Crash Reports 28 | sysinfo.txt 29 | 30 | # Builds 31 | *.apk 32 | *.unitypackage 33 | 34 | # For this, ignore ProjectSettings is ok 35 | /[Pp]rojectSettings/* 36 | !/[Pp]rojectSettings/ProjectSettings.asset 37 | -------------------------------------------------------------------------------- /Assets/RuntimeDebugDraw.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using RuntimeDebugDraw.Internal; 5 | using Conditional = System.Diagnostics.ConditionalAttribute; 6 | 7 | /* 8 | * Runtime Debug Draw 9 | * Single file debuging DrawLine/DrawText/etc that works in both Scene/Game view, also works in built PC/mobile builds. 10 | * 11 | * Very Important Notes: 12 | * 1. You are expected to make some changes in this file before intergrating this into you projects. 13 | * a. `_DEBUG` symbol, you should this to your project's debugging symbol so these draw calls will be compiled away in final release builds. 14 | * If you forget to do this, DrawXXX calls won't be shown. 15 | * b. `RuntimeDebugDraw` namespace and `Draw` class name, you can change this into your project's namespace to make it more accessable. 16 | * c. `Draw.DrawLineLayer` is the layer the lines will be drawn on. If you have camera postprocessing turned on, set this to a layer that is ignored 17 | * by the post processor. 18 | * d. `GetDebugDrawCamera()` will be called to get the camera for line drawings and text coordinate calcuation. 19 | * It defaults to `Camera.main`, returning null will mute drawings. 20 | * e. `DrawTextDefaultSize`/`DrawDefaultColor` styling variables, defaults as Unity Debug.Draw. 21 | * 2. Performance should be relatively ok for debugging, but it's never intended for release use. You should use conditional to 22 | * compile away these calls anyway. Additionally DrawText is implemented with OnGUI, which costs a lot on mobile devices. 23 | * 3. Don't rename this file of 'RuntimeDebugDraw' or this won't work. This file contains a MonoBehavior also named 'RuntimeDebugDraw' and Unity needs this file 24 | * to have the same name. If you really want to rename this file, remember to rename the 'RuntimeDebugDraw' class below too. 25 | * 26 | * License: Public Domain 27 | */ 28 | 29 | namespace RuntimeDebugDraw 30 | { 31 | public static class Draw 32 | { 33 | #region Main Functions 34 | /// 35 | /// Which layer the lines will be drawn on. 36 | /// 37 | public const int DrawLineLayer = 4; 38 | 39 | /// 40 | /// Default font size for DrawText. 41 | /// 42 | public const int DrawTextDefaultSize = 12; 43 | 44 | /// 45 | /// Default color for Draws. 46 | /// 47 | public static Color DrawDefaultColor = Color.white; 48 | 49 | /// 50 | /// Which camera to use for line drawing and texts coordinate calculation. 51 | /// 52 | /// Camera to debug draw on, returns null will mute debug drawing. 53 | public static Camera GetDebugDrawCamera() 54 | { 55 | return Camera.main; 56 | } 57 | 58 | /// 59 | /// Draw a line from to with . 60 | /// 61 | /// Point in world space where the line should start. 62 | /// Point in world space where the line should end. 63 | /// Color of the line. 64 | /// How long the line should be visible for. 65 | /// Should the line be obscured by objects closer to the camera? 66 | [Conditional("_DEBUG")] 67 | public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration, bool depthTest) 68 | { 69 | CheckAndBuildHiddenRTDrawObject(); 70 | _rtDraw.RegisterLine(start, end, color, duration, !depthTest); 71 | return; 72 | } 73 | 74 | /// 75 | /// Draws a line from start to start + dir in world coordinates. 76 | /// 77 | /// Point in world space where the ray should start. 78 | /// Direction and length of the ray. 79 | /// Color of the drawn line. 80 | /// How long the line will be visible for (in seconds). 81 | /// Should the line be obscured by other objects closer to the camera? 82 | [Conditional("_DEBUG")] 83 | public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration, bool depthTest) 84 | { 85 | CheckAndBuildHiddenRTDrawObject(); 86 | _rtDraw.RegisterLine(start, start + dir, color, duration, !depthTest); 87 | return; 88 | } 89 | 90 | /// 91 | /// Draw a text at given position. 92 | /// 93 | /// Position 94 | /// String of the text. 95 | /// Color for the text. 96 | /// Font size for the text. 97 | /// How long the text should be visible for. 98 | /// Set to true to let the text moving up, so multiple texts at the same position can be visible. 99 | [Conditional("_DEBUG")] 100 | public static void DrawText(Vector3 pos, string text, Color color, int size, float duration, bool popUp) 101 | { 102 | CheckAndBuildHiddenRTDrawObject(); 103 | _rtDraw.RegisterDrawText(pos, text, color, size, duration, popUp); 104 | return; 105 | } 106 | 107 | /// 108 | /// Attach text to a transform. 109 | /// 110 | /// Target transform to attach text to. 111 | /// Function will be called on every frame to get a string as attached text. 112 | /// Text attach offset to transform position. 113 | /// Color for the text. 114 | /// Font size for the text. 115 | [Conditional("_DEBUG")] 116 | public static void AttachText(Transform transform, Func strFunc, Vector3 offset, Color color, int size) 117 | { 118 | CheckAndBuildHiddenRTDrawObject(); 119 | _rtDraw.RegisterAttachText(transform, strFunc, offset, color, size); 120 | 121 | return; 122 | } 123 | #endregion 124 | 125 | #region Overloads 126 | /* 127 | * These are tons of overloads following how 'Debug.DrawXXX' are overloaded. 128 | */ 129 | 130 | /// 131 | /// Draw a line from to with . 132 | /// 133 | /// Point in world space where the line should start. 134 | /// Point in world space where the line should end. 135 | [Conditional("_DEBUG")] 136 | public static void DrawLine(Vector3 start, Vector3 end) 137 | { 138 | DrawLine(start, end, DrawDefaultColor, 0f, true); 139 | return; 140 | } 141 | 142 | /// 143 | /// Draw a line from to with . 144 | /// 145 | /// Point in world space where the line should start. 146 | /// Point in world space where the line should end. 147 | /// Color of the line. 148 | [Conditional("_DEBUG")] 149 | public static void DrawLine(Vector3 start, Vector3 end, Color color) 150 | { 151 | DrawLine(start, end, color, 0f, true); 152 | return; 153 | } 154 | 155 | /// 156 | /// Draw a line from to with . 157 | /// 158 | /// Point in world space where the line should start. 159 | /// Point in world space where the line should end. 160 | /// Color of the line. 161 | /// How long the line should be visible for. 162 | [Conditional("_DEBUG")] 163 | public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration) 164 | { 165 | DrawLine(start, end, color, duration, true); 166 | return; 167 | } 168 | 169 | /// 170 | /// Draws a line from start to start + dir in world coordinates. 171 | /// 172 | /// Point in world space where the ray should start. 173 | /// Direction and length of the ray. 174 | [Conditional("_DEBUG")] 175 | public static void DrawRay(Vector3 start, Vector3 dir) 176 | { 177 | DrawRay(start, dir, DrawDefaultColor, 0f, true); 178 | return; 179 | } 180 | 181 | /// 182 | /// Draws a line from start to start + dir in world coordinates. 183 | /// 184 | /// Point in world space where the ray should start. 185 | /// Direction and length of the ray. 186 | /// Color of the drawn line. 187 | [Conditional("_DEBUG")] 188 | public static void DrawRay(Vector3 start, Vector3 dir, Color color) 189 | { 190 | DrawRay(start, dir, color, 0f, true); 191 | return; 192 | } 193 | 194 | /// 195 | /// Draws a line from start to start + dir in world coordinates. 196 | /// 197 | /// Point in world space where the ray should start. 198 | /// Direction and length of the ray. 199 | /// Color of the drawn line. 200 | /// How long the line will be visible for (in seconds). 201 | [Conditional("_DEBUG")] 202 | public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration) 203 | { 204 | DrawRay(start, dir, color, duration, true); 205 | return; 206 | } 207 | 208 | /// 209 | /// Draw a text at given position. 210 | /// 211 | /// Position 212 | /// String of the text. 213 | [Conditional("_DEBUG")] 214 | public static void DrawText(Vector3 pos, string text) 215 | { 216 | DrawText(pos, text, DrawDefaultColor, DrawTextDefaultSize, 0f, false); 217 | return; 218 | } 219 | 220 | /// 221 | /// Draw a text at given position. 222 | /// 223 | /// Position 224 | /// String of the text. 225 | /// Color for the text. 226 | [Conditional("_DEBUG")] 227 | public static void DrawText(Vector3 pos, string text, Color color) 228 | { 229 | DrawText(pos, text, color, DrawTextDefaultSize, 0f, false); 230 | return; 231 | } 232 | 233 | /// 234 | /// Draw a text at given position. 235 | /// 236 | /// Position 237 | /// String of the text. 238 | /// Color for the text. 239 | /// Font size for the text. 240 | [Conditional("_DEBUG")] 241 | public static void DrawText(Vector3 pos, string text, Color color, int size) 242 | { 243 | DrawText(pos, text, color, size, 0f, false); 244 | return; 245 | } 246 | 247 | /// 248 | /// Draw a text at given position. 249 | /// 250 | /// Position 251 | /// String of the text. 252 | /// Color for the text. 253 | /// Font size for the text. 254 | /// How long the text should be visible for. 255 | [Conditional("_DEBUG")] 256 | public static void DrawText(Vector3 pos, string text, Color color, int size, float duration) 257 | { 258 | DrawText(pos, text, color, size, duration, false); 259 | return; 260 | } 261 | 262 | /// 263 | /// Attach text to a transform. 264 | /// 265 | /// Target transform to attach text to. 266 | /// Function will be called on every frame to get a string as attached text. 267 | [Conditional("_DEBUG")] 268 | public static void AttachText(Transform transform, Func strFunc) 269 | { 270 | AttachText(transform, strFunc, Vector3.zero, DrawDefaultColor, DrawTextDefaultSize); 271 | return; 272 | } 273 | 274 | /// 275 | /// Attach text to a transform. 276 | /// 277 | /// Target transform to attach text to. 278 | /// Function will be called on every frame to get a string as attached text. 279 | /// Text attach offset to transform position. 280 | [Conditional("_DEBUG")] 281 | public static void AttachText(Transform transform, Func strFunc, Vector3 offset) 282 | { 283 | AttachText(transform, strFunc, offset, DrawDefaultColor, DrawTextDefaultSize); 284 | return; 285 | } 286 | 287 | /// 288 | /// Attach text to a transform. 289 | /// 290 | /// Target transform to attach text to. 291 | /// Function will be called on every frame to get a string as attached text. 292 | /// Text attach offset to transform position. 293 | /// Color for the text. 294 | [Conditional("_DEBUG")] 295 | public static void AttachText(Transform transform, Func strFunc, Vector3 offset, Color color) 296 | { 297 | AttachText(transform, strFunc, offset, color, DrawTextDefaultSize); 298 | return; 299 | } 300 | #endregion 301 | 302 | #region Internal 303 | /// 304 | /// Singleton RuntimeDebugDraw component that is needed to call Unity APIs. 305 | /// 306 | private static Internal.RuntimeDebugDraw _rtDraw; 307 | 308 | /// 309 | /// Check and build 310 | /// 311 | private static string HIDDEN_GO_NAME = "________HIDDEN_C4F6A87F298241078E21C0D7C1D87A76_"; 312 | private static void CheckAndBuildHiddenRTDrawObject() 313 | { 314 | if (_rtDraw != null) 315 | return; 316 | 317 | // try reuse existing one first 318 | _rtDraw = GameObject.FindObjectOfType(); 319 | if (_rtDraw != null) 320 | return; 321 | 322 | // instantiate an hidden gameobject w/ RuntimeDebugDraw attached. 323 | // hardcode an GUID in the name so one won't accidentally get this by name. 324 | var go = new GameObject(HIDDEN_GO_NAME); 325 | var childGo = new GameObject(HIDDEN_GO_NAME); 326 | childGo.transform.parent = go.transform; 327 | _rtDraw = childGo.AddComponent(); 328 | // hack to only hide outer go, so that RuntimeDebugDraw's OnGizmos will work properly. 329 | go.hideFlags = HideFlags.HideAndDontSave; 330 | if (Application.isPlaying) 331 | GameObject.DontDestroyOnLoad(go); 332 | 333 | return; 334 | } 335 | #endregion 336 | } 337 | 338 | #region Editor 339 | #if UNITY_EDITOR 340 | [UnityEditor.InitializeOnLoad] 341 | public static class DrawEditor 342 | { 343 | static DrawEditor() 344 | { 345 | // set a low execution order 346 | var name = typeof(RuntimeDebugDraw.Internal.RuntimeDebugDraw).Name; 347 | foreach (UnityEditor.MonoScript monoScript in UnityEditor.MonoImporter.GetAllRuntimeMonoScripts()) 348 | { 349 | if (name != monoScript.name) 350 | continue; 351 | 352 | if (UnityEditor.MonoImporter.GetExecutionOrder(monoScript) != 9990) 353 | { 354 | UnityEditor.MonoImporter.SetExecutionOrder(monoScript, 9990); 355 | return; 356 | } 357 | } 358 | } 359 | } 360 | #endif 361 | #endregion 362 | } 363 | 364 | namespace RuntimeDebugDraw.Internal 365 | { 366 | internal class RuntimeDebugDraw : MonoBehaviour 367 | { 368 | #region Basics 369 | private void CheckInitialized() 370 | { 371 | // as RuntimeDebugDraw component has a very low execution order, other script might Awake() 372 | // earlier than this and at that moment it's not initialized. check and init on every public 373 | // member 374 | if (_drawTextEntries == null) 375 | { 376 | _ZTestBatch = new BatchedLineDraw(depthTest: true); 377 | _AlwaysBatch = new BatchedLineDraw(depthTest: false); 378 | _lineEntries = new List(16); 379 | 380 | _textStyle = new GUIStyle(); 381 | _textStyle.alignment = TextAnchor.UpperLeft; 382 | _drawTextEntries = new List(16); 383 | _attachTextEntries = new List(16); 384 | } 385 | 386 | return; 387 | } 388 | 389 | private void Awake() 390 | { 391 | CheckInitialized(); 392 | 393 | return; 394 | } 395 | 396 | private void OnGUI() 397 | { 398 | DrawTextOnGUI(); 399 | 400 | return; 401 | } 402 | 403 | #if UNITY_EDITOR 404 | private void OnDrawGizmos() 405 | { 406 | DrawTextOnDrawGizmos(); 407 | 408 | return; 409 | } 410 | #endif 411 | 412 | private void LateUpdate() 413 | { 414 | TickAndDrawLines(); 415 | TickTexts(); 416 | 417 | return; 418 | } 419 | 420 | private void OnDestroy() 421 | { 422 | _AlwaysBatch.Dispose(); 423 | _ZTestBatch.Dispose(); 424 | 425 | return; 426 | } 427 | 428 | private void Clear() 429 | { 430 | _drawTextEntries.Clear(); 431 | _lineEntries.Clear(); 432 | _linesNeedRebuild = true; 433 | 434 | return; 435 | } 436 | #endregion 437 | 438 | #region Draw Lines 439 | private class DrawLineEntry 440 | { 441 | public bool occupied; 442 | public Vector3 start; 443 | public Vector3 end; 444 | public Color color; 445 | public float timer; 446 | public bool noZTest; 447 | } 448 | 449 | private List _lineEntries; 450 | 451 | // helper class for batching 452 | private class BatchedLineDraw : IDisposable 453 | { 454 | public Mesh mesh; 455 | public Material mat; 456 | 457 | private List _vertices; 458 | private List _colors; 459 | private List _indices; 460 | 461 | public BatchedLineDraw(bool depthTest) 462 | { 463 | mesh = new Mesh(); 464 | mesh.MarkDynamic(); 465 | 466 | // relying on a builtin shader, but it shouldn't change that much. 467 | mat = new Material(Shader.Find("Hidden/Internal-Colored")); 468 | mat.SetInt("_ZTest", depthTest 469 | ? 4 // LEqual 470 | : 0 // Always 471 | ); 472 | 473 | _vertices = new List(); 474 | _colors = new List(); 475 | _indices = new List(); 476 | 477 | return; 478 | } 479 | 480 | public void AddLine(Vector3 from, Vector3 to, Color color) 481 | { 482 | _vertices.Add(from); 483 | _vertices.Add(to); 484 | _colors.Add(color); 485 | _colors.Add(color); 486 | int verticeCount = _vertices.Count; 487 | _indices.Add(verticeCount - 2); 488 | _indices.Add(verticeCount - 1); 489 | 490 | return; 491 | } 492 | 493 | public void Clear() 494 | { 495 | mesh.Clear(); 496 | _vertices.Clear(); 497 | _colors.Clear(); 498 | _indices.Clear(); 499 | 500 | return; 501 | } 502 | 503 | public void BuildBatch() 504 | { 505 | mesh.SetVertices(_vertices); 506 | mesh.SetColors(_colors); 507 | mesh.SetIndices(_indices.ToArray(), MeshTopology.Lines, 0); // cant get rid of this alloc for now 508 | 509 | return; 510 | } 511 | 512 | public void Dispose() 513 | { 514 | GameObject.DestroyImmediate(mesh); 515 | GameObject.DestroyImmediate(mat); 516 | 517 | return; 518 | } 519 | } 520 | 521 | private BatchedLineDraw _ZTestBatch; 522 | private BatchedLineDraw _AlwaysBatch; 523 | private bool _linesNeedRebuild; 524 | 525 | public void RegisterLine(Vector3 start, Vector3 end, Color color, float timer, bool noZTest) 526 | { 527 | CheckInitialized(); 528 | 529 | DrawLineEntry entry = null; 530 | for (int ix = 0; ix < _lineEntries.Count; ix++) 531 | { 532 | if (!_lineEntries[ix].occupied) 533 | { 534 | entry = _lineEntries[ix]; 535 | break; 536 | } 537 | } 538 | if (entry == null) 539 | { 540 | entry = new DrawLineEntry(); 541 | _lineEntries.Add(entry); 542 | } 543 | 544 | entry.occupied = true; 545 | entry.start = start; 546 | entry.end = end; 547 | entry.color = color; 548 | entry.timer = timer; 549 | entry.noZTest = noZTest; 550 | _linesNeedRebuild = true; 551 | 552 | return; 553 | } 554 | 555 | private void RebuildDrawLineBatchMesh() 556 | { 557 | _ZTestBatch.Clear(); 558 | _AlwaysBatch.Clear(); 559 | 560 | for (int ix = 0; ix < _lineEntries.Count; ix++) 561 | { 562 | var entry = _lineEntries[ix]; 563 | if (!entry.occupied) 564 | continue; 565 | 566 | if (entry.noZTest) 567 | _AlwaysBatch.AddLine(entry.start, entry.end, entry.color); 568 | else 569 | _ZTestBatch.AddLine(entry.start, entry.end, entry.color); 570 | } 571 | 572 | _ZTestBatch.BuildBatch(); 573 | _AlwaysBatch.BuildBatch(); 574 | 575 | return; 576 | } 577 | 578 | private void TickAndDrawLines() 579 | { 580 | if (_linesNeedRebuild) 581 | { 582 | RebuildDrawLineBatchMesh(); 583 | _linesNeedRebuild = false; 584 | } 585 | 586 | // draw on UI layer which should bypass most postFX setups 587 | Graphics.DrawMesh(_AlwaysBatch.mesh, Vector3.zero, Quaternion.identity, _AlwaysBatch.mat, layer: Draw.DrawLineLayer ,camera : null, submeshIndex : 0,properties: null, castShadows : false, receiveShadows : false); 588 | Graphics.DrawMesh(_ZTestBatch.mesh, Vector3.zero, Quaternion.identity, _ZTestBatch.mat, layer: Draw.DrawLineLayer ,camera : null, submeshIndex : 0,properties: null, castShadows : false, receiveShadows : false); 589 | 590 | // update timer late so every added entry can be drawed for at least one frame 591 | for (int ix = 0; ix < _lineEntries.Count; ix++) 592 | { 593 | var entry = _lineEntries[ix]; 594 | if (!entry.occupied) 595 | continue; 596 | entry.timer -= Time.deltaTime; 597 | if (entry.timer < 0) 598 | { 599 | entry.occupied = false; 600 | _linesNeedRebuild = true; 601 | } 602 | } 603 | 604 | return; 605 | } 606 | #endregion 607 | 608 | #region Draw Text 609 | [Flags] 610 | public enum DrawFlag : byte 611 | { 612 | None = 0, 613 | DrawnGizmo = 1 << 0, 614 | DrawnGUI = 1 << 1, 615 | DrawnAll = DrawnGizmo | DrawnGUI 616 | } 617 | 618 | private class DrawTextEntry 619 | { 620 | public bool occupied; 621 | public GUIContent content; 622 | public Vector3 anchor; 623 | public int size; 624 | public Color color; 625 | public float timer; 626 | public bool popUp; 627 | public float duration; 628 | 629 | // Text entries needs to be draw in both OnGUI/OnDrawGizmos, need flags for mark 630 | // has been visited by both 631 | public DrawFlag flag = DrawFlag.None; 632 | 633 | public DrawTextEntry() 634 | { 635 | content = new GUIContent(); 636 | return; 637 | } 638 | } 639 | 640 | private class AttachTextEntry 641 | { 642 | public bool occupied; 643 | public GUIContent content; 644 | public Vector3 offset; 645 | public int size; 646 | public Color color; 647 | 648 | 649 | public Transform transform; 650 | public Func strFunc; 651 | 652 | public DrawFlag flag = DrawFlag.None; 653 | 654 | public AttachTextEntry() 655 | { 656 | content = new GUIContent(); 657 | return; 658 | } 659 | } 660 | 661 | private List _drawTextEntries; 662 | private List _attachTextEntries; 663 | private GUIStyle _textStyle; 664 | 665 | public void RegisterDrawText(Vector3 anchor, string text, Color color, int size, float timer, bool popUp) 666 | { 667 | CheckInitialized(); 668 | 669 | DrawTextEntry entry = null; 670 | for (int ix = 0; ix < _drawTextEntries.Count; ix++) 671 | { 672 | if (!_drawTextEntries[ix].occupied) 673 | { 674 | entry = _drawTextEntries[ix]; 675 | break; 676 | } 677 | } 678 | if (entry == null) 679 | { 680 | entry = new DrawTextEntry(); 681 | _drawTextEntries.Add(entry); 682 | } 683 | 684 | entry.occupied = true; 685 | entry.anchor = anchor; 686 | entry.content.text = text; 687 | entry.size = size; 688 | entry.color = color; 689 | entry.duration = entry.timer = timer; 690 | entry.popUp = popUp; 691 | #if UNITY_EDITOR 692 | entry.flag = DrawFlag.None; 693 | #else 694 | // in builds consider gizmo is already drawn 695 | entry.flag = DrawFlag.DrawnGizmo; 696 | #endif 697 | 698 | return; 699 | } 700 | 701 | public void RegisterAttachText(Transform target, Func strFunc, Vector3 offset, Color color, int size) 702 | { 703 | CheckInitialized(); 704 | 705 | AttachTextEntry entry = null; 706 | for (int ix = 0; ix < _attachTextEntries.Count; ix++) 707 | { 708 | if (!_attachTextEntries[ix].occupied) 709 | { 710 | entry = _attachTextEntries[ix]; 711 | break; 712 | } 713 | } 714 | if (entry == null) 715 | { 716 | entry = new AttachTextEntry(); 717 | _attachTextEntries.Add(entry); 718 | } 719 | 720 | entry.occupied = true; 721 | entry.offset = offset; 722 | entry.transform = target; 723 | entry.strFunc = strFunc; 724 | entry.color = color; 725 | entry.size = size; 726 | // get first text 727 | entry.content.text = strFunc(); 728 | #if UNITY_EDITOR 729 | entry.flag = DrawFlag.None; 730 | #else 731 | // in builds consider gizmo is already drawn 732 | entry.flag = DrawFlag.DrawnGizmo; 733 | #endif 734 | 735 | return; 736 | } 737 | 738 | private void TickTexts() 739 | { 740 | for (int ix = 0; ix < _drawTextEntries.Count; ix++) 741 | { 742 | var entry = _drawTextEntries[ix]; 743 | if (!entry.occupied) 744 | continue; 745 | entry.timer -= Time.deltaTime; 746 | if (entry.flag == DrawFlag.DrawnAll) 747 | { 748 | if (entry.timer < 0) 749 | { 750 | entry.occupied = false; 751 | } 752 | // actually no need to tick DrawFlag as it won't move 753 | } 754 | } 755 | 756 | for (int ix = 0; ix < _attachTextEntries.Count; ix++) 757 | { 758 | var entry = _attachTextEntries[ix]; 759 | if (!entry.occupied) 760 | continue; 761 | if (entry.transform == null) 762 | { 763 | entry.occupied = false; 764 | entry.strFunc = null; // needs to release ref to callback 765 | } 766 | else if (entry.flag == DrawFlag.DrawnAll) 767 | { 768 | // tick content 769 | entry.content.text = entry.strFunc(); 770 | // tick flag 771 | #if UNITY_EDITOR 772 | entry.flag = DrawFlag.None; 773 | #else 774 | // in builds consider gizmo is already drawn 775 | entry.flag = DrawFlag.DrawnGizmo; 776 | #endif 777 | } 778 | } 779 | 780 | 781 | return; 782 | } 783 | 784 | private void DrawTextOnGUI() 785 | { 786 | var camera = Draw.GetDebugDrawCamera(); 787 | if (camera == null) 788 | return; 789 | 790 | for (int ix = 0; ix < _drawTextEntries.Count; ix++) 791 | { 792 | var entry = _drawTextEntries[ix]; 793 | if (!entry.occupied) 794 | continue; 795 | 796 | GUIDrawTextEntry(camera, entry); 797 | entry.flag |= DrawFlag.DrawnGUI; 798 | } 799 | 800 | for (int ix = 0; ix < _attachTextEntries.Count; ix++) 801 | { 802 | var entry = _attachTextEntries[ix]; 803 | if (!entry.occupied) 804 | continue; 805 | 806 | GUIAttachTextEntry(camera, entry); 807 | entry.flag |= DrawFlag.DrawnGUI; 808 | } 809 | 810 | return; 811 | } 812 | 813 | private void GUIDrawTextEntry(Camera camera, DrawTextEntry entry) 814 | { 815 | Vector3 worldPos = entry.anchor; 816 | Vector3 screenPos = camera.WorldToScreenPoint(worldPos); 817 | screenPos.y = Screen.height - screenPos.y; 818 | 819 | if (entry.popUp) 820 | { 821 | float ratio = entry.timer / entry.duration; 822 | screenPos.y -= (1 - ratio * ratio) * entry.size * 1.5f; 823 | } 824 | 825 | _textStyle.normal.textColor = entry.color; 826 | _textStyle.fontSize = entry.size; 827 | Rect rect = new Rect(screenPos, _textStyle.CalcSize(entry.content)); 828 | GUI.Label(rect, entry.content, _textStyle); 829 | 830 | return; 831 | } 832 | 833 | private void GUIAttachTextEntry(Camera camera, AttachTextEntry entry) 834 | { 835 | if (entry.transform == null) 836 | return; 837 | 838 | Vector3 worldPos = entry.transform.position + entry.offset; 839 | Vector3 screenPos = camera.WorldToScreenPoint(worldPos); 840 | screenPos.y = Screen.height - screenPos.y; 841 | 842 | _textStyle.normal.textColor = entry.color; 843 | _textStyle.fontSize = entry.size; 844 | Rect rect = new Rect(screenPos, _textStyle.CalcSize(entry.content)); 845 | GUI.Label(rect, entry.content, _textStyle); 846 | 847 | return; 848 | } 849 | 850 | 851 | #if UNITY_EDITOR 852 | private void DrawTextOnDrawGizmos() 853 | { 854 | if (!(Camera.current == Draw.GetDebugDrawCamera() 855 | || Camera.current == UnityEditor.SceneView.lastActiveSceneView.camera)) 856 | return; 857 | 858 | var camera = Camera.current; 859 | if (camera == null) 860 | return; 861 | 862 | UnityEditor.Handles.BeginGUI(); 863 | for (int ix = 0; ix < _drawTextEntries.Count; ix++) 864 | { 865 | var entry = _drawTextEntries[ix]; 866 | if (!entry.occupied) 867 | continue; 868 | 869 | GUIDrawTextEntry(camera, entry); 870 | entry.flag |= DrawFlag.DrawnGizmo; 871 | } 872 | 873 | for (int ix = 0; ix < _attachTextEntries.Count; ix++) 874 | { 875 | var entry = _attachTextEntries[ix]; 876 | if (!entry.occupied) 877 | continue; 878 | 879 | GUIAttachTextEntry(camera, entry); 880 | entry.flag |= DrawFlag.DrawnGizmo; 881 | } 882 | 883 | UnityEditor.Handles.EndGUI(); 884 | 885 | return; 886 | } 887 | #endif 888 | #endregion 889 | } 890 | } 891 | 892 | -------------------------------------------------------------------------------- /Assets/RuntimeDebugDraw.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 36daa5d9d81eb7647b2fdf99d87e4cdb 3 | timeCreated: 1486890329 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 9990 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Sample.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dba5b8dd486660549a08aff49bebeeb0 3 | folderAsset: yes 4 | timeCreated: 1486888089 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/Sample/Cube.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &138072 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 100100000} 8 | serializedVersion: 4 9 | m_Component: 10 | - 4: {fileID: 427018} 11 | - 33: {fileID: 3342462} 12 | - 23: {fileID: 2342206} 13 | - 114: {fileID: 11423220} 14 | m_Layer: 0 15 | m_Name: Cube 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!4 &427018 22 | Transform: 23 | m_ObjectHideFlags: 1 24 | m_PrefabParentObject: {fileID: 0} 25 | m_PrefabInternal: {fileID: 100100000} 26 | m_GameObject: {fileID: 138072} 27 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 28 | m_LocalPosition: {x: 0, y: 0, z: 0} 29 | m_LocalScale: {x: 1, y: 1, z: 1} 30 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | --- !u!23 &2342206 35 | MeshRenderer: 36 | m_ObjectHideFlags: 1 37 | m_PrefabParentObject: {fileID: 0} 38 | m_PrefabInternal: {fileID: 100100000} 39 | m_GameObject: {fileID: 138072} 40 | m_Enabled: 1 41 | m_CastShadows: 1 42 | m_ReceiveShadows: 1 43 | m_Materials: 44 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 45 | m_SubsetIndices: 46 | m_StaticBatchRoot: {fileID: 0} 47 | m_UseLightProbes: 1 48 | m_ReflectionProbeUsage: 1 49 | m_ProbeAnchor: {fileID: 0} 50 | m_ScaleInLightmap: 1 51 | m_PreserveUVs: 1 52 | m_IgnoreNormalsForChartDetection: 0 53 | m_ImportantGI: 0 54 | m_MinimumChartSize: 4 55 | m_AutoUVMaxDistance: 0.5 56 | m_AutoUVMaxAngle: 89 57 | m_LightmapParameters: {fileID: 0} 58 | m_SortingLayerID: 0 59 | m_SortingOrder: 0 60 | --- !u!33 &3342462 61 | MeshFilter: 62 | m_ObjectHideFlags: 1 63 | m_PrefabParentObject: {fileID: 0} 64 | m_PrefabInternal: {fileID: 100100000} 65 | m_GameObject: {fileID: 138072} 66 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 67 | --- !u!114 &11423220 68 | MonoBehaviour: 69 | m_ObjectHideFlags: 1 70 | m_PrefabParentObject: {fileID: 0} 71 | m_PrefabInternal: {fileID: 100100000} 72 | m_GameObject: {fileID: 138072} 73 | m_Enabled: 1 74 | m_EditorHideFlags: 0 75 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 76 | m_Name: 77 | m_EditorClassIdentifier: 78 | --- !u!1001 &100100000 79 | Prefab: 80 | m_ObjectHideFlags: 1 81 | serializedVersion: 2 82 | m_Modification: 83 | m_TransformParent: {fileID: 0} 84 | m_Modifications: [] 85 | m_RemovedComponents: [] 86 | m_ParentPrefab: {fileID: 0} 87 | m_RootGameObject: {fileID: 138072} 88 | m_IsPrefabParent: 1 89 | -------------------------------------------------------------------------------- /Assets/Sample/Cube.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 245ff2907b0b1874e97286ae25b62a13 3 | timeCreated: 1486904916 4 | licenseType: Pro 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Sample/ExampleScript.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using RuntimeDebugDraw; 3 | 4 | public class ExampleScript : MonoBehaviour 5 | { 6 | private Color[] _colors = 7 | { 8 | Color.red, 9 | Color.blue, 10 | Color.cyan, 11 | Color.magenta, 12 | Color.yellow 13 | }; 14 | private int _colorIx; 15 | 16 | private float _timer; 17 | private float _intervalTimer; 18 | 19 | private Vector3 _bornPos; 20 | private static float _bornRadianOffset; 21 | 22 | private Color GetNextColor() 23 | { 24 | _colorIx = (_colorIx + 1) % _colors.Length; 25 | return _colors[_colorIx]; 26 | } 27 | 28 | private void Awake() 29 | { 30 | _bornPos = transform.position; 31 | _timer = _bornRadianOffset; 32 | _bornRadianOffset += Mathf.PI * 0.3f; 33 | 34 | Draw.AttachText(transform, () => transform.position.y.ToString(), Vector3.up, Color.white, 12); 35 | 36 | return; 37 | } 38 | 39 | private void Update() 40 | { 41 | _timer += Time.deltaTime * 1.5f; 42 | 43 | float dx = Mathf.Cos(_timer) * 5f; 44 | float dy = Mathf.Sin(_timer) * 3f; 45 | transform.position = new Vector3(dx, dy, 0) + _bornPos; 46 | 47 | Draw.DrawText(transform.position, transform.position.ToString(), Color.green, 16, 0f, popUp: false); 48 | Draw.DrawLine(Vector3.zero, transform.position, Color.green, 0f, false); 49 | 50 | _intervalTimer += Time.deltaTime; 51 | 52 | if (_intervalTimer > 0.3f) 53 | { 54 | Draw.DrawText(transform.position, Time.frameCount.ToString(), GetNextColor(), 16, 0.5f, popUp: true); 55 | Draw.DrawLine(transform.position, transform.position + Vector3.up * 1.5f, GetNextColor(), 0.5f, true); 56 | _intervalTimer = 0f; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Assets/Sample/ExampleScript.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98289c2953bfaa045bc9e021c97b79ec 3 | timeCreated: 1486901940 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/Sample/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | SceneSettings: 5 | m_ObjectHideFlags: 0 6 | m_PVSData: 7 | m_PVSObjectsArray: [] 8 | m_PVSPortalsArray: [] 9 | m_OcclusionBakeSettings: 10 | smallestOccluder: 5 11 | smallestHole: 0.25 12 | backfaceThreshold: 100 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 6 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SkyboxMaterial: {fileID: 0} 29 | m_HaloStrength: 0.5 30 | m_FlareStrength: 1 31 | m_FlareFadeSpeed: 3 32 | m_HaloTexture: {fileID: 0} 33 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 34 | m_DefaultReflectionMode: 0 35 | m_DefaultReflectionResolution: 128 36 | m_ReflectionBounces: 1 37 | m_ReflectionIntensity: 1 38 | m_CustomReflection: {fileID: 0} 39 | m_Sun: {fileID: 0} 40 | --- !u!157 &3 41 | LightmapSettings: 42 | m_ObjectHideFlags: 0 43 | serializedVersion: 6 44 | m_GIWorkflowMode: 0 45 | m_LightmapsMode: 1 46 | m_GISettings: 47 | serializedVersion: 2 48 | m_BounceScale: 1 49 | m_IndirectOutputScale: 1 50 | m_AlbedoBoost: 1 51 | m_TemporalCoherenceThreshold: 1 52 | m_EnvironmentLightingMode: 0 53 | m_EnableBakedLightmaps: 1 54 | m_EnableRealtimeLightmaps: 1 55 | m_LightmapEditorSettings: 56 | serializedVersion: 3 57 | m_Resolution: 2 58 | m_BakeResolution: 40 59 | m_TextureWidth: 1024 60 | m_TextureHeight: 1024 61 | m_AOMaxDistance: 1 62 | m_Padding: 2 63 | m_CompAOExponent: 0 64 | m_LightmapParameters: {fileID: 0} 65 | m_TextureCompression: 1 66 | m_FinalGather: 0 67 | m_FinalGatherRayCount: 1024 68 | m_ReflectionCompression: 2 69 | m_LightingDataAsset: {fileID: 0} 70 | m_RuntimeCPUUsage: 25 71 | --- !u!196 &4 72 | NavMeshSettings: 73 | serializedVersion: 2 74 | m_ObjectHideFlags: 0 75 | m_BuildSettings: 76 | serializedVersion: 2 77 | agentRadius: 0.5 78 | agentHeight: 2 79 | agentSlope: 45 80 | agentClimb: 0.4 81 | ledgeDropHeight: 0 82 | maxJumpAcrossDistance: 0 83 | accuratePlacement: 0 84 | minRegionArea: 2 85 | cellSize: 0.16666667 86 | manualCellSize: 0 87 | m_NavMeshData: {fileID: 0} 88 | --- !u!1 &67709925 89 | GameObject: 90 | m_ObjectHideFlags: 0 91 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 92 | m_PrefabInternal: {fileID: 2051217410} 93 | serializedVersion: 4 94 | m_Component: 95 | - 4: {fileID: 67709929} 96 | - 33: {fileID: 67709928} 97 | - 23: {fileID: 67709927} 98 | - 114: {fileID: 67709926} 99 | m_Layer: 0 100 | m_Name: Cube (9) 101 | m_TagString: Untagged 102 | m_Icon: {fileID: 0} 103 | m_NavMeshLayer: 0 104 | m_StaticEditorFlags: 0 105 | m_IsActive: 1 106 | --- !u!114 &67709926 107 | MonoBehaviour: 108 | m_ObjectHideFlags: 0 109 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 110 | type: 2} 111 | m_PrefabInternal: {fileID: 2051217410} 112 | m_GameObject: {fileID: 67709925} 113 | m_Enabled: 1 114 | m_EditorHideFlags: 0 115 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 116 | m_Name: 117 | m_EditorClassIdentifier: 118 | --- !u!23 &67709927 119 | MeshRenderer: 120 | m_ObjectHideFlags: 0 121 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 122 | type: 2} 123 | m_PrefabInternal: {fileID: 2051217410} 124 | m_GameObject: {fileID: 67709925} 125 | m_Enabled: 1 126 | m_CastShadows: 1 127 | m_ReceiveShadows: 1 128 | m_Materials: 129 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 130 | m_SubsetIndices: 131 | m_StaticBatchRoot: {fileID: 0} 132 | m_UseLightProbes: 1 133 | m_ReflectionProbeUsage: 1 134 | m_ProbeAnchor: {fileID: 0} 135 | m_ScaleInLightmap: 1 136 | m_PreserveUVs: 1 137 | m_IgnoreNormalsForChartDetection: 0 138 | m_ImportantGI: 0 139 | m_MinimumChartSize: 4 140 | m_AutoUVMaxDistance: 0.5 141 | m_AutoUVMaxAngle: 89 142 | m_LightmapParameters: {fileID: 0} 143 | m_SortingLayerID: 0 144 | m_SortingOrder: 0 145 | --- !u!33 &67709928 146 | MeshFilter: 147 | m_ObjectHideFlags: 0 148 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 149 | type: 2} 150 | m_PrefabInternal: {fileID: 2051217410} 151 | m_GameObject: {fileID: 67709925} 152 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 153 | --- !u!4 &67709929 154 | Transform: 155 | m_ObjectHideFlags: 0 156 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 157 | m_PrefabInternal: {fileID: 2051217410} 158 | m_GameObject: {fileID: 67709925} 159 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 160 | m_LocalPosition: {x: 0, y: 0, z: 0} 161 | m_LocalScale: {x: 1, y: 1, z: 1} 162 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 163 | m_Children: [] 164 | m_Father: {fileID: 0} 165 | m_RootOrder: 11 166 | --- !u!1001 &279266551 167 | Prefab: 168 | m_ObjectHideFlags: 0 169 | serializedVersion: 2 170 | m_Modification: 171 | m_TransformParent: {fileID: 0} 172 | m_Modifications: 173 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 174 | propertyPath: m_LocalPosition.x 175 | value: 0 176 | objectReference: {fileID: 0} 177 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 178 | propertyPath: m_LocalPosition.y 179 | value: 0 180 | objectReference: {fileID: 0} 181 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 182 | propertyPath: m_LocalPosition.z 183 | value: 0 184 | objectReference: {fileID: 0} 185 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 186 | propertyPath: m_LocalRotation.x 187 | value: 0 188 | objectReference: {fileID: 0} 189 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 190 | propertyPath: m_LocalRotation.y 191 | value: 0 192 | objectReference: {fileID: 0} 193 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 194 | propertyPath: m_LocalRotation.z 195 | value: 0 196 | objectReference: {fileID: 0} 197 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 198 | propertyPath: m_LocalRotation.w 199 | value: 1 200 | objectReference: {fileID: 0} 201 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 202 | propertyPath: m_RootOrder 203 | value: 8 204 | objectReference: {fileID: 0} 205 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 206 | propertyPath: m_Name 207 | value: Cube (6) 208 | objectReference: {fileID: 0} 209 | m_RemovedComponents: [] 210 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 211 | m_RootGameObject: {fileID: 700192993} 212 | m_IsPrefabParent: 0 213 | --- !u!1001 &296427004 214 | Prefab: 215 | m_ObjectHideFlags: 0 216 | serializedVersion: 2 217 | m_Modification: 218 | m_TransformParent: {fileID: 0} 219 | m_Modifications: 220 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 221 | propertyPath: m_LocalPosition.x 222 | value: 0 223 | objectReference: {fileID: 0} 224 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 225 | propertyPath: m_LocalPosition.y 226 | value: 0 227 | objectReference: {fileID: 0} 228 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 229 | propertyPath: m_LocalPosition.z 230 | value: 0 231 | objectReference: {fileID: 0} 232 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 233 | propertyPath: m_LocalRotation.x 234 | value: 0 235 | objectReference: {fileID: 0} 236 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 237 | propertyPath: m_LocalRotation.y 238 | value: 0 239 | objectReference: {fileID: 0} 240 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 241 | propertyPath: m_LocalRotation.z 242 | value: 0 243 | objectReference: {fileID: 0} 244 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 245 | propertyPath: m_LocalRotation.w 246 | value: 1 247 | objectReference: {fileID: 0} 248 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 249 | propertyPath: m_RootOrder 250 | value: 5 251 | objectReference: {fileID: 0} 252 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 253 | propertyPath: m_Name 254 | value: Cube (3) 255 | objectReference: {fileID: 0} 256 | m_RemovedComponents: [] 257 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 258 | m_RootGameObject: {fileID: 1778822981} 259 | m_IsPrefabParent: 0 260 | --- !u!1 &414310476 261 | GameObject: 262 | m_ObjectHideFlags: 0 263 | m_PrefabParentObject: {fileID: 0} 264 | m_PrefabInternal: {fileID: 0} 265 | serializedVersion: 4 266 | m_Component: 267 | - 4: {fileID: 414310478} 268 | - 108: {fileID: 414310477} 269 | m_Layer: 0 270 | m_Name: Directional Light 271 | m_TagString: Untagged 272 | m_Icon: {fileID: 0} 273 | m_NavMeshLayer: 0 274 | m_StaticEditorFlags: 0 275 | m_IsActive: 1 276 | --- !u!108 &414310477 277 | Light: 278 | m_ObjectHideFlags: 0 279 | m_PrefabParentObject: {fileID: 0} 280 | m_PrefabInternal: {fileID: 0} 281 | m_GameObject: {fileID: 414310476} 282 | m_Enabled: 1 283 | serializedVersion: 6 284 | m_Type: 1 285 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} 286 | m_Intensity: 1 287 | m_Range: 10 288 | m_SpotAngle: 30 289 | m_CookieSize: 10 290 | m_Shadows: 291 | m_Type: 2 292 | m_Resolution: -1 293 | m_Strength: 1 294 | m_Bias: 0.05 295 | m_NormalBias: 0.4 296 | m_NearPlane: 0.2 297 | m_Cookie: {fileID: 0} 298 | m_DrawHalo: 0 299 | m_Flare: {fileID: 0} 300 | m_RenderMode: 0 301 | m_CullingMask: 302 | serializedVersion: 2 303 | m_Bits: 4294967295 304 | m_Lightmapping: 4 305 | m_BounceIntensity: 1 306 | m_ShadowRadius: 0 307 | m_ShadowAngle: 0 308 | m_AreaSize: {x: 1, y: 1} 309 | --- !u!4 &414310478 310 | Transform: 311 | m_ObjectHideFlags: 0 312 | m_PrefabParentObject: {fileID: 0} 313 | m_PrefabInternal: {fileID: 0} 314 | m_GameObject: {fileID: 414310476} 315 | m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.109381676, w: 0.87542605} 316 | m_LocalPosition: {x: 0, y: 3, z: 0} 317 | m_LocalScale: {x: 1, y: 1, z: 1} 318 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} 319 | m_Children: [] 320 | m_Father: {fileID: 0} 321 | m_RootOrder: 1 322 | --- !u!1 &590662132 323 | GameObject: 324 | m_ObjectHideFlags: 0 325 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 326 | m_PrefabInternal: {fileID: 731079106} 327 | serializedVersion: 4 328 | m_Component: 329 | - 4: {fileID: 590662136} 330 | - 33: {fileID: 590662135} 331 | - 23: {fileID: 590662134} 332 | - 114: {fileID: 590662133} 333 | m_Layer: 0 334 | m_Name: Cube (2) 335 | m_TagString: Untagged 336 | m_Icon: {fileID: 0} 337 | m_NavMeshLayer: 0 338 | m_StaticEditorFlags: 0 339 | m_IsActive: 1 340 | --- !u!114 &590662133 341 | MonoBehaviour: 342 | m_ObjectHideFlags: 0 343 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 344 | type: 2} 345 | m_PrefabInternal: {fileID: 731079106} 346 | m_GameObject: {fileID: 590662132} 347 | m_Enabled: 1 348 | m_EditorHideFlags: 0 349 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 350 | m_Name: 351 | m_EditorClassIdentifier: 352 | --- !u!23 &590662134 353 | MeshRenderer: 354 | m_ObjectHideFlags: 0 355 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 356 | type: 2} 357 | m_PrefabInternal: {fileID: 731079106} 358 | m_GameObject: {fileID: 590662132} 359 | m_Enabled: 1 360 | m_CastShadows: 1 361 | m_ReceiveShadows: 1 362 | m_Materials: 363 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 364 | m_SubsetIndices: 365 | m_StaticBatchRoot: {fileID: 0} 366 | m_UseLightProbes: 1 367 | m_ReflectionProbeUsage: 1 368 | m_ProbeAnchor: {fileID: 0} 369 | m_ScaleInLightmap: 1 370 | m_PreserveUVs: 1 371 | m_IgnoreNormalsForChartDetection: 0 372 | m_ImportantGI: 0 373 | m_MinimumChartSize: 4 374 | m_AutoUVMaxDistance: 0.5 375 | m_AutoUVMaxAngle: 89 376 | m_LightmapParameters: {fileID: 0} 377 | m_SortingLayerID: 0 378 | m_SortingOrder: 0 379 | --- !u!33 &590662135 380 | MeshFilter: 381 | m_ObjectHideFlags: 0 382 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 383 | type: 2} 384 | m_PrefabInternal: {fileID: 731079106} 385 | m_GameObject: {fileID: 590662132} 386 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 387 | --- !u!4 &590662136 388 | Transform: 389 | m_ObjectHideFlags: 0 390 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 391 | m_PrefabInternal: {fileID: 731079106} 392 | m_GameObject: {fileID: 590662132} 393 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 394 | m_LocalPosition: {x: 0, y: 0, z: 0} 395 | m_LocalScale: {x: 1, y: 1, z: 1} 396 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 397 | m_Children: [] 398 | m_Father: {fileID: 0} 399 | m_RootOrder: 4 400 | --- !u!1 &602462429 401 | GameObject: 402 | m_ObjectHideFlags: 0 403 | m_PrefabParentObject: {fileID: 0} 404 | m_PrefabInternal: {fileID: 0} 405 | serializedVersion: 4 406 | m_Component: 407 | - 4: {fileID: 602462434} 408 | - 20: {fileID: 602462433} 409 | - 92: {fileID: 602462432} 410 | - 124: {fileID: 602462431} 411 | - 81: {fileID: 602462430} 412 | m_Layer: 0 413 | m_Name: Main Camera 414 | m_TagString: MainCamera 415 | m_Icon: {fileID: 0} 416 | m_NavMeshLayer: 0 417 | m_StaticEditorFlags: 0 418 | m_IsActive: 1 419 | --- !u!81 &602462430 420 | AudioListener: 421 | m_ObjectHideFlags: 0 422 | m_PrefabParentObject: {fileID: 0} 423 | m_PrefabInternal: {fileID: 0} 424 | m_GameObject: {fileID: 602462429} 425 | m_Enabled: 1 426 | --- !u!124 &602462431 427 | Behaviour: 428 | m_ObjectHideFlags: 0 429 | m_PrefabParentObject: {fileID: 0} 430 | m_PrefabInternal: {fileID: 0} 431 | m_GameObject: {fileID: 602462429} 432 | m_Enabled: 1 433 | --- !u!92 &602462432 434 | Behaviour: 435 | m_ObjectHideFlags: 0 436 | m_PrefabParentObject: {fileID: 0} 437 | m_PrefabInternal: {fileID: 0} 438 | m_GameObject: {fileID: 602462429} 439 | m_Enabled: 1 440 | --- !u!20 &602462433 441 | Camera: 442 | m_ObjectHideFlags: 0 443 | m_PrefabParentObject: {fileID: 0} 444 | m_PrefabInternal: {fileID: 0} 445 | m_GameObject: {fileID: 602462429} 446 | m_Enabled: 1 447 | serializedVersion: 2 448 | m_ClearFlags: 1 449 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} 450 | m_NormalizedViewPortRect: 451 | serializedVersion: 2 452 | x: 0 453 | y: 0 454 | width: 1 455 | height: 1 456 | near clip plane: 0.3 457 | far clip plane: 1000 458 | field of view: 60 459 | orthographic: 0 460 | orthographic size: 5 461 | m_Depth: -1 462 | m_CullingMask: 463 | serializedVersion: 2 464 | m_Bits: 4294967295 465 | m_RenderingPath: -1 466 | m_TargetTexture: {fileID: 0} 467 | m_TargetDisplay: 0 468 | m_TargetEye: 3 469 | m_HDR: 0 470 | m_OcclusionCulling: 1 471 | m_StereoConvergence: 10 472 | m_StereoSeparation: 0.022 473 | m_StereoMirrorMode: 0 474 | --- !u!4 &602462434 475 | Transform: 476 | m_ObjectHideFlags: 0 477 | m_PrefabParentObject: {fileID: 0} 478 | m_PrefabInternal: {fileID: 0} 479 | m_GameObject: {fileID: 602462429} 480 | m_LocalRotation: {x: 0.099340685, y: 0.3919934, z: -0.042621665, w: 0.9135951} 481 | m_LocalPosition: {x: -6.63, y: 2.02, z: -5.03} 482 | m_LocalScale: {x: 1, y: 1, z: 1} 483 | m_LocalEulerAnglesHint: {x: 12.4114, y: 46.445198, z: 0.0002} 484 | m_Children: [] 485 | m_Father: {fileID: 0} 486 | m_RootOrder: 0 487 | --- !u!1001 &643371833 488 | Prefab: 489 | m_ObjectHideFlags: 0 490 | serializedVersion: 2 491 | m_Modification: 492 | m_TransformParent: {fileID: 0} 493 | m_Modifications: 494 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 495 | propertyPath: m_LocalPosition.x 496 | value: 0 497 | objectReference: {fileID: 0} 498 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 499 | propertyPath: m_LocalPosition.y 500 | value: 0 501 | objectReference: {fileID: 0} 502 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 503 | propertyPath: m_LocalPosition.z 504 | value: 0 505 | objectReference: {fileID: 0} 506 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 507 | propertyPath: m_LocalRotation.x 508 | value: 0 509 | objectReference: {fileID: 0} 510 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 511 | propertyPath: m_LocalRotation.y 512 | value: 0 513 | objectReference: {fileID: 0} 514 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 515 | propertyPath: m_LocalRotation.z 516 | value: 0 517 | objectReference: {fileID: 0} 518 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 519 | propertyPath: m_LocalRotation.w 520 | value: 1 521 | objectReference: {fileID: 0} 522 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 523 | propertyPath: m_RootOrder 524 | value: 9 525 | objectReference: {fileID: 0} 526 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 527 | propertyPath: m_Name 528 | value: Cube (7) 529 | objectReference: {fileID: 0} 530 | m_RemovedComponents: [] 531 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 532 | m_RootGameObject: {fileID: 688380986} 533 | m_IsPrefabParent: 0 534 | --- !u!1 &688380986 535 | GameObject: 536 | m_ObjectHideFlags: 0 537 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 538 | m_PrefabInternal: {fileID: 643371833} 539 | serializedVersion: 4 540 | m_Component: 541 | - 4: {fileID: 688380990} 542 | - 33: {fileID: 688380989} 543 | - 23: {fileID: 688380988} 544 | - 114: {fileID: 688380987} 545 | m_Layer: 0 546 | m_Name: Cube (7) 547 | m_TagString: Untagged 548 | m_Icon: {fileID: 0} 549 | m_NavMeshLayer: 0 550 | m_StaticEditorFlags: 0 551 | m_IsActive: 1 552 | --- !u!114 &688380987 553 | MonoBehaviour: 554 | m_ObjectHideFlags: 0 555 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 556 | type: 2} 557 | m_PrefabInternal: {fileID: 643371833} 558 | m_GameObject: {fileID: 688380986} 559 | m_Enabled: 1 560 | m_EditorHideFlags: 0 561 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 562 | m_Name: 563 | m_EditorClassIdentifier: 564 | --- !u!23 &688380988 565 | MeshRenderer: 566 | m_ObjectHideFlags: 0 567 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 568 | type: 2} 569 | m_PrefabInternal: {fileID: 643371833} 570 | m_GameObject: {fileID: 688380986} 571 | m_Enabled: 1 572 | m_CastShadows: 1 573 | m_ReceiveShadows: 1 574 | m_Materials: 575 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 576 | m_SubsetIndices: 577 | m_StaticBatchRoot: {fileID: 0} 578 | m_UseLightProbes: 1 579 | m_ReflectionProbeUsage: 1 580 | m_ProbeAnchor: {fileID: 0} 581 | m_ScaleInLightmap: 1 582 | m_PreserveUVs: 1 583 | m_IgnoreNormalsForChartDetection: 0 584 | m_ImportantGI: 0 585 | m_MinimumChartSize: 4 586 | m_AutoUVMaxDistance: 0.5 587 | m_AutoUVMaxAngle: 89 588 | m_LightmapParameters: {fileID: 0} 589 | m_SortingLayerID: 0 590 | m_SortingOrder: 0 591 | --- !u!33 &688380989 592 | MeshFilter: 593 | m_ObjectHideFlags: 0 594 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 595 | type: 2} 596 | m_PrefabInternal: {fileID: 643371833} 597 | m_GameObject: {fileID: 688380986} 598 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 599 | --- !u!4 &688380990 600 | Transform: 601 | m_ObjectHideFlags: 0 602 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 603 | m_PrefabInternal: {fileID: 643371833} 604 | m_GameObject: {fileID: 688380986} 605 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 606 | m_LocalPosition: {x: 0, y: 0, z: 0} 607 | m_LocalScale: {x: 1, y: 1, z: 1} 608 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 609 | m_Children: [] 610 | m_Father: {fileID: 0} 611 | m_RootOrder: 9 612 | --- !u!1 &700192993 613 | GameObject: 614 | m_ObjectHideFlags: 0 615 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 616 | m_PrefabInternal: {fileID: 279266551} 617 | serializedVersion: 4 618 | m_Component: 619 | - 4: {fileID: 700192997} 620 | - 33: {fileID: 700192996} 621 | - 23: {fileID: 700192995} 622 | - 114: {fileID: 700192994} 623 | m_Layer: 0 624 | m_Name: Cube (6) 625 | m_TagString: Untagged 626 | m_Icon: {fileID: 0} 627 | m_NavMeshLayer: 0 628 | m_StaticEditorFlags: 0 629 | m_IsActive: 1 630 | --- !u!114 &700192994 631 | MonoBehaviour: 632 | m_ObjectHideFlags: 0 633 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 634 | type: 2} 635 | m_PrefabInternal: {fileID: 279266551} 636 | m_GameObject: {fileID: 700192993} 637 | m_Enabled: 1 638 | m_EditorHideFlags: 0 639 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 640 | m_Name: 641 | m_EditorClassIdentifier: 642 | --- !u!23 &700192995 643 | MeshRenderer: 644 | m_ObjectHideFlags: 0 645 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 646 | type: 2} 647 | m_PrefabInternal: {fileID: 279266551} 648 | m_GameObject: {fileID: 700192993} 649 | m_Enabled: 1 650 | m_CastShadows: 1 651 | m_ReceiveShadows: 1 652 | m_Materials: 653 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 654 | m_SubsetIndices: 655 | m_StaticBatchRoot: {fileID: 0} 656 | m_UseLightProbes: 1 657 | m_ReflectionProbeUsage: 1 658 | m_ProbeAnchor: {fileID: 0} 659 | m_ScaleInLightmap: 1 660 | m_PreserveUVs: 1 661 | m_IgnoreNormalsForChartDetection: 0 662 | m_ImportantGI: 0 663 | m_MinimumChartSize: 4 664 | m_AutoUVMaxDistance: 0.5 665 | m_AutoUVMaxAngle: 89 666 | m_LightmapParameters: {fileID: 0} 667 | m_SortingLayerID: 0 668 | m_SortingOrder: 0 669 | --- !u!33 &700192996 670 | MeshFilter: 671 | m_ObjectHideFlags: 0 672 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 673 | type: 2} 674 | m_PrefabInternal: {fileID: 279266551} 675 | m_GameObject: {fileID: 700192993} 676 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 677 | --- !u!4 &700192997 678 | Transform: 679 | m_ObjectHideFlags: 0 680 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 681 | m_PrefabInternal: {fileID: 279266551} 682 | m_GameObject: {fileID: 700192993} 683 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 684 | m_LocalPosition: {x: 0, y: 0, z: 0} 685 | m_LocalScale: {x: 1, y: 1, z: 1} 686 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 687 | m_Children: [] 688 | m_Father: {fileID: 0} 689 | m_RootOrder: 8 690 | --- !u!1001 &731079106 691 | Prefab: 692 | m_ObjectHideFlags: 0 693 | serializedVersion: 2 694 | m_Modification: 695 | m_TransformParent: {fileID: 0} 696 | m_Modifications: 697 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 698 | propertyPath: m_LocalPosition.x 699 | value: 0 700 | objectReference: {fileID: 0} 701 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 702 | propertyPath: m_LocalPosition.y 703 | value: 0 704 | objectReference: {fileID: 0} 705 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 706 | propertyPath: m_LocalPosition.z 707 | value: 0 708 | objectReference: {fileID: 0} 709 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 710 | propertyPath: m_LocalRotation.x 711 | value: 0 712 | objectReference: {fileID: 0} 713 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 714 | propertyPath: m_LocalRotation.y 715 | value: 0 716 | objectReference: {fileID: 0} 717 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 718 | propertyPath: m_LocalRotation.z 719 | value: 0 720 | objectReference: {fileID: 0} 721 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 722 | propertyPath: m_LocalRotation.w 723 | value: 1 724 | objectReference: {fileID: 0} 725 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 726 | propertyPath: m_RootOrder 727 | value: 4 728 | objectReference: {fileID: 0} 729 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 730 | propertyPath: m_Name 731 | value: Cube (2) 732 | objectReference: {fileID: 0} 733 | m_RemovedComponents: [] 734 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 735 | m_RootGameObject: {fileID: 590662132} 736 | m_IsPrefabParent: 0 737 | --- !u!1 &988446500 738 | GameObject: 739 | m_ObjectHideFlags: 0 740 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 741 | m_PrefabInternal: {fileID: 1595590369} 742 | serializedVersion: 4 743 | m_Component: 744 | - 4: {fileID: 988446504} 745 | - 33: {fileID: 988446503} 746 | - 23: {fileID: 988446502} 747 | - 114: {fileID: 988446501} 748 | m_Layer: 0 749 | m_Name: Cube 750 | m_TagString: Untagged 751 | m_Icon: {fileID: 0} 752 | m_NavMeshLayer: 0 753 | m_StaticEditorFlags: 0 754 | m_IsActive: 1 755 | --- !u!114 &988446501 756 | MonoBehaviour: 757 | m_ObjectHideFlags: 0 758 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 759 | type: 2} 760 | m_PrefabInternal: {fileID: 1595590369} 761 | m_GameObject: {fileID: 988446500} 762 | m_Enabled: 1 763 | m_EditorHideFlags: 0 764 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 765 | m_Name: 766 | m_EditorClassIdentifier: 767 | --- !u!23 &988446502 768 | MeshRenderer: 769 | m_ObjectHideFlags: 0 770 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 771 | type: 2} 772 | m_PrefabInternal: {fileID: 1595590369} 773 | m_GameObject: {fileID: 988446500} 774 | m_Enabled: 1 775 | m_CastShadows: 1 776 | m_ReceiveShadows: 1 777 | m_Materials: 778 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 779 | m_SubsetIndices: 780 | m_StaticBatchRoot: {fileID: 0} 781 | m_UseLightProbes: 1 782 | m_ReflectionProbeUsage: 1 783 | m_ProbeAnchor: {fileID: 0} 784 | m_ScaleInLightmap: 1 785 | m_PreserveUVs: 1 786 | m_IgnoreNormalsForChartDetection: 0 787 | m_ImportantGI: 0 788 | m_MinimumChartSize: 4 789 | m_AutoUVMaxDistance: 0.5 790 | m_AutoUVMaxAngle: 89 791 | m_LightmapParameters: {fileID: 0} 792 | m_SortingLayerID: 0 793 | m_SortingOrder: 0 794 | --- !u!33 &988446503 795 | MeshFilter: 796 | m_ObjectHideFlags: 0 797 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 798 | type: 2} 799 | m_PrefabInternal: {fileID: 1595590369} 800 | m_GameObject: {fileID: 988446500} 801 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 802 | --- !u!4 &988446504 803 | Transform: 804 | m_ObjectHideFlags: 0 805 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 806 | m_PrefabInternal: {fileID: 1595590369} 807 | m_GameObject: {fileID: 988446500} 808 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 809 | m_LocalPosition: {x: 0, y: 0, z: 0} 810 | m_LocalScale: {x: 1, y: 1, z: 1} 811 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 812 | m_Children: [] 813 | m_Father: {fileID: 0} 814 | m_RootOrder: 2 815 | --- !u!1 &1022666670 816 | GameObject: 817 | m_ObjectHideFlags: 0 818 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 819 | m_PrefabInternal: {fileID: 2076102233} 820 | serializedVersion: 4 821 | m_Component: 822 | - 4: {fileID: 1022666674} 823 | - 33: {fileID: 1022666673} 824 | - 23: {fileID: 1022666672} 825 | - 114: {fileID: 1022666671} 826 | m_Layer: 0 827 | m_Name: Cube (8) 828 | m_TagString: Untagged 829 | m_Icon: {fileID: 0} 830 | m_NavMeshLayer: 0 831 | m_StaticEditorFlags: 0 832 | m_IsActive: 1 833 | --- !u!114 &1022666671 834 | MonoBehaviour: 835 | m_ObjectHideFlags: 0 836 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 837 | type: 2} 838 | m_PrefabInternal: {fileID: 2076102233} 839 | m_GameObject: {fileID: 1022666670} 840 | m_Enabled: 1 841 | m_EditorHideFlags: 0 842 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 843 | m_Name: 844 | m_EditorClassIdentifier: 845 | --- !u!23 &1022666672 846 | MeshRenderer: 847 | m_ObjectHideFlags: 0 848 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 849 | type: 2} 850 | m_PrefabInternal: {fileID: 2076102233} 851 | m_GameObject: {fileID: 1022666670} 852 | m_Enabled: 1 853 | m_CastShadows: 1 854 | m_ReceiveShadows: 1 855 | m_Materials: 856 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 857 | m_SubsetIndices: 858 | m_StaticBatchRoot: {fileID: 0} 859 | m_UseLightProbes: 1 860 | m_ReflectionProbeUsage: 1 861 | m_ProbeAnchor: {fileID: 0} 862 | m_ScaleInLightmap: 1 863 | m_PreserveUVs: 1 864 | m_IgnoreNormalsForChartDetection: 0 865 | m_ImportantGI: 0 866 | m_MinimumChartSize: 4 867 | m_AutoUVMaxDistance: 0.5 868 | m_AutoUVMaxAngle: 89 869 | m_LightmapParameters: {fileID: 0} 870 | m_SortingLayerID: 0 871 | m_SortingOrder: 0 872 | --- !u!33 &1022666673 873 | MeshFilter: 874 | m_ObjectHideFlags: 0 875 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 876 | type: 2} 877 | m_PrefabInternal: {fileID: 2076102233} 878 | m_GameObject: {fileID: 1022666670} 879 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 880 | --- !u!4 &1022666674 881 | Transform: 882 | m_ObjectHideFlags: 0 883 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 884 | m_PrefabInternal: {fileID: 2076102233} 885 | m_GameObject: {fileID: 1022666670} 886 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 887 | m_LocalPosition: {x: 0, y: 0, z: 0} 888 | m_LocalScale: {x: 1, y: 1, z: 1} 889 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 890 | m_Children: [] 891 | m_Father: {fileID: 0} 892 | m_RootOrder: 10 893 | --- !u!1001 &1595590369 894 | Prefab: 895 | m_ObjectHideFlags: 0 896 | serializedVersion: 2 897 | m_Modification: 898 | m_TransformParent: {fileID: 0} 899 | m_Modifications: 900 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 901 | propertyPath: m_LocalPosition.x 902 | value: 0 903 | objectReference: {fileID: 0} 904 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 905 | propertyPath: m_LocalPosition.y 906 | value: 0 907 | objectReference: {fileID: 0} 908 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 909 | propertyPath: m_LocalPosition.z 910 | value: 0 911 | objectReference: {fileID: 0} 912 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 913 | propertyPath: m_LocalRotation.x 914 | value: 0 915 | objectReference: {fileID: 0} 916 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 917 | propertyPath: m_LocalRotation.y 918 | value: 0 919 | objectReference: {fileID: 0} 920 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 921 | propertyPath: m_LocalRotation.z 922 | value: 0 923 | objectReference: {fileID: 0} 924 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 925 | propertyPath: m_LocalRotation.w 926 | value: 1 927 | objectReference: {fileID: 0} 928 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 929 | propertyPath: m_RootOrder 930 | value: 2 931 | objectReference: {fileID: 0} 932 | m_RemovedComponents: [] 933 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 934 | m_RootGameObject: {fileID: 988446500} 935 | m_IsPrefabParent: 0 936 | --- !u!1 &1680300080 937 | GameObject: 938 | m_ObjectHideFlags: 0 939 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 940 | m_PrefabInternal: {fileID: 1925504489} 941 | serializedVersion: 4 942 | m_Component: 943 | - 4: {fileID: 1680300084} 944 | - 33: {fileID: 1680300083} 945 | - 23: {fileID: 1680300082} 946 | - 114: {fileID: 1680300081} 947 | m_Layer: 0 948 | m_Name: Cube (5) 949 | m_TagString: Untagged 950 | m_Icon: {fileID: 0} 951 | m_NavMeshLayer: 0 952 | m_StaticEditorFlags: 0 953 | m_IsActive: 1 954 | --- !u!114 &1680300081 955 | MonoBehaviour: 956 | m_ObjectHideFlags: 0 957 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 958 | type: 2} 959 | m_PrefabInternal: {fileID: 1925504489} 960 | m_GameObject: {fileID: 1680300080} 961 | m_Enabled: 1 962 | m_EditorHideFlags: 0 963 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 964 | m_Name: 965 | m_EditorClassIdentifier: 966 | --- !u!23 &1680300082 967 | MeshRenderer: 968 | m_ObjectHideFlags: 0 969 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 970 | type: 2} 971 | m_PrefabInternal: {fileID: 1925504489} 972 | m_GameObject: {fileID: 1680300080} 973 | m_Enabled: 1 974 | m_CastShadows: 1 975 | m_ReceiveShadows: 1 976 | m_Materials: 977 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 978 | m_SubsetIndices: 979 | m_StaticBatchRoot: {fileID: 0} 980 | m_UseLightProbes: 1 981 | m_ReflectionProbeUsage: 1 982 | m_ProbeAnchor: {fileID: 0} 983 | m_ScaleInLightmap: 1 984 | m_PreserveUVs: 1 985 | m_IgnoreNormalsForChartDetection: 0 986 | m_ImportantGI: 0 987 | m_MinimumChartSize: 4 988 | m_AutoUVMaxDistance: 0.5 989 | m_AutoUVMaxAngle: 89 990 | m_LightmapParameters: {fileID: 0} 991 | m_SortingLayerID: 0 992 | m_SortingOrder: 0 993 | --- !u!33 &1680300083 994 | MeshFilter: 995 | m_ObjectHideFlags: 0 996 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 997 | type: 2} 998 | m_PrefabInternal: {fileID: 1925504489} 999 | m_GameObject: {fileID: 1680300080} 1000 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 1001 | --- !u!4 &1680300084 1002 | Transform: 1003 | m_ObjectHideFlags: 0 1004 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1005 | m_PrefabInternal: {fileID: 1925504489} 1006 | m_GameObject: {fileID: 1680300080} 1007 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1008 | m_LocalPosition: {x: 0, y: 0, z: 0} 1009 | m_LocalScale: {x: 1, y: 1, z: 1} 1010 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1011 | m_Children: [] 1012 | m_Father: {fileID: 0} 1013 | m_RootOrder: 7 1014 | --- !u!1 &1778822981 1015 | GameObject: 1016 | m_ObjectHideFlags: 0 1017 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1018 | m_PrefabInternal: {fileID: 296427004} 1019 | serializedVersion: 4 1020 | m_Component: 1021 | - 4: {fileID: 1778822985} 1022 | - 33: {fileID: 1778822984} 1023 | - 23: {fileID: 1778822983} 1024 | - 114: {fileID: 1778822982} 1025 | m_Layer: 0 1026 | m_Name: Cube (3) 1027 | m_TagString: Untagged 1028 | m_Icon: {fileID: 0} 1029 | m_NavMeshLayer: 0 1030 | m_StaticEditorFlags: 0 1031 | m_IsActive: 1 1032 | --- !u!114 &1778822982 1033 | MonoBehaviour: 1034 | m_ObjectHideFlags: 0 1035 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 1036 | type: 2} 1037 | m_PrefabInternal: {fileID: 296427004} 1038 | m_GameObject: {fileID: 1778822981} 1039 | m_Enabled: 1 1040 | m_EditorHideFlags: 0 1041 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 1042 | m_Name: 1043 | m_EditorClassIdentifier: 1044 | --- !u!23 &1778822983 1045 | MeshRenderer: 1046 | m_ObjectHideFlags: 0 1047 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 1048 | type: 2} 1049 | m_PrefabInternal: {fileID: 296427004} 1050 | m_GameObject: {fileID: 1778822981} 1051 | m_Enabled: 1 1052 | m_CastShadows: 1 1053 | m_ReceiveShadows: 1 1054 | m_Materials: 1055 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 1056 | m_SubsetIndices: 1057 | m_StaticBatchRoot: {fileID: 0} 1058 | m_UseLightProbes: 1 1059 | m_ReflectionProbeUsage: 1 1060 | m_ProbeAnchor: {fileID: 0} 1061 | m_ScaleInLightmap: 1 1062 | m_PreserveUVs: 1 1063 | m_IgnoreNormalsForChartDetection: 0 1064 | m_ImportantGI: 0 1065 | m_MinimumChartSize: 4 1066 | m_AutoUVMaxDistance: 0.5 1067 | m_AutoUVMaxAngle: 89 1068 | m_LightmapParameters: {fileID: 0} 1069 | m_SortingLayerID: 0 1070 | m_SortingOrder: 0 1071 | --- !u!33 &1778822984 1072 | MeshFilter: 1073 | m_ObjectHideFlags: 0 1074 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 1075 | type: 2} 1076 | m_PrefabInternal: {fileID: 296427004} 1077 | m_GameObject: {fileID: 1778822981} 1078 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 1079 | --- !u!4 &1778822985 1080 | Transform: 1081 | m_ObjectHideFlags: 0 1082 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1083 | m_PrefabInternal: {fileID: 296427004} 1084 | m_GameObject: {fileID: 1778822981} 1085 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1086 | m_LocalPosition: {x: 0, y: 0, z: 0} 1087 | m_LocalScale: {x: 1, y: 1, z: 1} 1088 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1089 | m_Children: [] 1090 | m_Father: {fileID: 0} 1091 | m_RootOrder: 5 1092 | --- !u!1001 &1925504489 1093 | Prefab: 1094 | m_ObjectHideFlags: 0 1095 | serializedVersion: 2 1096 | m_Modification: 1097 | m_TransformParent: {fileID: 0} 1098 | m_Modifications: 1099 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1100 | propertyPath: m_LocalPosition.x 1101 | value: 0 1102 | objectReference: {fileID: 0} 1103 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1104 | propertyPath: m_LocalPosition.y 1105 | value: 0 1106 | objectReference: {fileID: 0} 1107 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1108 | propertyPath: m_LocalPosition.z 1109 | value: 0 1110 | objectReference: {fileID: 0} 1111 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1112 | propertyPath: m_LocalRotation.x 1113 | value: 0 1114 | objectReference: {fileID: 0} 1115 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1116 | propertyPath: m_LocalRotation.y 1117 | value: 0 1118 | objectReference: {fileID: 0} 1119 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1120 | propertyPath: m_LocalRotation.z 1121 | value: 0 1122 | objectReference: {fileID: 0} 1123 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1124 | propertyPath: m_LocalRotation.w 1125 | value: 1 1126 | objectReference: {fileID: 0} 1127 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1128 | propertyPath: m_RootOrder 1129 | value: 7 1130 | objectReference: {fileID: 0} 1131 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1132 | propertyPath: m_Name 1133 | value: Cube (5) 1134 | objectReference: {fileID: 0} 1135 | m_RemovedComponents: [] 1136 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1137 | m_RootGameObject: {fileID: 1680300080} 1138 | m_IsPrefabParent: 0 1139 | --- !u!1001 &2051217410 1140 | Prefab: 1141 | m_ObjectHideFlags: 0 1142 | serializedVersion: 2 1143 | m_Modification: 1144 | m_TransformParent: {fileID: 0} 1145 | m_Modifications: 1146 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1147 | propertyPath: m_LocalPosition.x 1148 | value: 0 1149 | objectReference: {fileID: 0} 1150 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1151 | propertyPath: m_LocalPosition.y 1152 | value: 0 1153 | objectReference: {fileID: 0} 1154 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1155 | propertyPath: m_LocalPosition.z 1156 | value: 0 1157 | objectReference: {fileID: 0} 1158 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1159 | propertyPath: m_LocalRotation.x 1160 | value: 0 1161 | objectReference: {fileID: 0} 1162 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1163 | propertyPath: m_LocalRotation.y 1164 | value: 0 1165 | objectReference: {fileID: 0} 1166 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1167 | propertyPath: m_LocalRotation.z 1168 | value: 0 1169 | objectReference: {fileID: 0} 1170 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1171 | propertyPath: m_LocalRotation.w 1172 | value: 1 1173 | objectReference: {fileID: 0} 1174 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1175 | propertyPath: m_RootOrder 1176 | value: 11 1177 | objectReference: {fileID: 0} 1178 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1179 | propertyPath: m_Name 1180 | value: Cube (9) 1181 | objectReference: {fileID: 0} 1182 | m_RemovedComponents: [] 1183 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1184 | m_RootGameObject: {fileID: 67709925} 1185 | m_IsPrefabParent: 0 1186 | --- !u!1001 &2076102233 1187 | Prefab: 1188 | m_ObjectHideFlags: 0 1189 | serializedVersion: 2 1190 | m_Modification: 1191 | m_TransformParent: {fileID: 0} 1192 | m_Modifications: 1193 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1194 | propertyPath: m_LocalPosition.x 1195 | value: 0 1196 | objectReference: {fileID: 0} 1197 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1198 | propertyPath: m_LocalPosition.y 1199 | value: 0 1200 | objectReference: {fileID: 0} 1201 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1202 | propertyPath: m_LocalPosition.z 1203 | value: 0 1204 | objectReference: {fileID: 0} 1205 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1206 | propertyPath: m_LocalRotation.x 1207 | value: 0 1208 | objectReference: {fileID: 0} 1209 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1210 | propertyPath: m_LocalRotation.y 1211 | value: 0 1212 | objectReference: {fileID: 0} 1213 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1214 | propertyPath: m_LocalRotation.z 1215 | value: 0 1216 | objectReference: {fileID: 0} 1217 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1218 | propertyPath: m_LocalRotation.w 1219 | value: 1 1220 | objectReference: {fileID: 0} 1221 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1222 | propertyPath: m_RootOrder 1223 | value: 10 1224 | objectReference: {fileID: 0} 1225 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1226 | propertyPath: m_Name 1227 | value: Cube (8) 1228 | objectReference: {fileID: 0} 1229 | m_RemovedComponents: [] 1230 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1231 | m_RootGameObject: {fileID: 1022666670} 1232 | m_IsPrefabParent: 0 1233 | --- !u!1 &2106389370 1234 | GameObject: 1235 | m_ObjectHideFlags: 0 1236 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1237 | m_PrefabInternal: {fileID: 2146224844} 1238 | serializedVersion: 4 1239 | m_Component: 1240 | - 4: {fileID: 2106389374} 1241 | - 33: {fileID: 2106389373} 1242 | - 23: {fileID: 2106389372} 1243 | - 114: {fileID: 2106389371} 1244 | m_Layer: 0 1245 | m_Name: Cube (1) 1246 | m_TagString: Untagged 1247 | m_Icon: {fileID: 0} 1248 | m_NavMeshLayer: 0 1249 | m_StaticEditorFlags: 0 1250 | m_IsActive: 1 1251 | --- !u!114 &2106389371 1252 | MonoBehaviour: 1253 | m_ObjectHideFlags: 0 1254 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 1255 | type: 2} 1256 | m_PrefabInternal: {fileID: 2146224844} 1257 | m_GameObject: {fileID: 2106389370} 1258 | m_Enabled: 1 1259 | m_EditorHideFlags: 0 1260 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 1261 | m_Name: 1262 | m_EditorClassIdentifier: 1263 | --- !u!23 &2106389372 1264 | MeshRenderer: 1265 | m_ObjectHideFlags: 0 1266 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 1267 | type: 2} 1268 | m_PrefabInternal: {fileID: 2146224844} 1269 | m_GameObject: {fileID: 2106389370} 1270 | m_Enabled: 1 1271 | m_CastShadows: 1 1272 | m_ReceiveShadows: 1 1273 | m_Materials: 1274 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 1275 | m_SubsetIndices: 1276 | m_StaticBatchRoot: {fileID: 0} 1277 | m_UseLightProbes: 1 1278 | m_ReflectionProbeUsage: 1 1279 | m_ProbeAnchor: {fileID: 0} 1280 | m_ScaleInLightmap: 1 1281 | m_PreserveUVs: 1 1282 | m_IgnoreNormalsForChartDetection: 0 1283 | m_ImportantGI: 0 1284 | m_MinimumChartSize: 4 1285 | m_AutoUVMaxDistance: 0.5 1286 | m_AutoUVMaxAngle: 89 1287 | m_LightmapParameters: {fileID: 0} 1288 | m_SortingLayerID: 0 1289 | m_SortingOrder: 0 1290 | --- !u!33 &2106389373 1291 | MeshFilter: 1292 | m_ObjectHideFlags: 0 1293 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 1294 | type: 2} 1295 | m_PrefabInternal: {fileID: 2146224844} 1296 | m_GameObject: {fileID: 2106389370} 1297 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 1298 | --- !u!4 &2106389374 1299 | Transform: 1300 | m_ObjectHideFlags: 0 1301 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1302 | m_PrefabInternal: {fileID: 2146224844} 1303 | m_GameObject: {fileID: 2106389370} 1304 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1305 | m_LocalPosition: {x: 0, y: 0, z: 0} 1306 | m_LocalScale: {x: 1, y: 1, z: 1} 1307 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1308 | m_Children: [] 1309 | m_Father: {fileID: 0} 1310 | m_RootOrder: 3 1311 | --- !u!1 &2113358541 1312 | GameObject: 1313 | m_ObjectHideFlags: 0 1314 | m_PrefabParentObject: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1315 | m_PrefabInternal: {fileID: 2139429358} 1316 | serializedVersion: 4 1317 | m_Component: 1318 | - 4: {fileID: 2113358545} 1319 | - 33: {fileID: 2113358544} 1320 | - 23: {fileID: 2113358543} 1321 | - 114: {fileID: 2113358542} 1322 | m_Layer: 0 1323 | m_Name: Cube (4) 1324 | m_TagString: Untagged 1325 | m_Icon: {fileID: 0} 1326 | m_NavMeshLayer: 0 1327 | m_StaticEditorFlags: 0 1328 | m_IsActive: 1 1329 | --- !u!114 &2113358542 1330 | MonoBehaviour: 1331 | m_ObjectHideFlags: 0 1332 | m_PrefabParentObject: {fileID: 11423220, guid: 245ff2907b0b1874e97286ae25b62a13, 1333 | type: 2} 1334 | m_PrefabInternal: {fileID: 2139429358} 1335 | m_GameObject: {fileID: 2113358541} 1336 | m_Enabled: 1 1337 | m_EditorHideFlags: 0 1338 | m_Script: {fileID: 11500000, guid: 98289c2953bfaa045bc9e021c97b79ec, type: 3} 1339 | m_Name: 1340 | m_EditorClassIdentifier: 1341 | --- !u!23 &2113358543 1342 | MeshRenderer: 1343 | m_ObjectHideFlags: 0 1344 | m_PrefabParentObject: {fileID: 2342206, guid: 245ff2907b0b1874e97286ae25b62a13, 1345 | type: 2} 1346 | m_PrefabInternal: {fileID: 2139429358} 1347 | m_GameObject: {fileID: 2113358541} 1348 | m_Enabled: 1 1349 | m_CastShadows: 1 1350 | m_ReceiveShadows: 1 1351 | m_Materials: 1352 | - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} 1353 | m_SubsetIndices: 1354 | m_StaticBatchRoot: {fileID: 0} 1355 | m_UseLightProbes: 1 1356 | m_ReflectionProbeUsage: 1 1357 | m_ProbeAnchor: {fileID: 0} 1358 | m_ScaleInLightmap: 1 1359 | m_PreserveUVs: 1 1360 | m_IgnoreNormalsForChartDetection: 0 1361 | m_ImportantGI: 0 1362 | m_MinimumChartSize: 4 1363 | m_AutoUVMaxDistance: 0.5 1364 | m_AutoUVMaxAngle: 89 1365 | m_LightmapParameters: {fileID: 0} 1366 | m_SortingLayerID: 0 1367 | m_SortingOrder: 0 1368 | --- !u!33 &2113358544 1369 | MeshFilter: 1370 | m_ObjectHideFlags: 0 1371 | m_PrefabParentObject: {fileID: 3342462, guid: 245ff2907b0b1874e97286ae25b62a13, 1372 | type: 2} 1373 | m_PrefabInternal: {fileID: 2139429358} 1374 | m_GameObject: {fileID: 2113358541} 1375 | m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} 1376 | --- !u!4 &2113358545 1377 | Transform: 1378 | m_ObjectHideFlags: 0 1379 | m_PrefabParentObject: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1380 | m_PrefabInternal: {fileID: 2139429358} 1381 | m_GameObject: {fileID: 2113358541} 1382 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1383 | m_LocalPosition: {x: 0, y: 0, z: 0} 1384 | m_LocalScale: {x: 1, y: 1, z: 1} 1385 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1386 | m_Children: [] 1387 | m_Father: {fileID: 0} 1388 | m_RootOrder: 6 1389 | --- !u!1001 &2139429358 1390 | Prefab: 1391 | m_ObjectHideFlags: 0 1392 | serializedVersion: 2 1393 | m_Modification: 1394 | m_TransformParent: {fileID: 0} 1395 | m_Modifications: 1396 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1397 | propertyPath: m_LocalPosition.x 1398 | value: 0 1399 | objectReference: {fileID: 0} 1400 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1401 | propertyPath: m_LocalPosition.y 1402 | value: 0 1403 | objectReference: {fileID: 0} 1404 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1405 | propertyPath: m_LocalPosition.z 1406 | value: 0 1407 | objectReference: {fileID: 0} 1408 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1409 | propertyPath: m_LocalRotation.x 1410 | value: 0 1411 | objectReference: {fileID: 0} 1412 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1413 | propertyPath: m_LocalRotation.y 1414 | value: 0 1415 | objectReference: {fileID: 0} 1416 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1417 | propertyPath: m_LocalRotation.z 1418 | value: 0 1419 | objectReference: {fileID: 0} 1420 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1421 | propertyPath: m_LocalRotation.w 1422 | value: 1 1423 | objectReference: {fileID: 0} 1424 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1425 | propertyPath: m_RootOrder 1426 | value: 6 1427 | objectReference: {fileID: 0} 1428 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1429 | propertyPath: m_Name 1430 | value: Cube (4) 1431 | objectReference: {fileID: 0} 1432 | m_RemovedComponents: [] 1433 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1434 | m_RootGameObject: {fileID: 2113358541} 1435 | m_IsPrefabParent: 0 1436 | --- !u!1001 &2146224844 1437 | Prefab: 1438 | m_ObjectHideFlags: 0 1439 | serializedVersion: 2 1440 | m_Modification: 1441 | m_TransformParent: {fileID: 0} 1442 | m_Modifications: 1443 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1444 | propertyPath: m_LocalPosition.x 1445 | value: 0 1446 | objectReference: {fileID: 0} 1447 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1448 | propertyPath: m_LocalPosition.y 1449 | value: 0 1450 | objectReference: {fileID: 0} 1451 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1452 | propertyPath: m_LocalPosition.z 1453 | value: 0 1454 | objectReference: {fileID: 0} 1455 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1456 | propertyPath: m_LocalRotation.x 1457 | value: 0 1458 | objectReference: {fileID: 0} 1459 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1460 | propertyPath: m_LocalRotation.y 1461 | value: 0 1462 | objectReference: {fileID: 0} 1463 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1464 | propertyPath: m_LocalRotation.z 1465 | value: 0 1466 | objectReference: {fileID: 0} 1467 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1468 | propertyPath: m_LocalRotation.w 1469 | value: 1 1470 | objectReference: {fileID: 0} 1471 | - target: {fileID: 427018, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1472 | propertyPath: m_RootOrder 1473 | value: 3 1474 | objectReference: {fileID: 0} 1475 | - target: {fileID: 138072, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1476 | propertyPath: m_Name 1477 | value: Cube (1) 1478 | objectReference: {fileID: 0} 1479 | m_RemovedComponents: [] 1480 | m_ParentPrefab: {fileID: 100100000, guid: 245ff2907b0b1874e97286ae25b62a13, type: 2} 1481 | m_RootGameObject: {fileID: 2106389370} 1482 | m_IsPrefabParent: 0 1483 | -------------------------------------------------------------------------------- /Assets/Sample/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a487c41c5b6e27340b38112a02e7ba33 3 | timeCreated: 1486888089 4 | licenseType: Pro 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Misc/screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jagt/unity3d-runtime-debug-draw/392b9f53c5a123f00fab118dce2b0bbd359e537b/Misc/screenshot.gif -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 8 7 | AndroidProfiler: 0 8 | defaultScreenOrientation: 4 9 | targetDevice: 2 10 | useOnDemandResources: 0 11 | accelerometerFrequency: 60 12 | companyName: DefaultCompany 13 | productName: unity3d-runtime-debug-draw 14 | defaultCursor: {fileID: 0} 15 | cursorHotspot: {x: 0, y: 0} 16 | m_ShowUnitySplashScreen: 1 17 | m_VirtualRealitySplashScreen: {fileID: 0} 18 | defaultScreenWidth: 1024 19 | defaultScreenHeight: 768 20 | defaultScreenWidthWeb: 960 21 | defaultScreenHeightWeb: 600 22 | m_RenderingPath: 1 23 | m_MobileRenderingPath: 1 24 | m_ActiveColorSpace: 0 25 | m_MTRendering: 1 26 | m_MobileMTRendering: 0 27 | m_Stereoscopic3D: 0 28 | iosShowActivityIndicatorOnLoading: -1 29 | androidShowActivityIndicatorOnLoading: -1 30 | iosAppInBackgroundBehavior: 0 31 | displayResolutionDialog: 1 32 | iosAllowHTTPDownload: 1 33 | allowedAutorotateToPortrait: 1 34 | allowedAutorotateToPortraitUpsideDown: 1 35 | allowedAutorotateToLandscapeRight: 1 36 | allowedAutorotateToLandscapeLeft: 1 37 | useOSAutorotation: 1 38 | use32BitDisplayBuffer: 1 39 | disableDepthAndStencilBuffers: 0 40 | defaultIsFullScreen: 1 41 | defaultIsNativeResolution: 1 42 | runInBackground: 0 43 | captureSingleScreen: 0 44 | Override IPod Music: 0 45 | Prepare IOS For Recording: 0 46 | submitAnalytics: 1 47 | usePlayerLog: 1 48 | bakeCollisionMeshes: 0 49 | forceSingleInstance: 0 50 | resizableWindow: 0 51 | useMacAppStoreValidation: 0 52 | gpuSkinning: 0 53 | xboxPIXTextureCapture: 0 54 | xboxEnableAvatar: 0 55 | xboxEnableKinect: 0 56 | xboxEnableKinectAutoTracking: 0 57 | xboxEnableFitness: 0 58 | visibleInBackground: 0 59 | allowFullscreenSwitch: 1 60 | macFullscreenMode: 2 61 | d3d9FullscreenMode: 1 62 | d3d11FullscreenMode: 1 63 | xboxSpeechDB: 0 64 | xboxEnableHeadOrientation: 0 65 | xboxEnableGuest: 0 66 | xboxEnablePIXSampling: 0 67 | n3dsDisableStereoscopicView: 0 68 | n3dsEnableSharedListOpt: 1 69 | n3dsEnableVSync: 0 70 | uiUse16BitDepthBuffer: 0 71 | ignoreAlphaClear: 0 72 | xboxOneResolution: 0 73 | ps3SplashScreen: {fileID: 0} 74 | videoMemoryForVertexBuffers: 0 75 | psp2PowerMode: 0 76 | psp2AcquireBGM: 1 77 | wiiUTVResolution: 0 78 | wiiUGamePadMSAA: 1 79 | wiiUSupportsNunchuk: 0 80 | wiiUSupportsClassicController: 0 81 | wiiUSupportsBalanceBoard: 0 82 | wiiUSupportsMotionPlus: 0 83 | wiiUSupportsProController: 0 84 | wiiUAllowScreenCapture: 1 85 | wiiUControllerCount: 0 86 | m_SupportedAspectRatios: 87 | 4:3: 1 88 | 5:4: 1 89 | 16:10: 1 90 | 16:9: 1 91 | Others: 1 92 | bundleIdentifier: com.Company.ProductName 93 | bundleVersion: 1.0 94 | preloadedAssets: [] 95 | metroEnableIndependentInputSource: 0 96 | metroEnableLowLatencyPresentationAPI: 0 97 | xboxOneDisableKinectGpuReservation: 0 98 | virtualRealitySupported: 0 99 | productGUID: 2a84edbf12fa4954dbecd35870946ed6 100 | AndroidBundleVersionCode: 1 101 | AndroidMinSdkVersion: 9 102 | AndroidPreferredInstallLocation: 1 103 | aotOptions: 104 | apiCompatibilityLevel: 2 105 | stripEngineCode: 1 106 | iPhoneStrippingLevel: 0 107 | iPhoneScriptCallOptimization: 0 108 | iPhoneBuildNumber: 0 109 | ForceInternetPermission: 0 110 | ForceSDCardPermission: 0 111 | CreateWallpaper: 0 112 | APKExpansionFiles: 0 113 | preloadShaders: 0 114 | StripUnusedMeshComponents: 0 115 | VertexChannelCompressionMask: 116 | serializedVersion: 2 117 | m_Bits: 238 118 | iPhoneSdkVersion: 988 119 | iPhoneTargetOSVersion: 22 120 | tvOSSdkVersion: 0 121 | tvOSTargetOSVersion: 900 122 | uIPrerenderedIcon: 0 123 | uIRequiresPersistentWiFi: 0 124 | uIRequiresFullScreen: 1 125 | uIStatusBarHidden: 1 126 | uIExitOnSuspend: 0 127 | uIStatusBarStyle: 0 128 | iPhoneSplashScreen: {fileID: 0} 129 | iPhoneHighResSplashScreen: {fileID: 0} 130 | iPhoneTallHighResSplashScreen: {fileID: 0} 131 | iPhone47inSplashScreen: {fileID: 0} 132 | iPhone55inPortraitSplashScreen: {fileID: 0} 133 | iPhone55inLandscapeSplashScreen: {fileID: 0} 134 | iPadPortraitSplashScreen: {fileID: 0} 135 | iPadHighResPortraitSplashScreen: {fileID: 0} 136 | iPadLandscapeSplashScreen: {fileID: 0} 137 | iPadHighResLandscapeSplashScreen: {fileID: 0} 138 | appleTVSplashScreen: {fileID: 0} 139 | tvOSSmallIconLayers: [] 140 | tvOSLargeIconLayers: [] 141 | tvOSTopShelfImageLayers: [] 142 | iOSLaunchScreenType: 0 143 | iOSLaunchScreenPortrait: {fileID: 0} 144 | iOSLaunchScreenLandscape: {fileID: 0} 145 | iOSLaunchScreenBackgroundColor: 146 | serializedVersion: 2 147 | rgba: 0 148 | iOSLaunchScreenFillPct: 100 149 | iOSLaunchScreenSize: 100 150 | iOSLaunchScreenCustomXibPath: 151 | iOSLaunchScreeniPadType: 0 152 | iOSLaunchScreeniPadImage: {fileID: 0} 153 | iOSLaunchScreeniPadBackgroundColor: 154 | serializedVersion: 2 155 | rgba: 0 156 | iOSLaunchScreeniPadFillPct: 100 157 | iOSLaunchScreeniPadSize: 100 158 | iOSLaunchScreeniPadCustomXibPath: 159 | iOSDeviceRequirements: [] 160 | AndroidTargetDevice: 0 161 | AndroidSplashScreenScale: 0 162 | androidSplashScreen: {fileID: 0} 163 | AndroidKeystoreName: 164 | AndroidKeyaliasName: 165 | AndroidTVCompatibility: 1 166 | AndroidIsGame: 1 167 | androidEnableBanner: 1 168 | m_AndroidBanners: 169 | - width: 320 170 | height: 180 171 | banner: {fileID: 0} 172 | androidGamepadSupportLevel: 0 173 | resolutionDialogBanner: {fileID: 0} 174 | m_BuildTargetIcons: 175 | - m_BuildTarget: 176 | m_Icons: 177 | - serializedVersion: 2 178 | m_Icon: {fileID: 0} 179 | m_Width: 128 180 | m_Height: 128 181 | m_BuildTargetBatching: [] 182 | m_BuildTargetGraphicsAPIs: [] 183 | webPlayerTemplate: APPLICATION:Default 184 | m_TemplateCustomTags: {} 185 | wiiUTitleID: 0005000011000000 186 | wiiUGroupID: 00010000 187 | wiiUCommonSaveSize: 4096 188 | wiiUAccountSaveSize: 2048 189 | wiiUOlvAccessKey: 0 190 | wiiUTinCode: 0 191 | wiiUJoinGameId: 0 192 | wiiUJoinGameModeMask: 0000000000000000 193 | wiiUCommonBossSize: 0 194 | wiiUAccountBossSize: 0 195 | wiiUAddOnUniqueIDs: [] 196 | wiiUMainThreadStackSize: 3072 197 | wiiULoaderThreadStackSize: 1024 198 | wiiUSystemHeapSize: 128 199 | wiiUTVStartupScreen: {fileID: 0} 200 | wiiUGamePadStartupScreen: {fileID: 0} 201 | wiiUDrcBufferDisabled: 0 202 | wiiUProfilerLibPath: 203 | actionOnDotNetUnhandledException: 1 204 | enableInternalProfiler: 0 205 | logObjCUncaughtExceptions: 1 206 | enableCrashReportAPI: 0 207 | locationUsageDescription: 208 | XboxTitleId: 209 | XboxImageXexPath: 210 | XboxSpaPath: 211 | XboxGenerateSpa: 0 212 | XboxDeployKinectResources: 0 213 | XboxSplashScreen: {fileID: 0} 214 | xboxEnableSpeech: 0 215 | xboxAdditionalTitleMemorySize: 0 216 | xboxDeployKinectHeadOrientation: 0 217 | xboxDeployKinectHeadPosition: 0 218 | ps3TitleConfigPath: 219 | ps3DLCConfigPath: 220 | ps3ThumbnailPath: 221 | ps3BackgroundPath: 222 | ps3SoundPath: 223 | ps3NPAgeRating: 12 224 | ps3TrophyCommId: 225 | ps3NpCommunicationPassphrase: 226 | ps3TrophyPackagePath: 227 | ps3BootCheckMaxSaveGameSizeKB: 128 228 | ps3TrophyCommSig: 229 | ps3SaveGameSlots: 1 230 | ps3TrialMode: 0 231 | ps3VideoMemoryForAudio: 0 232 | ps3EnableVerboseMemoryStats: 0 233 | ps3UseSPUForUmbra: 0 234 | ps3EnableMoveSupport: 1 235 | ps3DisableDolbyEncoding: 0 236 | ps4NPAgeRating: 12 237 | ps4NPTitleSecret: 238 | ps4NPTrophyPackPath: 239 | ps4ParentalLevel: 1 240 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 241 | ps4Category: 0 242 | ps4MasterVersion: 01.00 243 | ps4AppVersion: 01.00 244 | ps4AppType: 0 245 | ps4ParamSfxPath: 246 | ps4VideoOutPixelFormat: 0 247 | ps4VideoOutResolution: 4 248 | ps4PronunciationXMLPath: 249 | ps4PronunciationSIGPath: 250 | ps4BackgroundImagePath: 251 | ps4StartupImagePath: 252 | ps4SaveDataImagePath: 253 | ps4SdkOverride: 254 | ps4BGMPath: 255 | ps4ShareFilePath: 256 | ps4ShareOverlayImagePath: 257 | ps4PrivacyGuardImagePath: 258 | ps4NPtitleDatPath: 259 | ps4RemotePlayKeyAssignment: -1 260 | ps4RemotePlayKeyMappingDir: 261 | ps4EnterButtonAssignment: 1 262 | ps4ApplicationParam1: 0 263 | ps4ApplicationParam2: 0 264 | ps4ApplicationParam3: 0 265 | ps4ApplicationParam4: 0 266 | ps4DownloadDataSize: 0 267 | ps4GarlicHeapSize: 2048 268 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 269 | ps4UseDebugIl2cppLibs: 0 270 | ps4pnSessions: 1 271 | ps4pnPresence: 1 272 | ps4pnFriends: 1 273 | ps4pnGameCustomData: 1 274 | playerPrefsSupport: 0 275 | ps4ReprojectionSupport: 0 276 | ps4UseAudio3dBackend: 0 277 | ps4SocialScreenEnabled: 0 278 | ps4Audio3dVirtualSpeakerCount: 14 279 | ps4attribCpuUsage: 0 280 | ps4PatchPkgPath: 281 | ps4PatchLatestPkgPath: 282 | ps4PatchChangeinfoPath: 283 | ps4attribUserManagement: 0 284 | ps4attribMoveSupport: 0 285 | ps4attrib3DSupport: 0 286 | ps4attribShareSupport: 0 287 | ps4IncludedModules: [] 288 | monoEnv: 289 | psp2Splashimage: {fileID: 0} 290 | psp2NPTrophyPackPath: 291 | psp2NPSupportGBMorGJP: 0 292 | psp2NPAgeRating: 12 293 | psp2NPTitleDatPath: 294 | psp2NPCommsID: 295 | psp2NPCommunicationsID: 296 | psp2NPCommsPassphrase: 297 | psp2NPCommsSig: 298 | psp2ParamSfxPath: 299 | psp2ManualPath: 300 | psp2LiveAreaGatePath: 301 | psp2LiveAreaBackroundPath: 302 | psp2LiveAreaPath: 303 | psp2LiveAreaTrialPath: 304 | psp2PatchChangeInfoPath: 305 | psp2PatchOriginalPackage: 306 | psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui 307 | psp2KeystoneFile: 308 | psp2MemoryExpansionMode: 0 309 | psp2DRMType: 0 310 | psp2StorageType: 0 311 | psp2MediaCapacity: 0 312 | psp2DLCConfigPath: 313 | psp2ThumbnailPath: 314 | psp2BackgroundPath: 315 | psp2SoundPath: 316 | psp2TrophyCommId: 317 | psp2TrophyPackagePath: 318 | psp2PackagedResourcesPath: 319 | psp2SaveDataQuota: 10240 320 | psp2ParentalLevel: 1 321 | psp2ShortTitle: Not Set 322 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF 323 | psp2Category: 0 324 | psp2MasterVersion: 01.00 325 | psp2AppVersion: 01.00 326 | psp2TVBootMode: 0 327 | psp2EnterButtonAssignment: 2 328 | psp2TVDisableEmu: 0 329 | psp2AllowTwitterDialog: 1 330 | psp2Upgradable: 0 331 | psp2HealthWarning: 0 332 | psp2UseLibLocation: 0 333 | psp2InfoBarOnStartup: 0 334 | psp2InfoBarColor: 0 335 | psp2UseDebugIl2cppLibs: 0 336 | psmSplashimage: {fileID: 0} 337 | spritePackerPolicy: 338 | scriptingDefineSymbols: 339 | 1: _DEBUG 340 | metroPackageName: unity3d-runtime-debug-draw 341 | metroPackageVersion: 342 | metroCertificatePath: 343 | metroCertificatePassword: 344 | metroCertificateSubject: 345 | metroCertificateIssuer: 346 | metroCertificateNotAfter: 0000000000000000 347 | metroApplicationDescription: unity3d-runtime-debug-draw 348 | wsaImages: {} 349 | metroTileShortName: 350 | metroCommandLineArgsFile: 351 | metroTileShowName: 0 352 | metroMediumTileShowName: 0 353 | metroLargeTileShowName: 0 354 | metroWideTileShowName: 0 355 | metroDefaultTileSize: 1 356 | metroTileForegroundText: 1 357 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 358 | metroSplashScreenBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, 359 | a: 1} 360 | metroSplashScreenUseBackgroundColor: 1 361 | platformCapabilities: {} 362 | metroFTAName: 363 | metroFTAFileTypes: [] 364 | metroProtocolName: 365 | metroCompilationOverrides: 1 366 | blackberryDeviceAddress: 367 | blackberryDevicePassword: 368 | blackberryTokenPath: 369 | blackberryTokenExires: 370 | blackberryTokenAuthor: 371 | blackberryTokenAuthorId: 372 | blackberryCskPassword: 373 | blackberrySaveLogPath: 374 | blackberrySharedPermissions: 0 375 | blackberryCameraPermissions: 0 376 | blackberryGPSPermissions: 0 377 | blackberryDeviceIDPermissions: 0 378 | blackberryMicrophonePermissions: 0 379 | blackberryGamepadSupport: 0 380 | blackberryBuildId: 0 381 | blackberryLandscapeSplashScreen: {fileID: 0} 382 | blackberryPortraitSplashScreen: {fileID: 0} 383 | blackberrySquareSplashScreen: {fileID: 0} 384 | tizenProductDescription: 385 | tizenProductURL: 386 | tizenSigningProfileName: 387 | tizenGPSPermissions: 0 388 | tizenMicrophonePermissions: 0 389 | n3dsUseExtSaveData: 0 390 | n3dsCompressStaticMem: 1 391 | n3dsExtSaveDataNumber: 0x12345 392 | n3dsStackSize: 131072 393 | n3dsTargetPlatform: 2 394 | n3dsRegion: 7 395 | n3dsMediaSize: 0 396 | n3dsLogoStyle: 3 397 | n3dsTitle: GameName 398 | n3dsProductCode: 399 | n3dsApplicationId: 0xFF3FF 400 | stvDeviceAddress: 401 | stvProductDescription: 402 | stvProductAuthor: 403 | stvProductAuthorEmail: 404 | stvProductLink: 405 | stvProductCategory: 0 406 | XboxOneProductId: 407 | XboxOneUpdateKey: 408 | XboxOneSandboxId: 409 | XboxOneContentId: 410 | XboxOneTitleId: 411 | XboxOneSCId: 412 | XboxOneGameOsOverridePath: 413 | XboxOnePackagingOverridePath: 414 | XboxOneAppManifestOverridePath: 415 | XboxOnePackageEncryption: 0 416 | XboxOnePackageUpdateGranularity: 2 417 | XboxOneDescription: 418 | XboxOneIsContentPackage: 0 419 | XboxOneEnableGPUVariability: 0 420 | XboxOneSockets: {} 421 | XboxOneSplashScreen: {fileID: 0} 422 | XboxOneAllowedProductIds: [] 423 | XboxOnePersistentLocalStorageSize: 0 424 | intPropertyNames: 425 | - Standalone::ScriptingBackend 426 | - WebPlayer::ScriptingBackend 427 | Standalone::ScriptingBackend: 0 428 | WebPlayer::ScriptingBackend: 0 429 | boolPropertyNames: 430 | - XboxOne::enus 431 | XboxOne::enus: 1 432 | stringPropertyNames: [] 433 | cloudProjectId: 434 | projectName: 435 | organizationId: 436 | cloudEnabled: 0 437 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Unity3d Runtime Debug Draw 2 | 3 | Single file debuging DrawLine/DrawText/etc that works in both Scene/Game view, also works in built PC/mobile builds. 4 | 5 | ![screenshot](Misc/screenshot.gif) 6 | 7 | ## Features 8 | 9 | * Draw debug lines in built players. 10 | * Additional goodies like draw text, attach texts and else. 11 | * Good old single file library. 12 | * Calls can be easily compiled away in release builds. 13 | 14 | ## Install 15 | 16 | Download [RuntimeDebugDraw](Assets/RuntimeDebugDraw.cs) and drop it into your project and you're done. Remember to read the header comments or it might work as intended. 17 | 18 | ## License 19 | 20 | Public Domain 21 | 22 | ## TODOs/Bugs/Known Issues 23 | 24 | * Only tested on Unity 5.3 for now. 25 | * Performance has room for improvement. 26 | * Doesn't work well with camera post processing. 27 | * Draw CapsuleCollider/Mesh/etc. 28 | --------------------------------------------------------------------------------