我有下面的脚本,当用户点击按钮并删除一些“钱”时,我正在尝试更改Gui.Skin。
// Converted from UnityScript to C# at http://www.M2H.nl/files/js_to_c.php - by Mike Hergaarden
// Do test the code! You usually need to change a few small bits.
using UnityEngine;
using System.Collections;
public class Shop : MonoBehaviour {
//variables----------------------------------------
public bool ShowShop = false;
public Texture CoinTexture;
public int Money = 0;
public GUISkin skin = null;
public GUISkin bought = null;
public bool AddButton= false;
//Items:
//to add more items just copy this variable and add the item name;
//code----------------------------------------
void Start (){}
void Update (){
if(Money <= 0){
Money = 0;
}
}
private void OnGUI (){
GUI.skin = skin;
if(ShowShop ==true){
//money{********************-------------------------------------------------------------**************************
GUI.Button( new Rect(Screen.width/60,Screen.height/35 ,50,50), CoinTexture);
GUI.Button( new Rect(Screen.width/60+50,Screen.height/35 ,70,50), ""+Money);
if(AddButton ==true){
if(GUI.Button( new Rect(Screen.width/60+120,Screen.height/35 ,70,50), "Add")){
Money += 100;
}
}
//money}***********************-------------------------------------------------------------------*****************************
//Items(Shop){
if(GUI.Button( new Rect(20, 70 , 120, 120), "Buy: 100")){
if(Money >= 100){
Money -= 100;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(140, 70, 120, 120), "Buy: 200")){
if(Money >= 200){
Money -= 200;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(260, 70, 120, 120), "Buy: 300")){
if(Money >= 300){
Money -= 300;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(380, 70, 120, 120), "Buy: 400")){
if(Money >= 400){
Money -= 400;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(20, 190 , 120, 120), "Buy: 500")){
if(Money >= 500){
Money -= 500;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(140, 190, 120, 120), "Buy: 600")){
if(Money >= 600){
Money -= 600;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(260, 190, 120, 120), "Buy: 700")){
if(Money >= 700){
Money -= 700;
}else{
Money -=0;
}
}
if(GUI.Button( new Rect(380, 190, 120, 120), "Buy: 800")){
if(Money >= 800){
Money -= 800;
}else{
Money -=0;
}
}
}
}
}
下面的这部分工作完美,它减去了用户的钱。正如您在脚本顶部所见,我有Public GUISkin skin = null
和Public GUISkin bought = null
。
当有人点击按钮时,我想将guiskin从skin
更改为bought
。
if(GUI.Button( new Rect(20, 70 , 120, 120), "Buy: 100")){
if(Money >= 100){
Money -= 100;
this.Skin = bought; // THIS IS WHAT I HAVE TRIED
}else{
Money -=0;
}
}
我似乎无法找到任何办法 - 有人有任何建议吗?
答案 0 :(得分:0)
您可以使用GUI.skin = bought;
,因为“this”代表您的组件行为,而不是您的GUI对象this.Skin不以任何方式引用当前的GUI.skin ......
同样设置GUI.skin将在此之后更改所有GUI绘制以使用新外观,因此如果您只想更改当前按下的按钮,您可能会改变它的样式而不是整个GUI外观。有很多方法可以实现这一点,如果要为所有GUI元素设置外观,我建议你这样做:
有关更多信息和更好地了解皮肤,请阅读manual,以避免在您只想更改元素样式时更改整个皮肤的麻烦。
请注意,OnGUI()函数每帧调用两次或更多次,并实例化一个新的Rect作为参数来协调每个元素,如GUI.Button(**new Rect(x,y,w,h)**, "myButton")
,可能会导致性能低下的问题(并且您也会将数学运算到声明中,因此可能你需要使用GUILayout或更改你的坐标声明,以便在需要时重新计算。