Create a new class inheriting from TileBase (or any useful sub-classes of TileBase, like Tile). Override any required methods for your new Tile class. The following are the usual methods you would override:
RefreshTile determines which Tiles in the vicinity are updated when this Tile is added to the TilemapA GameObject that allows you to quickly create 2D levels using tiles and a grid overlay. More infoGetTileData determines what the Tile looks like on the Tilemap.Create instances of your new class using ScriptableObject.CreateInstance<YOUR_TILE_CLASS>(). You may convert this new instance to an Asset in the Editor in order to use it repeatedly by calling AssetDatabase.CreateAsset().
You can also make a custom editor for your Tile. This works the same way as custom editors for scriptable objects.
Remember to save your project to ensure that your new Tile Assets are saved!