09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】uGUIボタン押したときにテキストの色が変わらないので適当に拡張してみたよ。その② 

こんにちは。
大坂です。

どうにも疲れが抜けない日々が続いてますが、皆様元気にお過ごしでしょうか(ぇ
しばらく休みという休みがなかったですが、一応今週はもうお休みの予定。

さて、ネタは先週の記事の続きですね。

ボタンの色も一緒に変えるところまでが先週でしたが、押し込んだ時も戻った時もボタンに設定した色と同じ色にしているので、
テキストはテキストで色を変えたいときなんかの拡張も少し紹介。

とりあえず先週のコードに[SerializeField]でColorを追加して、Awakeで初期値もいろいろ設定。
あとは、色変えるところで追加したColorの色を入れるように。

using UnityEngine;
using UnityEngine.UI;

public class ChildColorChangeButton : Button {

Text[] childTxt;

[SerializeField]
Color childTxtColorNormal = new Color(1f, 1f, 1f);
[SerializeField]
Color childTxtColorPressed = new Color(0.431f,0.431f,0.431f);

protected override void Awake() {
childTxt = this.gameObject.GetComponentsInChildren();
// ボタンの色の初期値も設定しておく。
var blockColor = this.colors;
blockColor.normalColor = new Color(1f,1f,1f);
blockColor.pressedColor = new Color(0.431f,0.431f,0.431f);
// テキストの色を指定した場合にfadeDuration があると違和感があったので「0」を指定。
blockColor.fadeDuration = 0f;
this.colors = blockColor;
}

protected override void DoStateTransition(SelectionState state, bool instant) {
base.DoStateTransition(state, instant);

switch(state) {
case SelectionState.Highlighted:
case SelectionState.Normal:
for(int i = 0; i < childTxt.Length; i++) {
childTxt[i].color = childTxtColorNormal;
}
break;
case SelectionState.Pressed:
for(int i = 0; i < childTxt.Length; i++) {
childTxt[i].color = childTxtColorPressed;
}
break;
case SelectionState.Disabled:
break;
}
}
}

先週のに追加するのはこんなところですね。
が、これだけだとColorの項目がInspectorに出てこないので「Assets」-「Editor」フォルダにこんなのを追加。

using UnityEditor;
using UnityEditor.UI;
using UnityEngine;

[CustomEditor(typeof(ChildColorChangeButton))]
public class ChildColorChangeButtonEditor : ButtonEditor {
ChildColorChangeButton _target;
SerializedProperty childTxtColorNormal;
SerializedProperty childTxtColorPressed;

protected override void OnEnable() {
base.OnEnable();

_target = target as ChildColorChangeButton;
childTxtColorNormal = serializedObject.FindProperty("childTxtColorNormal");
childTxtColorPressed = serializedObject.FindProperty("childTxtColorPressed");
}

public override void OnInspectorGUI() {
base.OnInspectorGUI();
EditorGUILayout.Space();

serializedObject.Update();
EditorGUILayout.PropertyField(childTxtColorNormal, new GUIContent("childTxtColorNormal"), true);
EditorGUILayout.PropertyField(childTxtColorPressed, new GUIContent("childTxtColorPressed"), true);
serializedObject.ApplyModifiedProperties();
}
}

これで無事に色の指定もできるようになります。
設定はこんな感じでできますね。


試したのがこんな感じですね。
色適当ですけど。

※クリックしたら見れます。

では今週もこれで終わりですよノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/409-cc483456
この記事にトラックバックする(FC2ブログユーザー)