FC2ブログ
    07 «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.» 09

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

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

     

    【ハルシオンブログ】スクリプトを非アクティブで開始してもAwakeって動くんすね。 

    こんにちは。
    大坂です。

    8月ももう終わりですね。
    9月になってもうちょっと涼しくなってくれるといいんですが。。

    今週も短いネタですが。
    内容もタイトルで完結してますが一応。。

    書くほどのコードでもないですがこんなコードがあったとして。
    public class BlogTest : MonoBehaviour {

    void Awake() {
    Debug.Log("Awake");
    }

    void Start() {
    Debug.Log("Start");
    }

    void Update() {
    Debug.Log("Update");
    }
    }


    スクリプトを適当なオブジェクトにつけて、非アクティブにしてみて実行すると。





    Awakeのログだけ流れますね。
    ちょっと試しにいろいろやってた時にAwakeだけ動いたのでメモがてらに書いてみました。

    最近ずっと適当ネタしか書いてない気がしますがこの辺で。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】MathfのRepeat関数を使ってみたよ!意外と便利よね~ 

    こんにちは!坂内っす。

    色々あってブログ遅れた!そしてネタがないので、さくっと簡単ネタ。

    Mathfの話。

    色々Mathfって関数ありますよね。
    その中で最近使って、「これ楽だわー」って思ったやつを紹介。

    【Mathf.Repeat】
    リピート関数です。

    float Repeat(float a, float length)

    aを0からlengthまで繰り返す。

    using UnityEngine;

    public class RepeatTest : MonoBehaviour {
    [SerializeField]
    Transform cardTran;
    float timer;

    void Update () {
    timer += Time.deltaTime;
    float posiX = Mathf.Repeat(timer, 1.7f);
    cardTran.localPosition = new Vector3(posiX,0,0);
    }
    }


    こんな感じの事を書くと、X座標が1.7まで行き、そのあと0に戻ります。



    1点注意が必要です。
    floatの場合は「lengthまで」ですが、intの場合は「length - 1まで」となります。

    Mathf.Repeat(0,5) ⇒ 0
    Mathf.Repeat(1,5) ⇒ 1
    Mathf.Repeat(2,5) ⇒ 2
    Mathf.Repeat(3,5) ⇒ 3
    Mathf.Repeat(4,5) ⇒ 4
    Mathf.Repeat(5,5) ⇒ 0
    Mathf.Repeat(-1,5) ⇒ 4
    Mathf.Repeat(-2,5) ⇒ 3
    Mathf.Repeat(10,5) ⇒ 0

    こんな感じになるのかな。


    また、Repeatを使うとページャ(一覧画面とかで、何ページ目みたいなやつ)が簡単に作れますね!

    【たとえば.cs】
    using UnityEngine;

    public class RepeatTest : MonoBehaviour {

    int currentPage = 0;
    int maxPage = 10;

    public void OnClickPrev() {
    --currentPage;
    Paging();
    }

    public void OnClickNext() {
    ++currentPage;
    Paging();
    }

    void Paging() {
    currentPage = (int)Mathf.Repeat(currentPage,maxPage);

    // currentPageのページ情報を作成&表示
    ViewCurrentPage();
    }
    }


    書いてませんが、ViewCurrentPage関数で色々と指定ページの情報を画面に出す処理をする。

    前のページボタンを押すと、OnClickPrev()が、
    次のページボタンを押すと、OnClickNext()が呼ばれるようにします。

    これで簡単にページャができそうですね。

    いや、別に「currentPage = maxPage % currentPage」とかでもいいんですけどね~

    ということで、簡単ではありますが、Mathf.Repeatの使い方でした!

    ではあでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】C#の関数を知らないで無駄なことを書くことが多い。 

    こんにちは。
    大坂です。

    今週もブログが書く日が来たので何とか書いていきますよ。

    そしてタイトル通りですが、
    あんまり関数を調べないで知ってるやつで強引に書こうとするので無駄な感じで書くことが多いです。

    一例ですけど、
    メッセージため込んで順番に出したいときとかに何も考えずに
    こんな風にListを使ってやってたりしてるときが多いですが。。
        List<string> messageList = new List();
    messageList.Add("Message_1");
    messageList.Add("Message_2");
    messageList.Add("Message_3");

    while(messageList.Count > 0) {
    Debug.Log(messageList[0]);
    messageList.RemoveAt(0);
    }


    Queueクラス使った方が消す処理とか書かなくていいよねって話。
    まぁこの場合1行しか変わりませんけど。
        Queue messageList = new Queue();
    messageList.Enqueue("Message_1");
    messageList.Enqueue("Message_2");
    messageList.Enqueue("Message_3");

    while(messageList.Count > 0) {
    Debug.Log(messageList.Dequeue());
    }


    ということでやりたいことに対して関数あるか調べる癖をつけたいなぁと思った瞬間でした。
    メモにもなっていないような記事でしたが、これで終わりですよ。

    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Unity2Dでカードを回転させて裏から表にする方法。こんな感じでできますよん♪ 

    皆様御機嫌いかがでしょうか?
    こんにちは。坂内です。

    最近金がマジやばいんで受託して生きています。
    何をしてでも生きていきましょう!転職はする予定はないですが。

    さて、ちょっとしたUnityの小ネタを。

    裏のカードを回転して表にする方法。
    ゲームとかでたまにカード使ったりしますよね。

    こんな感じで。



    3Dなら簡単だと思うんですが、2Dでやるとするとカード(ImageやSpriteRenderer)に裏・表という概念がないため、「裏返しする」といった事はできません。

    では、どうやるのかというと、
    ①カードを90度回転
    ②カードの絵を表の絵(スーツとか絵が描いてる方ね)に変更
    ③カードを90度戻す
    この一連の流れをすると、上の動画みたいにカードが裏返ったように見えます。

    それでは実際のコードとかを書いていきますね。

    ResourceフォルダにCardsというフォルダを作成し、そこにトランプの表の絵を置いておきます。
    (Resourceフォルダはあんまり使わない方がいいらしいですが・・・)




    コードはこちら。

    【CardTest.cs】
    using UnityEngine;
    using UnityEngine.UI;
    using DG.Tweening;

    public class CardTest : MonoBehaviour {

    public Image imgCard;

    string[] suits = {"c","d","h","s"};

    public void OpenCard() {
    string card;
    // スーツ
    card = suits[Random.Range(0,suits.Length)];
    // No
    card += Random.Range(1,14).ToString("00");

    imgCard.transform.DOLocalRotate(new Vector3(0, 90, 0), 0.6f)
    .SetEase(Ease.Linear).OnComplete(() => ChangeCard(card));
    }

    void ChangeCard(string cardNo) {
    imgCard.sprite = Resources.Load<Sprite>("Cards/" + cardNo);
    imgCard.transform.DOLocalRotate(new Vector3(0, 0, 0), 0.6f).SetEase(Ease.Linear);
    }
    }


    こんな感じで簡単にできますので、是非やってみてください!

    ということで、小ネタでしたが、今日のところはこんな感じでおさらばです。あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 2   

    【ハルシオンブログ】何も思いつかないので普段使ってるけど書いてないちょっとした小ネタを… 

    こんにちは。
    大坂です。

    なんか台風が19号とかまで発生してるんですね。
    つい最近13号がーとか言ってた気がしたんですが…。

    さてはて、ネタを何も思いつかなかったのでちょっとした機能ネタを2個。

    ①ドラッグ&ドロップのキャンセル
    UnityEditor上でプレハブとかをドラッグ&ドロップしようとしたけどやっぱりやめたいときは、
    ESCキーでキャンセルできるよって話。
    一回置いて消したり、停止マークのところでドロップしてもいいんですけど、機能としてあるので使ってます。
    見てもわかりにくいですがこんな感じですね。


    ②Visual Studioの上書きモード機能削除
    押したつもりがなくてもInsertキー押して上書きモードになってたりするとイラッとすることがるので機能ごと削除する方法。
    [ツール]-[オブション]を開いて[キーボード]を選択。
    以下の文字列を含むコマンドを表示に「上書きモード」と入力。
    「編集,上書きモード」を選択して削除ボタンを押す。


    これでInsertキーを押しても上書きモードにならなくなりますね。
    僕は上書きモードを使うことがないのでこの機能は削除してます。

    では今週もこんな感じで終わりです。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】ポップアップの出し入れの演出とか、ちょっと手を加えてシュッと出すだけで見栄えが変わりますよね! 

    おはようございます。
    今週はお盆でございますな。でも仕事です。坂内っす。

    みなさん帰省でしょうか?私は実家に住み着いてるので、いつもどおり飲み以外で家でません。はい。

    さて、Unityのお話。

    ゲームを作っていく上で、ポップアップを出す機会って結構ありますよね。

    こんな感じに。



    なんか味気ないですよね。

    そんな時は、DoTweenを使いましょ。




    こんな感じになったりします。

    【Popup.cs】
    using UnityEngine;
    using DG.Tweening;

    public class Popup : MonoBehaviour {

    private void Start() {
    transform.localScale = new Vector3(0f,0f,0f);
    transform.DOScale(1f,0.2f);
    }

    public void OnClose() {
    Sequence seq = DOTween.Sequence();
    seq.Append(transform.DOScale(0f, 0.2f));
    seq.OnComplete(() => DestroyWindow());
    seq.Play();
    }

    void DestroyWindow() {
    Destroy(gameObject);
    }
    }


    他にも、こんな感じにしたり・・・



    【Popup.cs】
    using UnityEngine;
    using DG.Tweening;

    public class Popup : MonoBehaviour {

    const float MOVE_TIME = 0.4f;

    private void Start() {
    GetComponent<CanvasGroup>().alpha = 0;
    transform.localPosition = new Vector3(0f,600f,0);
    transform.localScale = new Vector3(0f,0f,0f);
    Sequence seq = DOTween.Sequence();
    seq.Join(GetComponent<CanvasGroup>().DOFade(1f, MOVE_TIME * 2));
    seq.Join(transform.DOLocalMoveY(0f, MOVE_TIME));
    seq.Join(transform.DOScale(1f, MOVE_TIME));
    seq.Play();
    }

    public void OnClose() {
    Sequence seq = DOTween.Sequence();
    seq.Join(GetComponent<CanvasGroup>().DOFade(0f, MOVE_TIME));
    seq.Join(transform.DOLocalMoveY(-600f, MOVE_TIME));
    seq.Join(transform.DOScale(0f, MOVE_TIME));
    seq.OnComplete(() => DestroyWindow());
    seq.Play();
    }

    void DestroyWindow() {
    Destroy(gameObject);
    }
    }


    ポップアップの出し入れにもちょっとした工夫をすると見栄えが良くなりますよね!

    簡単にできるのでお試しあれ!

    それでは皆さんお盆休み楽しんでください!

    あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】フォントで特定の文字だけ使いたいけど容量がーって時の話。 

    こんにちは。
    大坂です。

    関東は昨日まで涼しかったですが、台風が過ぎ去って今日からまた暑そうですね。。

    さて今日もちょっとした話題。
    フリーフォントを見つけて数字だけに使いたいとかあった時にフォント容量を抑えるお話。

    とりあえずフォントのサイズがこれくらいで。


    そのままビルドしてみるとログにこんな感じの容量って出てますね。


    で、使っている文字が限定されている場合はこうするといいよってお話。
    Fontのファイルを選択してInspectorで「Character」を「Custom Set」にして
    「Custom Chars」に使いたい文字だけ入力してApplyを押す。
    こんなね。


    でビルドした結果がこれです。


    容量が減ってますね!
    ということで使いたい文字が分かっている場合はフォント容量が減らせるよって話でした。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】TimeLine初めて触った!一部簡単だけど、難しいところもありそうね! 

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

    今日は今まで触って来なかったTimeLineについて簡単に紹介。

    まずはAssets>Create>TimeLineを選択し、TimeLineのオブジェクトを生成します。



    できたTimeLineを好きな名前に変えて、Hierarchyに入れます。


    TimeLineの各アニメーション(?)はここのAddからやるっぽいですね。



    それぞれのTrackは以下のような感じらしいです。

    ■ActivationTrack
     オブジェクトの表示・非表示を管理するトラック。
     Activeと書いてる時だけ表示されるようになる。
     
    ■AnimationTrack
     オブジェクトのアニメーションを管理するトラック。
     アニメーションあんまり触らないから、どこまでできるんでしょうか?
     
     とりあえず、ActivationTrackとAnimationTrackを混ぜてみた。
     
     
     
    ■AudioTrack
     サウンドを鳴らすトラック。
     好きにAudioを鳴らすことができるぽいです。
     

     1本にやった場合は複数の音出せないぽいので、音毎にトラックを用意すれば、複数音出せるのかな。

    ■ControlTrack
     プレファブを表示するトラック。
     好きなタイミングでプレファブを表示することができる。
     
    ■PlayableTrack
     コードの制御ができるっぽいです。
     そのうち書くかも!
     
    って感じで(?)、TimeLineは色々できるぽいですが、まだまだ謎だらけ。
    なかなか使う機会がなく細かく調べてないですorz

    また、機会あったら続きを書きたいと思います!
    ではあでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】Dotweenでテキストの数字をカウントアップ・ダウンさせる。 

    こんにちは。
    大坂です。

    今年も早くも8月ですね。
    早く感じるのもなんか微妙ですが暑いのも嫌なので夏が早く過ぎ去ってほしいです。

    いつもながらネタはないので今日も適当な感じです。

    タイトルの通りですがテキストの数字をカウントアップさせるのにDotweenを使ってやってみたってだけの話。

    書き方はこれで。
        public Text text;

    void Start () {
    int nowNumber = 10;
    int updateNumber = 1000;
    // 指定したupdateNumberまでカウントアップ・カウントダウンする
    DOTween.To(() => nowNumber, (n) => nowNumber = n, updateNumber, 1)
    .OnUpdate(() => text.text = nowNumber.ToString("#,0"));
    }



    実行はこんな感じですね。


    ・・・これで終わりでごめんなさい!
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0