HackerQuest

No app, no life

趣味と実益を兼ねてプログラマをやっている者👨‍💻

#←この記号正しく読めますか?

はじめに

#←この記号正しく読めますか?

ちなみに自分は今日まで読めませんでした。

実はこの記号シャープとは読みません

これは井桁(いげた)と読みます。

他の読み方

他には以下のような呼び方があります。

  • Pound
  • Hash Key

ハッシュに関してはTiwtter, Instagramハッシュタグと呼ばれているのでわかりやすいです。

個人的にはパウンドと呼び方が好みです。

シャープとパウンドの見分け方

♯ ← シャープ

  • 縦棒が垂直で横棒が水平よりやや傾いている

#←井桁(いげた)

  • 横棒が水平で縦棒がやや傾いている

シャープは音楽記号

  • 楽譜では水平にしてしまうと読みにくくなるため斜めにしてある

ãæ¥½è­ ã·ã£ã¼ããã®ç"åæ¤ç´¢çµæ

じゃあC#は?

C#ã®ã­ã´ãã¼ã¯ããã­ã¹ãä¸ã§ã¯#ã¨ä"£æ¿è¡¨è¨ãããããæ­£å¼ã"ã¯â¯ã¨æãã

文字ではパウンドですが、ロゴではしっかりとシャープになっていますね。

Unity 全シーン管理マネージャーの作成

 Unityを実行するとき任意のシーンが呼び出され,そのシーンの中にあるマネージャーがただ一つ存在し続けるようにするための方法

Unity 2018.2.12.f.1 使用

参考 全てのシーンに存在し、かつ、一つしか存在してはいけないマネージャー的存在の実装方法【Unity】 - (:3[kanのメモ帳]

完成イメージは以下のgifを参照 nk1w7-wsfm5.gif

手順1 呼び出されるだけのシーンを作成する

カメラオブジェクトも削除しておく スクリーンショット 2018-11-16 0.03.37.png

手順2 Sceneを追加する

スクリーンショット 2018-11-16 1.54.36.png

手順3 スクリプトを作成する

以下のスクリプトを作成する.それだけでよく何かのオブジェクトにアタッチする必要はない. RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)でシーンのロード前に呼び出される.

using UnityEngine;
using UnityEngine.SceneManagement;

public class ManagerSceneAutoLoader : MonoBehaviour {

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    private static void LoadManagerScene(){
        string managerSceneName = "ManagerScene";

        //ManagerSceneが有効でないときに追加ロード
        if(!SceneManager.GetSceneByName(managerSceneName).IsValid()){

           SceneManager.LoadScene(managerSceneName, LoadSceneMode.Additive);

        }
    }
}

手順4 全シーンに適応したいマネージャーを用意

今回はスマホゲームによくある時間によって回復する行動ポイントを管理するマネージャを全シーンに配置する. image.png

手順5 全シーン管理マネージャーをシーン遷移しても消えないようにする

DontDestroyOnLoadメソッドを使って消えないようにする.

using UnityEngine;

public class DDManager : MonoBehaviour {

    public GameObject gameObject;

    void Start () {
        DontDestroyOnLoad(gameObject);
    }
    
}

スクリーンショット 2018-11-16 2.09.23.png

これで実行すれば,実行されたところからManagerSceneが起動し,DDManagerによりActionPointManagerが残り,重複することなく全シーンに配置される.

Unity uGUIをドラッグで動かしてステージを選ぶ

完成イメージです. h5fyv-6t500.gif

動かすためには, IDragHandlerのインターフェースを継承する必要がある. OnDrag関数はドラッグが発生しているとき,カーソルが移動するたびに呼び出される.

以下のようなスクリプトを作成する.

using UnityEngine;
using UnityEngine.EventSystems;

public class SlideController : MonoBehaviour, IDragHandler {

    public RectTransform m_rectTransform = null;

    public void OnDrag(PointerEventData eventData)
    {
        m_rectTransform.position += new Vector3(eventData.delta.x*0.01f, 0f, 0f);
    }
}

OnDrag関数のPointerEventData からドラッグのデータを受け取り,動かしたいオブジェクトのRectTransformをいじると動きます.

このスクリプトを動かしたいオブジェクトに着けてRectTransformに自身を入れてあげれば動かすことが可能です.

スクリーンショット 2018-11-08 13.44.51.png

Ryo Tsuzukihashi