2016-05-10 5 views
-2

私はUnityで2Dゲームを開発しています。私は、プレイヤーに異なるキャラクターを選択させるためのキャラクターパネルを作成しました。パネルには、異なる文字のサムネイルがあります。特定の文字のサムネイルをタップすると、そのキャラクタを見ることができます。サムネイルの元の縮尺は1です。プレーヤーがサムネイルをタップすると、縮尺は倍になります。これまではすべてが問題ありません。プレーヤーがサムネイルをタップするとその倍率が倍になるという問題があります。しかし、私はそれを一度だけに制限したい。スケーリングを止めるためにフラグを使用しましたが、それでも問題はあります。フラグの後にスケーリングは停止しますが、プレイヤーは複数の文字を同時にクリックできます。ここでスニペットをコピーしています。一度スケーリングするのではなく、それらをクリックしたときに私が正しくあなたの質問を理解していればクリックイベントのスケーリング問題

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class ViewCharacter : MonoBehaviour { 

[SerializeField] 
private GameObject TempCharacterHolder ,TempCharacter, TempCharacterText, TempCharacterPrice; 

// Use this for initialization 
void Start() { 
    for (int i = 0; i < ShoppingManager.instance.ShoppingList.Count; i++) { 
     if (i == TheGameController.instance.GetSelectedCharacter()) { 
      PlayerPrefs.SetInt ("CharacterScaled" + i, 1); 
     } else { 
      PlayerPrefs.SetInt ("CharacterScaled" + i, 0); 
     } 
    } 
} 

public void ViewCharacterFunc() 
{ 
    int ClickedCharacter = int.Parse (TempCharacterText.GetComponent<Text>().text); 

    foreach (var characters in ShoppingManager.instance.ShoppingList) { 
     if (string.Equals (characters.CharacterName, TempCharacterText.GetComponent<Text>().text)) { 
      if (PlayerPrefs.GetInt("CharacterScaled"+characters.CharacterName)==0) { 
       ShoppingManager.instance.IncreaseScale (TempCharacter, TempCharacterHolder); 

       for (int i = 0; i < ShoppingManager.instance.ShoppingList.Count; i++) { 
        if (i == ClickedCharacter) { 
         PlayerPrefs.SetInt ("CharacterScaled" + i, 1); 
        } else { 
         PlayerPrefs.SetInt ("CharacterScaled" + i, 0); 
        } 
       } 
      } 
     } else { 
      Color clr = characters.Character_Holder.GetComponent<Image>().color; 
      clr.a = 1; 
      characters.Character_Holder.GetComponent<Image>().color = clr; 

      Vector3 TempVector = characters.CharaacterObject.GetComponent<RectTransform>().localScale; 
      TempVector.x = 1f; 
      TempVector.y = 1f; 
      characters.CharaacterObject.GetComponent<RectTransform>().localScale = TempVector; 
     } 
    } 
} 

}

+0

あなたは状況により正確な詳細を記入してください可能性があり、使用しているコードおよび/あるいはスクリーンショットのいくつかの例問題の? –

+0

このページを見て、スタックオーバーフローについての良い質問をすることができます:http://stackoverflow.com/help/how-to-ask – willpower2727

+0

私はそれが英語が母国語以外の話し手から少し荒いです。問題は基本的なものですが、完全に賢明で分かりやすいものです。私はUnityタグで**の10の質問**を参照しています。これは現在、ダウンボウトのないゴミ箱です。 – Fattie

答えて

1

は、あなたの文字が何度も拡大します。

そのような場合、私はブール値とすることを制御することをお勧めしたい:

bool hasTouched = false; 

void OnMouseDown() 
{ 

    ShoppingManager.instance.Message.SetActive (false); 

    foreach (var characters in ShoppingManager.instance.ShoppingList) { 

     Color clr = characters.Character_Holder.GetComponent<Image>().color; 
     clr.a = 1; 
     characters.Character_Holder.GetComponent<Image>().color = clr; 

     if (!hasTouched) //if we havent touched 
     { 
     Vector3 TempVector = characters.CharaacterObject.GetComponent<RectTransform>().localScale*Time.deltaTime; 
     TempVector.x = 1.0f; 
     TempVector.y = 1.0f; 
     characters.CharaacterObject.GetComponent<RectTransform>().localScale = TempVector; 
     hasTouched = true; //then we scale it, and we have touched it 
     } 

    } 
+0

私はこのスクリプトを試していますが、まだスケールの問題が発生しました。 – Chetan

+0

こんにちは@Chetan今何が起こるのですか? 1つのオブジェクトが間違っているかまったく行きますか?または何? – Fattie

+0

@Chetan代わりに 'OnMouseUp(void)'を試すこともできます。おそらく 'OnMouseDown'が連続したプレスをチェックしているのでしょうか? – Tom

関連する問題