05 «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.» 07

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

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

 

【Unity】Listのソート方法 

おはようございます。
大坂です。

曜日感覚がなくて昨日木曜日なのをすっかり忘れてました…。
このところ土日もつぶれてるので…(言い訳

さて、今週も小ネタというにも短い感じになりそうですが、Listのソート使いたかったんです。

List<int>とかを使っているときは「Sort()」を使えばソートしてくれますね。
List<WeaponData>とか自分で作成したクラスの中身でソートしたい場合なんかはこんな感じですかね。

// 適当にこんなクラス
public class WeaponData() {
int weaponID,
int category,
string weaponName,
int atk,

}

List<WeaponData> weaponList = List<WeaponData>();
// リストに入れるデータは省略

// ソート方法
// IDでソートしたい場合
weaponList.Sort((a, b) => a.weaponID.CompareTo(b.weaponID));
// カテゴリーでソートしたい場合
weaponList.Sort((a, b) => a.category.CompareTo(b.category));

こんな感じでできますね。
最近ちょっと使ったのでメモ程度です。

では今週もこれにてノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【ハルシオンブログ】uGUIのImageでTiledを使ったらiOSが変になった!!iOSってtiled対応してないの?なんなの? 

おはようございます。
坂内っす。

忙しいのでさくっとUnityの話題を振って今日は終わりにします。

uGUIのImageなんですが、なぜか一部のiphoneでTiledが動作しないということがあったので、誰かわかる人いたら教えて下さいってネタです!

使ってるUnityは「Unity5.6.0f3」
んで、こんな感じの画面を作ってみます。



画面の真ん中から左右TiledでImageを置いてる感じです。
元の絵はこんな感じ。


何で2個おいてるかというと、Textureの設定を変えています。

【左側のテクスチャ設定】


【右側のテクスチャ設定】


GenerateMipmapがONかどうかの違いです。

まぁこれを端末で実行するとこうなります。
【Android】



【iOS】
ちょっと画面サイズ合わせてなかったのでおかしいですが、
Tiledの方が変な感じになってるのが問題です。



?????


なんでこうなるの?

誰かわかる人いたら教えて下さいませ。
これ、Unity5.6.1でもこうなるらしいっす。

分かりません。僕にはわかりません。

ってことで、誰かわかる人いたら教えてください。

以上!あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】あ、止めたコルーチンを止めたところから始めたかったよ。 

こんにちは。
大坂です。

ちょっと前にこんな記事を書きましたが、この方法だと止めることしかできなかったので、
止めたコルーチンを止めたところから始めたくなったんです。

簡単に書くとこんな感じですかね。
IEnumerator testEnumerator;

private void Awake() {
testEnumerator = Test();
StartCoroutine(testEnumerator);
}
private IEnumerator Test() {
// 処理

// 止める
yield return new WaitForSeconds(2f);

// 処理
}

public void Stop() {
StopCoroutine(testEnumerator);
}

public void ReStart() {
StartCoroutine(testEnumerator);
}

これで止めた途中から開始することができましたよ。
ちょっと途中から開始しないといけないときがあったので、紹介だけ。

短いですけど、今週もこれで終わりですよノシ

Category: 開発日記(Unity)

tb 0 : cm 0   

【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   

【ハルシオンブログ Unity】uGUIのオブジェクトってHierarchyで下に行くほど上のレイヤーになるじゃないっすか。あれ逆にできないの?できるんです! 

はい、こんにちは。
坂内っす。

全然ハルシオンのアプリ作成できてないっす。
早く作りたいっすね!

さて、Unityのお話。

こんな感じでオブジェクトを並べたい時ってありませんか?


HorizontalLayout使ったりして並べるんですが、右にいくほど左のオブジェクトの下に潜り込む感じ・・・・・

uGUIってHierarchyで下に行くほどレイヤー的には上に載っかかっていくので、普通に並べるとこうなりますよね。

※右のオブジェクトが左のオブジェクトの上に来る。(HorizontalLayoutのspacingがマイナスの時)

こんな時はCanvasを各オブジェクトにつけて、SortingLayerをそれぞれ指定してあげると下に潜り込むようにできます。


※え?全然わからねえww

左がCanvas無し。
右がCanvasあり。(左側オブジェクトはOrderInLayer12、右側オブジェクトはOrderInLayer10)



こんな感じにすると、Hierarchyで下にあるオブジェクトでもレイヤー的には下に来させることができます。

という、小ネタでした。
なんとなく伝わればそれでいいです。

では、あでゅ~ノシ

Category: 開発日記(Unity)

tb 0 : cm 0