比较并复制两个相同的选项但在脚本中不同(C# Unity)
Compare and copy two the same option but different in script(C# Unity)
我有 3 个脚本,它们是 OptionPopup.cs、MC_StreamingOption.cs、MC_OptionPopUp.cs。现在这里是我的UI的屏幕截图,以便您完全理解我的问题。
Horse Racing Scene
左侧下方的选项必须与右侧游戏选项板上的值相同。
例如:我选择 Rendering
然后在 GameOption 上 Rendering
也将被选中,就像我在 [=40] 上选择时一样=]GameOption Rendering
然后在左侧下方的赛马场景中 Rendering
将被选中。
所以这是我的游戏选项(在右侧选项)的脚本。
注意:它们在不同的场景中,所以基本上我无法在我的 UI 的
上使用静态字段
OptionPopUp.cs
public void LiveStreaming()
{
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME && MC_StreamingOption.isLiveStreamingOutside)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
isCheckedLivestream = true;
PlayerPrefs.SetInt(LiveStreaming_, 1);
if (isCheckedLivestream)
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(Rendering_, 0);
}
} else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
isCheckedLivestream = false;
PlayerPrefs.SetInt(LiveStreaming_, 0);
if (!isCheckedLivestream && render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(Rendering_, 1);
}
}
}
public void Rendering()
{
if (render.normalSprite == RADIO_OFF_SPRITE_NAME && MC_StreamingOption.isRenderingOutside)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
isCheckedRendering = true;
PlayerPrefs.SetInt(Rendering_, 1);
if (isCheckedRendering)
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(LiveStreaming_, 0);
}
} else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
isCheckedRendering = false;
PlayerPrefs.SetInt(Rendering_, 0);
if (!isCheckedRendering && livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(LiveStreaming_, 1);
}
}
}
这是我在 Horce 赛车场景(在下方左侧)
中所做的
MC_StreamingOption
//[PK Debug 2/6/2018]
public string RADIO_ON_SPRITE_NAME = "popup_radiobtn01_on";
public string RADIO_OFF_SPRITE_NAME = "popup_radiobtn01_off";
[SerializeField] UIButton livestream = null;
[SerializeField] UIButton render = null;
public static bool isLiveStreamingOutside = false;
public static bool isRenderingOutside = false;
public void LiveStreaming()
{
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
//render.normalSprite = RADIO_OFF_SPRITE_NAME;
if (livestream.normalSprite == RADIO_ON_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.LiveStreaming_, 1);
isLiveStreamingOutside = true;
render.normalSprite = RADIO_OFF_SPRITE_NAME;
}
}
else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
render.normalSprite = RADIO_ON_SPRITE_NAME;
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.LiveStreaming_, 0);
isLiveStreamingOutside = false;
render.normalSprite = RADIO_ON_SPRITE_NAME;
}
}
}
public void Rendering()
{
if (render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
if (render.normalSprite == RADIO_ON_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.Rendering_,1);
isRenderingOutside = true;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
}
} else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
if (render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.Rendering_, 0);
isRenderingOutside = false;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
}
}
}
所以我通过以下代码调用游戏选项(在右侧):
MC_OptionPopUp.cs
if (tzGlobal.Instance.UserConsoleType == tzGlobal.eGameRH_ConsoleType.LOBBY)
{
if (PlayerPrefs.GetInt(OptionPopup.LiveStreaming_) == 1)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
}
else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
}
if (PlayerPrefs.GetInt(OptionPopup.Rendering_) == 1)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
}
else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
}
}
就这样,这样你就会知道我就是这样做的。如果有人能帮助我解决我的问题,我将不胜感激。
我在这里做的是这个
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
isLiveStreamingOutside = true;
PlayerPrefs.SetInt(OptionPopup.LiveStreaming_, 1);
if (isLiveStreamingOutside)
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(OptionPopup.Rendering_, 0);
}
}
else
{
isLiveStreamingOutside = false;
PlayerPrefs.SetInt(OptionPopup.LiveStreaming_, 0);
if (!isLiveStreamingOutside)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(OptionPopup.Rendering_, 1);
}
}
所以从MC_StreamingOption.cs开始,我别无选择,只能再次获得播放器首选项。它有效。
我有 3 个脚本,它们是 OptionPopup.cs、MC_StreamingOption.cs、MC_OptionPopUp.cs。现在这里是我的UI的屏幕截图,以便您完全理解我的问题。
Horse Racing Scene
左侧下方的选项必须与右侧游戏选项板上的值相同。
例如:我选择 Rendering
然后在 GameOption 上 Rendering
也将被选中,就像我在 [=40] 上选择时一样=]GameOption Rendering
然后在左侧下方的赛马场景中 Rendering
将被选中。
所以这是我的游戏选项(在右侧选项)的脚本。 注意:它们在不同的场景中,所以基本上我无法在我的 UI 的
上使用静态字段OptionPopUp.cs
public void LiveStreaming()
{
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME && MC_StreamingOption.isLiveStreamingOutside)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
isCheckedLivestream = true;
PlayerPrefs.SetInt(LiveStreaming_, 1);
if (isCheckedLivestream)
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(Rendering_, 0);
}
} else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
isCheckedLivestream = false;
PlayerPrefs.SetInt(LiveStreaming_, 0);
if (!isCheckedLivestream && render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(Rendering_, 1);
}
}
}
public void Rendering()
{
if (render.normalSprite == RADIO_OFF_SPRITE_NAME && MC_StreamingOption.isRenderingOutside)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
isCheckedRendering = true;
PlayerPrefs.SetInt(Rendering_, 1);
if (isCheckedRendering)
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(LiveStreaming_, 0);
}
} else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
isCheckedRendering = false;
PlayerPrefs.SetInt(Rendering_, 0);
if (!isCheckedRendering && livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(LiveStreaming_, 1);
}
}
}
这是我在 Horce 赛车场景(在下方左侧)
中所做的MC_StreamingOption
//[PK Debug 2/6/2018]
public string RADIO_ON_SPRITE_NAME = "popup_radiobtn01_on";
public string RADIO_OFF_SPRITE_NAME = "popup_radiobtn01_off";
[SerializeField] UIButton livestream = null;
[SerializeField] UIButton render = null;
public static bool isLiveStreamingOutside = false;
public static bool isRenderingOutside = false;
public void LiveStreaming()
{
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
//render.normalSprite = RADIO_OFF_SPRITE_NAME;
if (livestream.normalSprite == RADIO_ON_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.LiveStreaming_, 1);
isLiveStreamingOutside = true;
render.normalSprite = RADIO_OFF_SPRITE_NAME;
}
}
else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
render.normalSprite = RADIO_ON_SPRITE_NAME;
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.LiveStreaming_, 0);
isLiveStreamingOutside = false;
render.normalSprite = RADIO_ON_SPRITE_NAME;
}
}
}
public void Rendering()
{
if (render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
if (render.normalSprite == RADIO_ON_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.Rendering_,1);
isRenderingOutside = true;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
}
} else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
if (render.normalSprite == RADIO_OFF_SPRITE_NAME)
{
PlayerPrefs.GetInt(OptionPopup.Rendering_, 0);
isRenderingOutside = false;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
}
}
}
所以我通过以下代码调用游戏选项(在右侧):
MC_OptionPopUp.cs
if (tzGlobal.Instance.UserConsoleType == tzGlobal.eGameRH_ConsoleType.LOBBY)
{
if (PlayerPrefs.GetInt(OptionPopup.LiveStreaming_) == 1)
{
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
}
else
{
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
}
if (PlayerPrefs.GetInt(OptionPopup.Rendering_) == 1)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
}
else
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
}
}
就这样,这样你就会知道我就是这样做的。如果有人能帮助我解决我的问题,我将不胜感激。
我在这里做的是这个
if (livestream.normalSprite == RADIO_OFF_SPRITE_NAME)
{
isLiveStreamingOutside = true;
PlayerPrefs.SetInt(OptionPopup.LiveStreaming_, 1);
if (isLiveStreamingOutside)
{
render.normalSprite = RADIO_OFF_SPRITE_NAME;
livestream.normalSprite = RADIO_ON_SPRITE_NAME;
PlayerPrefs.SetInt(OptionPopup.Rendering_, 0);
}
}
else
{
isLiveStreamingOutside = false;
PlayerPrefs.SetInt(OptionPopup.LiveStreaming_, 0);
if (!isLiveStreamingOutside)
{
render.normalSprite = RADIO_ON_SPRITE_NAME;
livestream.normalSprite = RADIO_OFF_SPRITE_NAME;
PlayerPrefs.SetInt(OptionPopup.Rendering_, 1);
}
}
所以从MC_StreamingOption.cs开始,我别无选择,只能再次获得播放器首选项。它有效。