Unity Playerprefs Düzgün Çalışmıyor C#
-
Slm müridler.
yaklaşık 4 saattir bakıyorum fakat bulamadım vede anlayamadım.level load yapmak istiyorum, fakat kod playerPrefs.getint() kısmına gelince 1 olması gereken yerde 2 oluyor.
teamviewerla biri yardım ederse çok sevinirim
-
using UnityEngine; using System.Collections; public class GameManager : MonoBehaviour { public int currentScore; public int highscore; public int currentLevel; public int unlockedLevel; void Start(){ print (currentLevel + "ilk"); if ((PlayerPrefs.GetInt ("Level Completed"))> 0 ) { currentLevel = PlayerPrefs.GetInt ("Level Completed"); } else { print("r u here"); currentLevel=0; } print (currentLevel + "iki"); } public void CompleteLevel(){ print ("yeppa"); if (currentLevel < 2) { currentLevel+=1; print("here 1234567?"+currentLevel); PlayerPrefs.SetInt("Level Completed",currentLevel); PlayerPrefs.SetInt("Level"+ currentLevel.ToString()+" score",currentScore); Application.LoadLevel (currentLevel); } else print ("u win"); } }Ekerci tarafından 16/Kas/14 14:54 tarihinde düzenlenmiştir
çıktı alıyorum nerde ne oluyor diye; print ilk olan yerde 0 değeri gösteriyor, print iki olan yerde de 2 gösteriyor.fakat 1 göstermesi lazım.kendine fazladan 1 ekliyor.niye olduğunu çözemedim.zaten complete levela girmiyor çünkü gelirken currentlevel 2 olarak geliyor ve u win çıkıyor -
2000 kişi bakmış kimse cevap yazmamış upp olsun
-
umudu kaybettim
-
currentLevel = PlayerPrefs.GetInt ("Level Completed");Atamayı burda yapıyorsun burdan 2 dönüyor demek ki. Level Completed yerine başka bi değer girmen gerekiyor.
-
http://docs.unity3d.com/ScriptReference/PlayerPrefs.html
On Windows, PlayerPrefs are stored in the registry under HKCU\Software\[company name]\[product name] key, where company and product names are the names set up in Project Settings.
-
hocam açıkcası koddan bişi anlayamadım( ne yapmak istediğini de anlayamadım). ama loadlevel scene ile birlikte çalışıyor. Birden fazla sahne ekleme kısmı ile. ve application load levelin çalışma prensibinde playerpref kullanacaksan daha farklı bir yol izlemen gerekebilir.
ben sana playerpref kullanımını anlatayım.
Playerpref ile var olan datayı hafızaya atarsın. ve kullanıcı bir kez daha oyuna girdiğinde son hafızadaki bilgi ne ise ona göre bir loadlevel (scene) çalıştırırsın.
bu kodda butonla gösterdim. butona her tıkladıgında ve uygulamayı aç kapa yaptıgında prefin nasıl yükseldiğini göreceksin. ama sen her oyun bittiğinde farklı bir levele yani oluşturduğun farklı bir sahneyi çalıştıracaksan. oyunun her bittiği bölümde şu şekilde bir mantık izlemen lazım.using UnityEngine; using System.Collections; public class GameManager : MonoBehaviour { public bool isLevel = false; public int currentLevel; void Start(){ print (PlayerPrefs.GetInt("currentlevel",currentLevel).ToString()); } void OnGUI() { if(!isLevel){ if (GUI.Button (new Rect (10, 10, 100, 100), "Level Arttır")) { currentLevel +=1; int tempLevel = PlayerPrefs.GetInt("currentlevel",currentLevel); currentLevel = tempLevel + currentLevel; PlayerPrefs.SetInt("currentlevel",currentLevel); isLevel = true; } } } } -
Ek olarak
playerpref int setint, getint, haskey gibi inceleyip ne şekilde kullanıldığına bakmanda fayda var. o kısıma hakim olduktan sonra sonra application.loadlevelin kullanım şekli yeni bir scene yüklerken ki static değerlerin, animasyonların ve ses efektlerininde çalışma prensibine bakman gerekecektir. çünkü problemler çıkıyor.
Bu arada hocam void ongui ve void update bölümleri frame başına çalışır. yani sen orada belli bool kontroller yada farklı yöntemler izlemelisin. yoksa orada sabahtan aksama kadar hiç durmadan deli gibi değer basar. saniyede 100 kere basar. o yüzden kodda
isLevelgibi bir bool değer kullandım.http://docs.unity3d.com/ScriptReference/MonoBehaviour.OnGUI.html
-
birazdan okuyacam.teamden yardım etmek isteyen varsa pm atabilir
-
beyler abim buldu sorunu.mainmenu kısmında playerprefs.setint 0 koydu.su an düzgün çalışıo.anlayamadıgım şey ben bunu gamemanager kısmında da yapmıstım.main menu leveli de 3:S
