Exemple #1
0
 private void OnEnable( )
 {
     hashCode = GetHashCode();
     tilemap  = (Tilemap3)target;
     tile     = tilemap.tile;
     coll     = tilemap.coll;
 }
Exemple #2
0
    public override void OnInspectorGUI( )
    {
        base.OnInspectorGUI();

        hashCode = GetHashCode();
        tilemap  = (Tilemap3)target;
        tile     = tilemap.tile;
        coll     = tilemap.coll;
    }
Exemple #3
0
    private void OnSceneGUI( )
    {
        tilemap = (Tilemap3)target;
        coll    = tilemap.coll;
        tile    = tilemap.tile;

        Event currentEvent = Event.current;

        if (currentEvent.type == EventType.Layout)
        {
            HandleUtility.AddDefaultControl(GUIUtility.GetControlID(GetHashCode(), FocusType.Passive));
        }

        IsMouseDown(currentEvent);
        IsCtrlHeld(currentEvent);

        if (mouseDown)
        {
            Ray        worldRay = HandleUtility.GUIPointToWorldRay(currentEvent.mousePosition);
            RaycastHit hitInfo;
            if (coll.Raycast(worldRay, out hitInfo, 1000f))
            {
                GameObject hitObj = hitInfo.collider.gameObject;
                if (hitObj.CompareTag("3DTilemap"))
                {
                    Vector3 hitPoint = hitInfo.point;
                    hitPoint = new Vector3(Mathf.RoundToInt(hitPoint.x), Mathf.RoundToInt(hitPoint.y), Mathf.RoundToInt(hitPoint.z));
                    GameObject obj;
                    bool       tileHere = tilemap.tiles.TryGetValue(hitPoint.ToString(), out obj);
                    if (!tileHere && mouseDown && !ctrlDown)
                    {
                        obj = PrefabUtility.InstantiatePrefab(tile as GameObject) as GameObject;
                        obj.transform.position = hitPoint;
                        obj.transform.parent   = hitObj.transform;
                        tilemap.tiles.Add(hitPoint.ToString(), obj);
                    }
                    else if (tileHere && mouseDown && ctrlDown)
                    {
                        obj.transform.parent = null;
                        tilemap.tiles.Remove(hitPoint.ToString());
                        DestroyImmediate(obj);
                    }
                }
            }
            currentEvent.Use();
        }
    }