FC2ブログ
    01 «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.» 03

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

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

     

    【ハルシオンブログ】Unityでトランジションを導入してみた。というか、トランジションの事書いてるサイトがあったから使わせてもらいました! 

    こんにちは!坂内っす。

    Unityでシーン切り替え時等にトランジションを入れようと色々調べていたところ、いいサイトがあったので、使わせていただきました。

    【Unityでトランジション演出を実装する】
    https://cfm-art.sakura.ne.jp/sys/archives/963

    ただ、こちらのサイトでは、暗転時用と明転時用のShaderとMaterialを用意しておりますが、暗転時用の物だけを用意し暗転・明転を表現してみました。

    変わるところは、Shaderの_Alphaを触るコードのところだけです。
    基本的なやり方は上記サイトをご参考あれ。

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

    public class Transition : MonoBehaviour {

    [SerializeField]
    private Image imgTransition;
    private Material _material;

    void Awake() {
    DontDestroyOnLoad(gameObject);
    _material = imgTransition.GetComponent<Image>().material;
    }

    public void SetAlpha(float i) {
    _material.SetFloat("_Alpha", i);
    }

    /// <summary>
    /// time秒かけてトランジションを行う(暗転)
    /// </summary>
    /// <param name="time"></param>
    /// <returns></returns>
    public IEnumerator FadeOut(float time) {
    float current = 0;
    while(current < time) {
    _material.SetFloat("_Alpha", current / time);
    yield return new WaitForEndOfFrame();
    current += Time.deltaTime;
    }
    _material.SetFloat("_Alpha", 1);
    }

    /// <summary>
    /// time秒かけてトランジションを行う(明転)
    /// </summary>
    /// <param name="time"></param>
    /// <returns></returns>
    public IEnumerator FadeIn(float time) {
    float current = 1;
    while(current > 0) {
    _material.SetFloat("_Alpha", current / time);
    yield return new WaitForEndOfFrame();
    current -= Time.deltaTime;
    }
    _material.SetFloat("_Alpha", 0);
    }
    }


    これで、好きなタイミングでトランジションを行うことができるようになりました。

    トランジションのオブジェクトをDontDestroyOnLoad(gameObject)してあげることで、どこのシーンからでも呼ぶことができます。

    って感じの物を作ってみました。あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】なんかスクリプト開くとMonoDevelopが一緒に開くんですが? 

    こんにちは。
    大坂です。

    うーん。今週もネタがありませんね…orz

    あ―そういえば最近?Unityからスクリプトを直接開いたときに
    VisualStudioの起動が妙に遅いなーと思ったらなぜか一緒にMonoDevelopも一緒に開くようになってました…



    なんでやねん!と思いながらもしばらく無視してましたが…

    Unity起動したら[Asset]-[Open C# Project]をやったら起動がそこそこ早くて、
    MonoDevelopも立ち上がらなかったです。



    PC再起動してスクリプトをダブルクリックで開くとまたどっちも起動するんですけどね。
    なんなんですかねこれは…。

    うーん。他の解決策も特に見つからなかったので、しばらくはUnity起動したら[Open C# Project]かなぁ…?
    誰かいい方法を知ってませんかね??

    ということでネタにもなりませんが今週もこれで終わりですよ。
    またノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】いたって簡単!UnityのuGUIのオブジェクトをドラッグアンドドロップする方法。 

    こんにちは!坂内です!

    日曜に遅くまで飲むのは愚の骨頂ですね!
    頭痛い・・・
    まぁ来週も日曜日また飲みなんですが。

    さて、ちょうど1年前くらいにドラッグアンドドロップの話を書きました。

    【まだ口痛いっす。とりあえずuGUIでドラッグアンドドロップのやり方 その1 】

    これとはまた違う、ちょー簡単なD&Dの方法を紹介。

    まずは、こんな感じで背景(黒のImage)を用意し、動かすオブジェクトとして、ただの白い四角を用意します。


    こんな感じのスクリプトも用意します。
    【DragAndDrop.cs】
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class DragAndDrop : MonoBehaviour {

    public GameObject dragObj;
    bool inDragFlg;
    Vector2 cursolPosition;

    /// <summary>
    /// オブジェクトPointDown
    /// </summary>
    public void StartDrag() {
    inDragFlg = true;
    }

    /// <summary>
    /// オブジェクトPointUp
    /// </summary>
    public void EndDrag() {
    inDragFlg = false;
    }

    void Update () {
    // ドラッグしている間だけオブジェクトを移動
    if(inDragFlg) {
    cursolPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    dragObj.transform.position = cursolPosition;
    }
    }
    }


    このスクリプトはCanvasなんかにつけておきます。



    動かすオブジェクトをアサインしておきます。

    動かすオブジェクト「dragObj」にはEventTriggerをセットし、PointerDown(オブジェクトを押したとき)とPointerUp(オブジェクトを離したとき)のアクションにそれぞれDragAndDrop.csのStartDrag()とEndDrag()を指定してあげます。
    ==========================================
    追記:PinterDownよりも、BeginDrag。PointerUpの代わりにEndDragを使う方がよさそうです!!
    ==========================================




    以上!!


    これだけで、ドラッグアンドドロップ完成です!





    ということで、本日は簡単なドラッグアンドドロップでした!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 2   

    【ハルシオンブログ】ランダムで重複しない数値がほしい時って。 

    こんにちは。
    大坂です。

    本格的にネタがありませんorz
    ということでたまにやってることでも。

    1-10の間でランダム値を重複しないで何個かほしいときなんかがあります。
    いつもやってるのはいったんListに突っ込んでから取り出して、Listから消すような感じですね。
            List numList = new List();
    for(int i = 1; i <= 10; i++) {
    numList.Add(i);
    }

    while(numList.Count > 0) {
    int ran = Random.Range(0, numList.Count);
    int num = numList[ran];

    Debug.Log(num);

    numList.RemoveAt(ran);
    }

    てな感じで取れますよね。
    一応結果。。



    あと色々見てたらこんな記事がありました。

    http://developer.wonderpla.net/entry/blog/engineer/Unity_RandomNumber/

    Random関数はとりあえずUnityEngine.Randomを使っとけばいいらしいです。

    UsingでSystemを追加してるとどっち使うのか聞かれることもあると思うので、そんなときの判断になりますかね?

    これね。

    ではでは、またですノシ

    Category: 開発日記(Unity)

    tb 0 : cm 2   

    【ハルシオンブログ】簡単な時間計算と、こんな感じでログボもらえるかの処理書いてるよって話。 

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

    今日も簡単なネタを1つ。

    時間の差分を簡単に出す方法です。

    new System.DateTime(2018,5,20) - System.DateTime.Today

    これだけ。

    2018年5月20日まであと何日?(今日は2018年2月13日)

    っていうのが取れます。

    結果は 96


    RPGを作ってると結構時間の計算出てくるんですよね。
    魔法の効果があと何分かとか、ログインボーナスとか、色々。

    ちなみにログインボーナスなんかは、こんな感じでやってます。

    ※サーバーでURL叩いたら現在時刻を返す処理を別途用意しています。

        private IEnumerator CheckLoginBonus() {
    WWW www = new WWW(Constant.TIME_FROM_SERVER_URL);
    yield return www;

    // もし、何らかのエラーがあったらコルーチン終わり
    if (!string.IsNullOrEmpty(www.error)) {
    Destroy(gameObject);
    yield break;
    }

    if (www.text == null || www.text.Trim() == "") {
    // サーバの時間が取れなくてもコルーチン終わり
    Destroy(gameObject);
    yield break;
    } else {
    string serverTime = www.text;
    serverDay = System.DateTime.Parse(serverTime);
    // セーブされている最終ログインボーナス取得時間とぶつけるよ
    if (gameData.lastLoginDate < serverDay) {
    // ログボもらえるよ
    ログボもらえる処理
    gameData.lastLoginDate = serverDay;
    } else {
    // ログボ無しの場合はログボ画面すぐ消す
    Destroy(gameObject);
    yield break; // コルーチンを終了
    }
    }
    }


    こんなんでいいのか分からないけど、サーバの時間を見ています。
    ネット繋がっていないとログボもらえないってのも、これでできますね。

    ローカルの時間をみちゃうと、簡単にログボが連続で手に入っちゃうので。


    まぁもっといい方法いくらでもありそうだけど。


    ってことで、簡単ログインボーナスの取り方でした!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】SnapSettingなんてものを使ってみた。 

    こんにちは。
    大坂です。

    ずっとmacOSの更新とかXcodeのバージョンアップをしていなかったので、今週バージョンアップしようと思ったら、
    MacMiniが古すぎて macOS High Sierra が入れられない事実がorz
    とりあえずビルドしてあげることはできますが、そのうち困りそうですね。。

    さて、今週も小ネタ。
    メニューのEditの一番下にあるSnapSettingですね。
    Windowsだとオブジェクトの移動時にCtlrを押しながら動かすとスナップで動かせるようになるやつの設定です。
    Macだとcmdですね。

    デフォルトは1になっているので1ずつ動きますがSnapSettingをいじると設定した数字で動いてくれます。
    設定画面はこんな。


    今作ってるアプリはよく8の倍数で動かしてといわれるので便利になります。
    注意点はCanvasの設定でSnapSettingの設定も変わります。
    ScreenSpace - Orverlay の場合は
    SnapSettingで指定した数値で動きます。
    8を設定したら8ずつ動きますね。




    ScreenSpace - camera でこんな設定をしている場合。
    1を設定しても約85.4ずつ動きます。。




    Yを854にして縦を基準にしているのでっていう感じなのでしょうか…。
    8動くように計算するとSnapSettingを「0.09367」で設定してあげる感じでうまくいきました。
    1/85.4しただけですね。
    これで8ずつ動くようになりました。




    では今週もこれにてノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    【ハルシオンブログ】AudioSourceの音量さわったら音のフェードアウトができたよ。 

    こんにちは。坂内っす。

    Unityで音を鳴らす際に、AudioSourceを使用しています。
    サウンドマネージクラスを使っているので、AudioSourceは全然見てなかったんですよね。

    簡単にAudioResourceさわれるようなので、ちょこっと紹介。

    AudioSource audio;

    ①ループありなし。
    こちらは単純に音楽がループするかどうか

    audio.loop = true;  ループあり
    audio.loop = false;  ループなし

    ②ミュート
    音を消す。
    音は再生されているため、ミュートを外すと途中から音がなります。

    audio.mute = true;

    ③ピッチ(再生速度)
    音の早送りとかができる。
    -3 ~ 3

    audio.pitch = 1.5f;

    ④ステレオパン
    2Dサウンドの左右の位置。
    -1 ~ 1
    -1 : 左
    0 : 真ん中
    1 : 右

    audio.panStereo = 0.1f;

    あ、でもこの辺ってAudioSourceのInspectorで触れますね。

    ●フェードイン・フェードアウトを簡単に実装する方法。

    DoTweenが入っていれば、簡単にフェードができます。

    audio.DOFade(0f, 1f).SetEase(Ease.Linear);

    これで「1秒かけて、音量を0にする」フェードが完成です。

    って感じで、Audio簡単に触れますね。

    それでは あでゅ~ノシ

    P.S フェードアウトを 「audio.DOFade(0f, 1f).SetEase(Ease.Linear);」でやると、なんか音が0になった後にまた音がなりだしたので、以下の方法でやったらちゃんとできました。
    ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
    DOTween.To(
    () => volume.BGM,
    (x) => volume.BGM = x,
    0f,
    2f
    );
    ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    【ハルシオンブログ】AnchorsとPivotの小ネタ 

    こんにちは。
    大坂です。

    今日から2月です…
    そして関東はまた雪かもしれないって話ですね。
    何も影響がないといいんですが…。

    さて今週も小ネタです。
    UnityでAnchorsとPivotを変えるときのお話+α
    ここのことですね。


    その都度毎回手で0とか1とかに変更してましたが、
    ここをクリックして赤枠の部分の出てきたどれかをクリックしてあげるとAnchorsが変わります。


    試しに左上を押すとAnchorsがこんな感じで変わります。


    まぁそれはそれでいいんですが、ここでShift+クリックしてあげるとPivotも一緒に代わってくれます。


    内側に丸が増えてますね。
    右上をクリック。


    Pivotも変わってますね!便利ですね!

    +αのお話。
    Alt+クリックをすると親オブジェクトの右上とか左下とかクリックしたところにオブジェクトをぴったりおいてくれます。


    てなわけで今週もこれくらいで。
    ではまたノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0