对不起,我只是开始使用Unity 3D,我对此没有经验。
每当用户赢得关卡时,我想添加500个硬币,
在我的代码中,当用户获胜时,会弹出一个窗口,但我还想向用户添加500个硬币。
这是我的代码:
<?php
$array = [1, 4, 3, 5, 9, 6, 1, 6, 4, 1, 1, 4, 5, 6, 6, 7, 2, 1, 4, 0];
$j = count($array);
$t = $j-1;
while($j>=0){
for ($i=0; $i < $t; $i++) {
$aux = $array[$i];
if($array[$i]>$array[$i+1]){
$array[$i] = $array[$i+1];
$array[$i+1] = $aux;
}
}
$j--;
}
print_r($array);
这是public class GameScreen : BaseScreen
{
.....
public void OpenWinPopup()
{
OpenPopup<WinPopup>("Popups/WinPopup", popup =>
{
var gameState = GameLogic.GameState;
var levelStars = PlayerPrefs.GetInt("level_stars_" + levelInfo.Number);
if (gameState.Score >= levelInfo.Star3Score)
{
popup.SetStars(3);
PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 3);
}
else if (gameState.Score >= levelInfo.Star2Score)
{
popup.SetStars(2);
if (levelStars < 3)
{
PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 2);
}
}
else if (gameState.Score >= levelInfo.Star3Score)
{
popup.SetStars(1);
if (levelStars < 2)
{
PlayerPrefs.SetInt("level_stars_" + levelInfo.Number, 1);
}
}
else
{
popup.SetStars(0);
}
var levelScore = PlayerPrefs.GetInt("level_score_" + levelInfo.Number);
if (levelScore < gameState.Score)
{
PlayerPrefs.SetInt("level_score_" + levelInfo.Number, gameState.Score);
}
popup.SetScore(gameState.Score);
popup.SetGoals(levelInfo.Goals, gameState, LevelGoalsWidget);
});
}
}
的类:
CoinSystem
我花了很多时间没有结果,这是我第一次使用Unity 3D。
答案 0 :(得分:0)
如果您的GameScreen
类是从MonoBehaviour
派生的,我建议添加一个指向您的CoinSystem
的公共变量。示例将其添加到GameScreen.cs
:
public class GameScreen : BaseScreen
{
// Add this ↓↓
public CoinsSystem coinsSystem;
}
然后将您的CoinsSystem
资产从“项目”选项卡拖放到您的GameScreen
组件属性,该属性将命名为“硬币系统”。
之后,您可以通过CoinsSystem
变量访问coinsSystem
,例如:
public class GameScreen : BaseScreen
{
public CoinsSystem coinsSystem;
public void OpenWinPopup()
{
coinsSystem.BuyCoins(500);
OpenPopup<WinPopup>("Popups/WinPopup", popup =>
{
// *Rest of OpenPopup<WinPopup> code*
});
}
}
但是,坏习惯是指在每个值获取/设置上的序列化值。建议的用法是通过变量,然后使用专用的Save()
和Load()
函数。部分示例:
public class CoinsSystem : ScriptableObject
{
private Action<int> onCoinsUpdated;
public int coins;
public void BuyCoins(int amount)
{
coins += amount;
onCoinsUpdated?.Invoke(coins);
// Optionally have this to save on each BuyCoins call:
// Save()
}
public void Save()
{
PlayerPrefs.SetInt("num_coins", coins);
}
public void Load()
{
coins = PlayerPrefs.GetInt("num_coins");
}
}