Unityなどの「Color(0.1f,1f,1f)」の形式に、変換するツール

UnityC# new Color型変換

Unityなどの「Color(0.1f,1f,1f)」の形式に、変換するツール

個人的に、UnityでHex値を、Color(1f,1f,1f)の型に変換する事が多く、以外にググっても見つけられないので、
webでサクッと変換できるツールを実装しました。

こちら → Hex値->Color(1f,1f,1f)に変換するツール

※ちなみに、RGB型(255,255,255)にも変換できます..

Unity3Dで、3Dのテクスチャ(画像)だけスクロールする

Unity3Dで、3Dオブジェクトのテクスチャ(画像)だけスクロールする

  • ただのPlaneの3Dに貼り付けてある画像をスクロールするだけで前に進んでいるように見せたり。

  • もしくは縦にスクロールさせて滝をつくったり応用できます。

よく使うが忘れてしまうのでメモ

UvScroll.cs

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



public class UvScroll : MonoBehaviour {

    // UVスクロール
    public float scrollSpeedX = 0.5f;
    public float scrollSpeedY = 0.5f;

    void Update()
    {
        var offsetX = Time.time * scrollSpeedX;
        var offsetY = Time.time * scrollSpeedY;
        GetComponent<Renderer> ().material.mainTextureOffset = new Vector2(offsetX, offsetY);
    }
}

確認した環境

  • Unity2017
  • MacOSX El Capitan

UnityのNGUIで「ArgumentException: Input Axis Mouse ScrollWheel is not setup.〜」と出たら

Unity5.x + NGUIを使っている環境で、別でキーボードの操作ロジックを追加していたら下記のエラーに遭遇!


ArgumentException: Input Axis Mouse ScrollWheel is not setup. To change the input settings use: Edit -> Project Settings -> Input UICamera.<GetAxis>m__24 (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:172) UICamera.ProcessEvents () (at Assets/NGUI/Scripts/UI/UICamera.cs:1960) UICamera.Update () (at Assets/NGUI/Scripts/UI/UICamera.cs:1907)

というエラーがNGUIのUICameraででたら、

下記Scrollの項目を空にすると消えます!

参考サイト:(http://www.tasharen.com/forum/index.php?topic=8064.0)[http://www.tasharen.com/forum/index.php?topic=8064.0]


ArgumentException: Input Axis Vertical is not setup. To change the input settings use: Edit -> Project Settings -> Input UICamera.<GetAxis>m__24 (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:172) UICamera.GetDirection (System.String axis) (at Assets/NGUI/Scripts/UI/UICamera.cs:1733) UICamera.ProcessOthers () (at Assets/NGUI/Scripts/UI/UICamera.cs:2352) UICamera.ProcessEvents () (at Assets/NGUI/Scripts/UI/UICamera.cs:1955) UICamera.Update () (at Assets/NGUI/Scripts/UI/UICamera.cs:1907)

の場合も、同様に、
Verticalの項目を空にすると、消えました!

cocos2d-x v3で、アニメーション終了後に指定の関数を実行する

cocos2d-x v3で、移動アニメーションのあとに、指定の関数を実行するサンプルコード

今回はアニメーション終了後に、同じクラス内の関数を呼び出す例です。
argA,argBは、指定の関数に引数を引き継ぐためのものです。

下記はcocos2d-x バージョン3系の書き方です。


// 移動アニメーション auto moveAction = MoveTo::create(1.2f,Vec2(sprite->getPositionX() + toPosX,sprite->getPositionY() + toPosY)); // ラムダ式でコールバックを設定する auto callback = CallFuncN::create([this,argA,argB](Ref *sender){ // 同じクラス内のhogeMethodをアニメーション終了後に呼ぶ this->hogeMethod(argA,argB); }); auto seq = Sequence::create(moveAction,callback, nullptr); sprite->runAction(seq); // 〜 省略 〜 void hogeMethod(int argA,int argB){ // アニメーション完了後の処理 }

味噌は、thisで、自分を渡し、同じクラスのと、argA,argBで好きな引数を持たせられる事。

cocos2d-x(c++) 色(Color3B等)を定数の配列でカラースキーム化

cocos2d-xで、色のパターン等用意する時、
配列で定数化しておくと便利なのでメモ

宣言


// Color3Bの型で3色用意 static const std::vector<Color3B> COLOR_LIST = { Color3B(255,0,0), //赤 Color3B(0,255,0), //緑 Color3B(0,0,255) // 青 };

呼び出し


COLOR_LIST.at(0); // 赤 COLOR_LIST.at(1); // 緑 COLOR_LIST.at(2); // 青

もちろん、Color4Bでも同じ要領

ちなみに赤を出したいだけなら、、、


Color3B::RED

とするだけなので、この記事はそういう趣旨じゃない。。。

cocos2d-x(c++)ひっかかりそうなポイントメモ

ただ生成したNodeのgetContentSize()は0。


node->getContentSize().width // 0

座標は、左下が基準

OpenGLだからか、左下が基準。

oya->addChild(ko)をすると色々挙動が難しい

子は親のアンカーポイントを無視する。

getBoundingBoxの座標が連動していなかったり。

androidでビルドする時、std::to_string()を使うビルドできない。

下記で代用


int newInt = StringUtils::toString(hogeInt);

Vec2でキャストせずにintとしてつかっているといつの間にかずれるのでちゃんとキャストしよう


Vec2 vec2Hoge = hogeMethod(touchLocation); log("vec2HogeFloat x:%f y:%f",vec2Hoge.x,vec2Hoge.y); log("vec2HogeInt x:%i y:%i",vec2Hoge.x,vec2Hoge.y);

Unity 指定敵タグ等の合計値を出す

Unityで敵全部のHPをまとめたりする。

Unityで出現中の敵全員のHPを合計で出したりして、進捗を出す事はよくあるケースだと思う。

そんな時のC#スクリプト


int enemyAllHp = 0; GameObject[] targetEnemyObjs; // foreachで検索する、Enemyタグのオブジェクト。 targetEnemyObjs = GameObject.FindGameObjectsWithTag("Enemy"); foreach(GameObject targetEnemyObj in targetEnemyObjs){ // 敵HPの総数。 enemyAllHp += targetEnemyObj.GetComponent<EnemyController>().enemyHp; }

地道にループ

Unity5で対象物を一定速度でドラッグ&ドロップ

Unity5で、タップした位置に対象物を移動。

タップした位置に、パズルのピースのようにものを移動する場合。

using UnityEngine;
using System.Collections;

public class dragSample : MonoBehaviour {
    float touchX;
    float touchY;

    void Update(){
        touchX = Input.mousePosition.x;
        touchY = Input.mousePosition.y;

        if(Input.GetMouseButton(0)){
            OnDrag();
        }
    }

    void OnDrag(){

        gameObject.transform.position = Vector3.MoveTowards (gameObject.transform.position,Camera.main.ScreenToWorldPoint(new Vector3(touchX,touchY,10.0f)), 0.1f);
    }
}

解説

  • Camera.main.ScreenToWorldでタップ位置の座標に変換
  • MoveTowordsで、対象物と、持って行きたい位置、それとそこまで移動する速度

マウスのドラッグ&ドロップするように移動する場合は、

MoveTowordsを除けばOK、下記のように。

transform.position = Camera.main.ScreenToWorldPoint(new Vector3(touchX,touchY,10.0f));

Unity C#で webのjsonを取得するサンプルメモ

Unity C#で webのjsonを取得するサンプル

JsonReadWeb.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using MiniJSON; // 事前にMiniJSONをいれておく

public class JsonReadWeb : MonoBehaviour {
    public GameObject prefab;

    void Start () {

        // コルーチン実行開始
        StartCoroutine("GetJSON");
    }

    IEnumerator GetJSON(){

        // webサーバにアクセス
        WWW www = new WWW("http://example.com/");

        // webサーバから何らかの返答があるまで停止
        yield return www;

        // エラーがあったら
        if(!string.IsNullOrEmpty(www.error)){
            Debug.LogError(string.Format("Fail Whale!\n{0}", www.error)); // エラー内容を表示
            yield break; // コルーチンを終了
        }

        // webサーバからの内容を文字列変数に格納
        string jsonText = www.text;

        // 文字列を json に合わせて構成されたキーバリューを作る
        var json = Json.Deserialize (jsonText) as Dictionary<string, object>;

        // 内容確認
        foreach (var data in json) {
            Debug.Log ("key名:" + data.Key + " value値" + data.Value);
        }

    }


}