@@ -16,8 +16,13 @@ public class TestController : MonoBehaviour
16
16
{
17
17
[ SerializeField ]
18
18
private FieldInfo fieldInfo = new FieldInfo ( ) ;
19
-
20
- private List < AbstractCollisionCallbacks > collisions = new List < AbstractCollisionCallbacks > ( ) ;
19
+ [ SerializeField ]
20
+ private bool autoRespawn = true ;
21
+ [ SerializeField , Range ( 0f , 1f ) ]
22
+ private float respawnRate = 0.05f ;
23
+
24
+ private bool spawned = false ;
25
+ private Dictionary < int , List < AbstractCollisionCallbacks > > collisions = new Dictionary < int , List < AbstractCollisionCallbacks > > ( ) ;
21
26
22
27
23
28
void Awake ( )
@@ -27,25 +32,53 @@ void Awake()
27
32
28
33
void Update ( )
29
34
{
35
+ if ( this . spawned == false )
36
+ {
37
+ return ;
38
+ }
39
+
30
40
if ( Input . GetKeyDown ( KeyCode . Space ) )
31
41
{
32
- this . collisions
33
- . FindAll ( coll => coll . LayerID == LayersManager . UnityLayerCount )
42
+ this . collisions [ LayersManager . UnityLayerCount ]
34
43
. ForEach ( coll => coll . gameObject . SetActive ( ! coll . gameObject . activeSelf ) ) ;
35
44
}
36
45
37
46
if ( Input . GetKeyDown ( KeyCode . A ) )
38
47
{
39
- var colls = this . collisions
40
- . FindAll ( coll => coll . LayerID == LayersManager . UnityLayerCount ) . ToArray ( ) ;
48
+ var colls = this . collisions [ LayersManager . UnityLayerCount ] ;
41
49
42
- for ( var i = 0 ; i < colls . Length ; i ++ )
50
+ for ( var i = 0 ; i < colls . Count ; i ++ )
43
51
{
52
+ colls [ i ] . Layer . ChangeLayer ( LayersManager . UnityLayerCount + 1 ) ;
44
53
colls [ i ] . UpdateIgnoreLayers ( ) ;
45
54
}
46
55
}
47
- }
48
56
57
+ if ( this . autoRespawn == false || Random . value > this . respawnRate )
58
+ {
59
+ return ;
60
+ }
61
+
62
+ var keys = this . collisions . Keys . ToList ( ) ;
63
+ var layerID = keys [ Random . Range ( 0 , keys . Count ) ] ;
64
+
65
+ if ( Random . value <= 0.5f )
66
+ {
67
+ Debug . Log ( "Destroy" ) ;
68
+ var colls = this . collisions [ layerID ] ;
69
+ var coll = colls [ Random . Range ( 0 , colls . Count ) ] ;
70
+
71
+ this . collisions [ layerID ] . Remove ( coll ) ;
72
+ Destroy ( coll . gameObject ) ;
73
+ }
74
+ else
75
+ {
76
+ Debug . Log ( "Create" ) ;
77
+ var info = this . fieldInfo . Infos . FirstOrDefault ( e => e . Prefab . LayerID == layerID ) ;
78
+ this . Create ( info . Prefab , info . Parent , info . Color ) ;
79
+ }
80
+ }
81
+
49
82
private IEnumerator Spawn ( )
50
83
{
51
84
for ( var i = 0 ; i < this . fieldInfo . Infos . Count ; i ++ )
@@ -54,19 +87,27 @@ private IEnumerator Spawn()
54
87
55
88
var parent = new GameObject ( info . Prefab . name + "s" ) ;
56
89
parent . transform . parent = transform ;
90
+ info . Parent = parent . transform ;
91
+
92
+ this . collisions . Add ( info . Prefab . LayerID , new List < AbstractCollisionCallbacks > ( ) ) ;
57
93
58
94
for ( var j = 0 ; j < info . Count ; j ++ )
59
95
{
60
- var obj = Instantiate ( info . Prefab ) ;
61
- obj . name = i + ":" + obj . name ;
62
- obj . transform . parent = parent . transform ;
63
-
64
- obj . GetComponent < Renderer > ( ) . material . SetColor ( "_Color" , info . Color ) ;
65
- this . collisions . Add ( obj ) ;
66
-
96
+ this . Create ( info . Prefab , parent . transform , info . Color ) ;
67
97
yield return new WaitForSeconds ( 0f ) ;
68
98
}
69
99
}
100
+
101
+ this . spawned = true ;
102
+ }
103
+
104
+ private void Create ( AbstractCollisionCallbacks prefab , Transform parent , Color color )
105
+ {
106
+ var obj = Instantiate ( prefab ) ;
107
+ obj . transform . parent = parent ;
108
+
109
+ obj . GetComponent < Renderer > ( ) . material . SetColor ( "_Color" , color ) ;
110
+ this . collisions [ obj . LayerID ] . Add ( obj ) ;
70
111
}
71
112
72
113
[ Serializable ]
@@ -78,6 +119,9 @@ public class Info
78
119
public AbstractCollisionCallbacks Prefab = null ;
79
120
public int Count = 1 ;
80
121
public Color Color = Color . white ;
122
+
123
+ [ HideInInspector ]
124
+ public Transform Parent = null ;
81
125
}
82
126
83
127
public List < Info > Infos = new List < Info > ( ) ;
0 commit comments