private TestCubeQuadObject CreateObject() { float randomCenterX = Random.Range(21, 370); float randomCenterY = Random.Range(21, 370); float randomExtents = Random.Range(0.3f, 2); AABB2D bounds = new AABB2D(new Vector2(randomCenterX, randomCenterY), new Vector2(randomExtents, randomExtents)); GameObject gObj = GameObject.CreatePrimitive(PrimitiveType.Cube); TestCubeQuadObject qObject = gObj.AddComponent <TestCubeQuadObject>(); qObject.UniqueID = idCreator.NextID; qObject.Bounds = bounds; gObj.name = "Cube " + qObject.UniqueID; gObj.transform.localScale = new Vector3(bounds.Size.x, 1, bounds.Size.y); gObj.transform.position = new Vector3(bounds.Center.x, 0, bounds.Center.y); //qObject.OnEnterView(); return(qObject); }
private void OnGUI() { Random.InitState((int)System.DateTime.Now.Ticks); if (GUILayout.Button("CLICK")) { LogUtil.Trace("SSSSSSSS"); for (int i = 0; i < 10; ++i) { TestCubeQuadObject quadObject = CreateObject(); float value = Random.Range(0.0f, 1.0f); if (value > 0.5f) { quadObject.IsBoundsChangeable = true; quadObject.RandomMove(); } tree.InsertObject(quadObject); } } if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { isMouseDown = true; } if (isMouseDown) { Vector3 wPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); showBounds = new AABB2D(new Vector2(wPosition.x, wPosition.z), new Vector2(50, 50)); List <IQuadObject> list1 = ListPool <IQuadObject> .Get(); if (selectedObjects != null) { list1.AddRange(selectedObjects); } tempObjects.Clear(); tree.QueryIntersectsObjects(showBounds, ref tempObjects); List <IQuadObject> list2 = ListPool <IQuadObject> .Get(); list2.AddRange(tempObjects); var dis1 = list1.Except(list2).ToArray(); foreach (var obj in dis1) { obj.OnExitView(); } var dis2 = list2.Except(list1).ToArray(); foreach (var obj in dis2) { obj.OnEnterView(); } selectedObjects.Clear(); selectedObjects.AddRange(tempObjects); ListPool <IQuadObject> .Release(list1); ListPool <IQuadObject> .Release(list2); } if (isMouseDown && Event.current.type == EventType.MouseUp) { isMouseDown = false; } if (Input.GetKeyUp(KeyCode.Delete)) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out var hitInfo, float.MaxValue)) { var qObject = hitInfo.collider.gameObject.GetComponent <TestCubeQuadObject>(); if (qObject != null) { tree.RemoveObject(qObject); Destroy(qObject.gameObject); } } } }