AllQدسته بندی: برنامه نویسیذخیره دیتای سین ها
salarsalar عضو سایت 4 ماه قبل

سوال دوست عزیزمون puyanp4@gmail.com که از قسمت نظرات به قسمت سوالات انتقال دادم .

 

سلام.خسته نباشید
من یه مشکلی دارم که با هیچ روشی نمیتونم حلش کنم

وقتی داخل scene 0 ، کد رو میزنم ، دکمه ی ورود به سین ۱ فعال میشه و دیگه داخل سین ۰ نمیتونم همون کد رو بزنم ( تا اینجا مشکلی نیست )
ولی می‌خوام وقتی از سین ۱ برمی‌گردم به سین ۰ ، دیگه همه چی به اول برنـــگرده و در واقع اگه دوباره همون کد رو زدم ، اجازه ورود به سین ۱ رو نده.

هدف از این کار ، ساخت کد یکبار مصرف و ذخیره اونه تا برای بار دوم که از سین ۱ به ۰ برمی‌گردم ، فعال نـــشه.

لطفاً اگه میتونید راهنمایی کنید ، یک دنیا ممنونتم

9 پاسخ
بهترین پاسخ
salarsalar عضو سایت 4 ماه قبل

وقت بخیر
برای ذخیره و لود bool با استفاده از platerPrefs میتوانید از کد زیر استفاده کنید

bool foo = true;
// Save
PlayerPrefs.SetInt(“foo”, foo?1:0);
// load
foo = PlayerPrefs.GetInt(“foo”)==1?true:false;

salarsalar عضو سایت 4 ماه قبل

دوست عزیز برای اینکه یسری تغییرات داخل سین رو ذخیره کنید میتونید از playerPrefs ها استفاده کنید , در صورتی که این جواب مورد نظر شما نیست میتوانید دقیقتر توضیح دهید که میخواهید چه نوع سیستمی رو روی بازی خود پیاده کنید , پاسخ خود را در همین جا بنویسید تا بتونم کمک کنم.
با تشکر

salarsalar عضو سایت 4 ماه قبل

سلام مجدد –
تا حدودی متوجه شدم .
شما میخواهید از یک رمز فقط یکبار استفاده بشه برای اینکار یک ابجکت بسازید و یک کد رو بهش اضافه کنید .
داخل کد ابتدا از DontDestroyOnLoad  استفاده کنید تا حین جابه جایی بین سین ها این ابجکت پاک نشه .
سپس یک لیست از نوع int یا short بسازید تا رمزهای وارد شده رو داخل اون ذخیره کنید یعنی وقتی کاربر یک رمز رو یکبار وارد میکنه یا استفاده میکنه اون رمز رو به لیست 
رمزها اضافه کنید و موقع استفاده مجدد با استفاده از همون لیست یک بار چک کنید و ببینید ایا قبلا استفاده شده یا نه .
برای ذخیره کردن لیست هم میتونید کل لیست رو سریالایز کنید کنید و به صورت رشته با ارایه بایت ذخیره کنید تا بعد از خارج شدن از بازی نیز اطلاعات قبلی رو داشته باشید.
اگر سوالی داشتید بفرمایید.

PuyanPunish پاسخ داده شده 4 ماه قبل

خیلی ممنون از کمکتون ، ولی متاسفانه این روشی که فرمودین رو کامل بلد نیستم اجرا کنم
امکانش هست از طریق ویدیو یا یه روش دیگه توضیح بدین ؟

سعی خودم رو میکنم انجام بدم ولی واقعا قسمت آخر که فرمودین به صورت رشته ارایه بایت ذخیره کنم رو بلد نیستم !

PuyanPunish پاسخ داده شده 4 ماه قبل

این کد های مربوط به رمز و ورود به سین بعدی و برگشت به سین اوله :

using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine;
using System;

public class Passcode : MonoBehaviour
{

string code = “qq”;
string nr = null;
int nrindex = 0;
string alpha;
public Text UITEXT = null;
public bool ispreesed;
public int sceneNUMBER;

public GameObject okbtn , okbtn1;

public void codefunction(string numbers)
{
nrindex++;
nr = nr + numbers;
UITEXT.text = nr;

}

public void GOTOSCENEE()
{

SceneManager.LoadScene(1);

}

public void ENTER()
{
if (nr == code && !ispreesed)
{

SceneManager.LoadSceneAsync(0);
ispreesed = true;
// SceneManager.LoadScene(sceneNUMBER);

Debug.Log(“welcome ! “);
}
else
{
if(nr == code && ispreesed)
{
Debug.Log(” you used this before !!”);
}
}

if(nr != code)
{
Debug.Log(“failed password ! “);
}

}

public void DELETE()
{
nrindex++;
nr = null;
UITEXT.text = nr;

}

من یدونه string ساختم و کد رو داخلش نوشتم.
حالا داخل تابع enter تعریف کردم که اگه کد درست بود ، هم وارد سین بعدی بشه و هم دیگه کد قابل استفاده نباشه.

ولی وقتی از سین بعدی به سین اول برمی‌گردم ، طبق تابع gotoscene ، برمیگرده به سین اول و هیچ چیزی هم ذخیره نمیشه
( البته طبیعیه که ذخیره نشده چون من بلد نیستم چیزی برای تعریف کنم که ذخیرش کنه )

salarsalar عضو سایت 4 ماه قبل

من یه اسکریپت ساده برای چک – ذخیره و اضافه کردن به لیست نوشتم اون رو مطالعه کنید راحت متوجه میشید 
دانلود
فایل rar رو باز کنید و پکیج رو ایمپورت کنید – نحوه کار کدها رو هم فارسی نوشتم کمی تمرکز کنید راحت متوجه خواهید شد.
موفق باشید.

PuyanPunish پاسخ داده شده 4 ماه قبل

آقا یک دنیا ممنونتونم ،الان نگاه میکنم ، خیلی لطف کردین
زنده باشین.

PuyanPunish پاسخ داده شده 4 ماه قبل

دست شما درد نکنه ، نگاش کردم
ولی متأسفانه نمیدونم چجوری با کد خودم تطبیقش بدم که کار کنه 🤦
بازم ممنون از کمکتون جناب.

salarsalar عضو سایت 4 ماه قبل

خواهش میکنم , 
بزودی دوره های کدنویسی و بازی سازی در سایت قرار میدم که در صورت تمایل میتونید در اونها شرکت کنید , الان کمی درگیر پروژه ی کرفرما هستم و بعد از اتمام اون سایت رو اپدیت میکنم .

PuyanPunish 4 ماه قبل

سلام ، وقت بخیر 
ببخشید جناب ، شما میتونین درگاه اینترنتی زرین پال رو به یونیتی متصل کنید ؟

salarsalar عضو سایت 4 ماه قبل

سلام و وقت بخیر – این ادرس دانلود پکیج هست دانلود کنید و درگاهتون رو بسازید – البته تا حالا باهاش کار نکردم ولی در کل نباید سخت باشه – همچنین میتونید از پشتیبانی خود زرین پال هم کمک بگیرید .
https://www.zarinpal.com/lab/%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D8%B2%D8%B1%DB%8C%D9%86-%D9%BE%D8%A7%D9%84-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B3%D8%A7%D8%B2%DB%8C-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C/
 
موفق باشید

PuyanPunish 4 ماه قبل

سلام مجدد 
جناب واقعا شرمنده 
واقعا کل پروژم درگیر و لنگ این مشکلم 
هیچ جا جواب ندادن و هیچ کمکی نکردن
اگه شما لطف کنید ، یکم آسون راهنمایی کنید هر چی امر کنید ، تقدیمتون میکنم !
 
 
مشکل من اینه می‌خوام وقتی متغیر bool به حالت true درومد ، وقتی دوباره بازی رو شروع میکنم ، به همین حالت bool = true باقی بمونه.
از player pref هم نمیدونم چجوری واسه bool استفاده کنم 
 
واقعا تنها روزنه امیدم ، راهنمایی و بزرگواری شماست 😖

salarsalar عضو سایت 4 ماه قبل

وقت بخیر – دوست عزیز کلا playerPref کاری نداره که.
برای ذخیر متغییر bool از setbool و برای خواندن مجدد از getbool استفاده میشه
مثلا این کد 
 
bool a = false;
 
برای لود 
bool a = playerprefs.getbool(“a” );
 
همچنین برای ذخیره هم 
 
playerPrefs.setbool(“a”,a);
 
و تمام حالت کلی کارکرد این کد هم به این شکله که یه فایل متنی که تو پوشه کش بازی هست رو ادیت میکنه و مقدار فوق رو در اون مینویسه و موقع صدا زدن تابع هم همونو میخونه – توجه بفرمایید که این حالت ذخیره سازی به درد ذخیره اطلاعات حساس نمیخوره و بسیار نا امن هست .
موفق باشید .

PuyanPunish پاسخ داده شده 4 ماه قبل

ولی جناب ، player pref اصلی متغیری واسه bool نداره !!!
فقط واسه int , float و string داره