virtual protected HexGridActor CreateActor(string objName, Vector2 pos, HexGrid grid, int owner, GameObject actorView)
    {
        var actorObj = new GameObject();

        actorObj.name = objName;
        var actor = new HexGridActor(actorObj);

        CreateHexGridActorAt(actor, pos, grid, owner, actorView);
        return(actor);
    }
    public void RemoveActor(HexGridActor actor)
    {
        if (actor == null || actor.State == GridActorState.Destroyed)
        {
            return;
        }

        ActorsToRemove.Add(actor);
        actor.State = GridActorState.Destroyed;
    }
    protected void CreateHexGridActorAt(HexGridActor actor, Vector2 pos, HexGrid grid, int owner, GameObject actorView)
    {
        var gridPos  = pos;
        var worldPos = grid.ToPixel(gridPos);

        actor.Obj.transform.position = worldPos;
        actor.Obj.transform.parent   = grid.ActorsObj.transform;
        actor.Grid                         = grid;
        actor.View                         = Instantiate(actorView) as GameObject;
        actor.View.name                    = "View";
        actor.View.transform.parent        = actor.Obj.transform;
        actor.View.transform.localPosition = actorView.transform.position;
        actor.View.transform.localRotation = actorView.transform.rotation;
        actor.Pos   = gridPos;
        actor.Owner = owner;
        actor.Tile  = grid.Tiles[gridPos];
        actor.State = GridActorState.Normal;

        grid.Actors.Add(actor);
    }