这个问题之前已经得到了回答,但是我尝试了一切,但是没有用。
我在一个脆弱的鸟类克隆中有这个int,你收集硬币,它就像一个硬币计数器一样上升。
每次收集硬币都会
PlayerPrefs.SetInt("coin", coin);
coin+=1
PlayerPrefs.Save();
当一个新的硬币产生时,我会在课程开始时这样做(不是在无效的Start())
private int coin = PlayerPrefs.GetInt("coin");
一切都很好。 我甚至通过在控制台代码中打印出来进行测试,然后将硬币倒计时就好了!
但我还有另一个名为Shop的场景,你可以在那里花钱。但是我做了一些绘制那些整数的方法,这应该可以正常工作,但我得到一个错误,getInt只能从主线程调用,这是愚蠢的,因为我不能把它放在启动/唤醒/更新方法,因为当我这样做时,我会犯更多错误。
我该怎么办?我想调用我在该场景中使用playerprefs保存的硬币整数来绘制硬币数量
我尝试这样称呼:private int coin = PlayerPrefs.GetInt("coin");
但是我得到一个错误,即使我在实际游戏场景中调用它时也没有错误。
完整代码:
using UnityEngine;
using System.Collections;
public class SpriteScript : MonoBehaviour
{
private int coin = PlayerPrefs.GetInt("coin");
public Sprite num1;
public Sprite num2;
public Sprite num3;
public Sprite num4;
public Sprite num5;
public Sprite num6;
public Sprite num7;
public Sprite num8;
public Sprite num9;
public Sprite num0;
private int spritenum;
private SpriteRenderer spriteRenderer;
// Use this for initialization
void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>(); // we are accessing the SpriteRenderer that is attached to the Gameobject
if (spriteRenderer.sprite == null) // if the sprite on spriteRenderer is null then
spriteRenderer.sprite = num0; // set the sprite to sprite1
}
// Update is called once per frame
void Update()
{
if (coin < 10)
{
spritenum = coin;
if (coin > 10)
{
if (coin < 20)
{
spritenum = coin - 10;
}
if (coin > 20)
{
if (coin < 30)
{
spritenum = coin - 20;
}
if (coin > 30)
{
if (coin < 40)
{
spritenum = coin - 30;
}
if (coin > 40)
{
if (coin < 50)
{
spritenum = coin - 40;
}
if (coin == 50)
{
spritenum = coin - 50;
}
}
}
}
}
}
ChangeTheDamnSprite();
}
void ChangeTheDamnSprite()
{
if (spritenum == 0)
{
spriteRenderer.sprite = num0;
}
if (spritenum == 1)
{
spriteRenderer.sprite = num1;
}
if (spritenum == 2)
{
spriteRenderer.sprite = num2;
}
if (spritenum == 3)
{
spriteRenderer.sprite = num3;
}
if (spritenum == 4)
{
spriteRenderer.sprite = num4;
}
if (spritenum == 5)
{
spriteRenderer.sprite = num5;
}
if (spritenum == 6)
{
spriteRenderer.sprite = num6;
}
if (spritenum == 7)
{
spriteRenderer.sprite = num7;
}
if (spritenum == 8)
{
spriteRenderer.sprite = num8;
}
if (spritenum == 9)
{
spriteRenderer.sprite = num9;
}
}
}
顺便说一句,如果你想知道,它几乎看你有多少硬币并替换精灵以匹配数字,请不要质疑我用来绘制硬币金额的愚蠢方式,你能帮忙吗?我解决了这个问题?正如我所说,我尝试将它放在启动方法中,没有任何反应,而是更多的错误。
哦,如果改变了什么,我就建立了android
答案 0 :(得分:0)
我怀疑你是以错误的方式接近这个问题。我建议您创建一个名为CoinController的新类:Monobehaviour并将其附加到您的播放器。
public class CoinController: MonoBehaviour {
int coins;
public int Coins {
get {
return coins;
}
}
public Sprite GetSprite() {
//logic for determining sprite based on number of coins here
}
public void AddCoins(int num) {
coins += num;
}
public void SpendCoins(int num) {
coins -= num;
}
}
CoinController coinController = GetComponent<CoinController>();
coinController.AddCoins(5);
coinController.SpendCoins(2);
//in update method
Sprite thisSprite = coinController.GetSprite();
//draw sprite logic, not sure how you're doing this, but DrawCoinSprite would be some method that updates which sprite to draw
DrawCoinSprite(thisSprite);
我希望有所帮助!