Потому что Encoding.Unicode - это UTF-16 и в нём просто текст @#$^@ не эквивалентен тому же самому в байтах (можете попробовать сами сконвертировать этот стринг в байты). Скорее всего вам нужно использовать энкодер UTF-8.
inv.AddItem(0, inv.items[1], 1);
Вы только что создали пустой инвентарь, но пытаетесь добавить (хотя по коду заменить) нулевой элемент первым элементов.
Откуда берётся первый элемент для замены?
Откуда берётся нулевой элемент под замену?
Так как вы пытаетесь нельзя.
Создайте класс хранилище, который будет всем желающим отдавать А или Б (в виде класса С). А при необходимости заменять их.