Pada artikel ini, kita akan membahas membuat komponen inventaris dan menghubungkannya dengan Aktor yang diperlukan. Karena komponen ini hanyalah repositori objek dan logika pemuatan / pembongkaran, tidak ada perbedaan dalam menerapkannya pada karakter atau semacam kotak.
Anda dapat membuat komponen menggunakan Cetak Biru dan C ++ . Saya lebih suka metode kedua, karena saya akan secara aktif menggunakan fungsionalitas C ++ .
Pertama-tama, kami membuat struktur sel untuk menyimpan satu item. Saya lebih suka menyimpannya dalam file .h yang terpisah agar dapat terkoneksi secara bebas jika perlu di mana saja:
Ya, sel inventaris kami hanya berisi 3 variabel: pengidentifikasi, kuantitas, dan parameter unik. Tidak lebih. Semua data dapat disalin, disimpan, dan diunduh tanpa masalah. Tidak ada tekstur, referensi untuk Aktor , dll. tidak disini. Semua informasi tambahan dapat diunduh dari database pada DataAsset , yang telah kita bicarakan sebelumnya.
Kemungkinan besar, Anda telah melihat struktur StructItemFactors.h lain, yang terhubung di awal. Ini tidak lebih dari repositori properti unik dari objek (dalam bentuk pelampung ), seperti keausan, kerusakan, dll. Yaitu, properti yang hanya melekat pada salinan subjek ini, dan tidak ada yang lain yang sama. Struktur ini sangat sederhana:
Perlu diperhatikan satu fungsi yang sangat menarik dalam struktur di atas, yang dirancang untuk sangat menyederhanakan kehidupan kita:
friend bool operator==(const FItemFactor & Lhs, const FItemFactor & Rhs) { return Lhs.ItemFactorTag == Rhs.ItemFactorTag && Lhs.ItemFactor == Rhs.ItemFactor; }
Ini tidak lebih dari operator perbandingan == , yang dapat kita gunakan untuk struktur ini agar tidak mengekstraksi elemen untuk ini setiap kali. Sangat nyaman
Jadi, dengan struktur selesai. Kami melanjutkan ke pembuatan komponen:
DreampaxContainerComponent.h Jika dalam kode di atas aktifkan baris
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
maka Anda dapat menghubungkan komponen ini secara langsung ke Cetak Biru . Saya lebih suka melakukan ini di C ++ . Untuk Karakter, tampilannya seperti ini:
Inventory = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Inventory"));
Nah, untuk peti seperti ini:
ADreampaxActorContainer::ADreampaxActorContainer(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { Container = CreateDefaultSubobject<UDreampaxContainerComponent>(TEXT("Container")); }
Seperti yang Anda lihat, perbedaannya hanya pada nama-nama variabel.
Pada artikel selanjutnya saya akan berbicara tentang fitur replikasi (sederhana di jari ), yang akan membuat inventaris kami benar-benar multipemain.