FC2ブログ
    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で左回転画面、右回転画面のどっちにも対応したい時のやり方。ただのautoRotationだとアプリ開始時に縦になっちゃうよーーふぇぇん 解消法 

    こんにちは、坂内っす。

    1週間が早いっすね!

    そろそろハクスラ作り始めたいっすねー 
    ってことで、GrimDawn始めました。
    DIABLOみたいなハクスラっすね。
    あ、タンクやりたい人募集っす。
    誰か一緒にやりませんか。

    ほんじゃUnityの話題。
    横画面でのゲームを作っていて、「”右回転”と”左回転”のどっちでもできるようにしたい。」ってことあると思うんですが、その場合って以下の設定にしますよね。



    でも、この設定だとアプリ起動時に縦画面だった場合に縦になっちゃうんですよね。

    そんな時は、次のことをすればアプリ開始時に横になって、その後はちゃんと右回転も、左回転もできるようになります。

    ①初期は左か右の横に設定。



    ②コードで右左回転に変更。
            Screen.orientation = ScreenOrientation.AutoRotation;
    Screen.autorotateToPortrait = false; // 縦
    Screen.autorotateToLandscapeLeft = true; // 左
    Screen.autorotateToLandscapeRight = true; // 右
    Screen.autorotateToPortraitUpsideDown = false; // 上下逆


    タイトル画面とかそういうはじめの画面のStartにでも書いとけばOK!!

    これで、開始時は横に強制的に設定後、ゲーム始まったら右左の横画面のオートローテーションになります。

    以上!ではあでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【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さんのオフィスお邪魔してきましたよー 

    こんにちは!坂内っす!
    本当は昨日ブログの日でしたね!
    すっかり忘れてました!

    本日は昼前からUnityTechnologiesJapanさんの六本木オフィスにお邪魔してきました!
    まだ、レンタルオフィスなんですね!知らなかった!

    そして、ごちっす!


    今回はねこばたさん(@nekobata_kaigi)がUnityさんに行くということで、おまけでついていく感じでした。

    UnityAdsの話かなぁと思ってましたが(まぁそれもちょっとありましたが)、他にも楽しそうな話などもあり、行ってよかったなーと!

    やっぱりUnityAdsはあの「振り込み申し込み方式がシステム化すれば・・・・使いたいんですけどねぇ」って方がたくさんいると思いますが、あれなんとかなりませんかねぇ・・・

    以前ポケガ2のはじめの方でUnityAds直で使ってたんですが、振り込み申し込み方式がめんどくさくて、やめちゃったんですよねぇ~

    Adsは使わないにしても、Unityにはお世話になってるし、今後もお世話になる予定なので、Unityさん今後もよろしくお願いします!(笑)

    とまぁ、特にネタもないので、この辺で。

    あでゅ~ノシ

    Category: その他日記

    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   

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

    こんにちは。
    大坂です。

    もう6月ですよ!
    今月が終わったら今年ももう半年終わりですね。。

    さてはて、今週の話題ですよっと。
    まぁタイトルの通りのことです。

    テキストを含んだこんなボタンを作ったとして、押すとテキストだけが白く残って気になるって話ですね。
    (押したときの色を濃くしなければそんなに気にならないかもしれませんが…)

    ※クリックしたら見れますよっと

    ということでボタン押したら一緒にテキストの色も変わってほしいので拡張です。
    こんな感じのコードになりました。
    using UnityEngine;
    using UnityEngine.UI;

    public class ChildColorChangeButton : Button {

    Text[] childTxt;

    protected override void Awake() {
    // 自オブジェクトの子供のテキストをすべて取得
    childTxt = this.gameObject.GetComponentsInChildren();
    }

    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++) {
    // InspectorのボタンのNormal Colorに指定した色にする
    childTxt[i].color = colors.normalColor;
    }
    break;
    case SelectionState.Pressed:
    for(int i = 0; i < childTxt.Length; i++) {
    // InspectorのボタンのPressed Colorに指定した色にする
    childTxt[i].color = colors.pressedColor;
    }
    break;
    case SelectionState.Disabled:
    break;
    }
    }
    }

    一応複数テキスト入れておいて大丈夫なように最初に子供を全部取得するような形にしています。
    このコードをButtonの代わりにAddConponentしてあげれば使用できます。

    これでちゃんとテキストの色も変わっていますね。

    ※クリックしたr…

    テキストだけ指定の色にしたいとかあってもうちょっと手を加えたものがありますが、あまりのネタのなさに来週に持ち越しです。

    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0