Unityの Color型 は Vector4型 から暗黙的に変換することができます。知らなかった。。

 function の引数にColor型を指定したい場合にどうやっていいかわからなかったけど、、これを使えばいいのね!


void func(Color color = new Vector4()){ }

https://docs.unity3d.com/jp/540/ScriptReference/Color-operator_Color.html

Color は Vector4 から暗黙的に変換することができます。

そうだっだんですね。。w

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 の 「UI Button」のOnClickイベントをスクリプトで登録する方法

タイトルの通り、UnityのNGUIで、「UI Button」のOnClickイベントをスクリプトで登録する方法について

NGUIの便利なUIButtonですが、
スクリプトでOnClickのイベントを登録した事がなかったですが、
色々しらべたところやり方が分かったのでメモします!

下記がそのソース。

GameManager.cs


// イベントを登録したいボタンのオブジェクト GameObject btnObj; // NGUIのUI Button UIButton btn = btnObj.GetComponent<UIButton>(); // イベントデリゲートを用意 EventDelegate btnEvent = new EventDelegate(); // このクラスのOnClickというメソッド btnEvent.Set(this,"OnClick"); // 同じイベントが複数入ってしまうことを避けるため一旦イベントをクリア btn.onClick.Clear(); // イベントを追加 btn.onClick.Add(btnEvent); // NGUIのオブジェクトに子として追加 NGUITools.AddChild (nguiParentObj, btnObj);

以上です!

また、

btn.onClick.Clear();

は、Unityエディタ上で何回も実行などしていると、
イベントがどんどん増えてしまうので、念のためリセットします。
ここらへんは環境にあわせて適宜調整してください。

ググったんですが、日本語の情報がなかったので、
備忘録のためメモ。

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(c++) で、int(整数)をstring(文字列)に変換

cocos2d-x(c++) で、intをstring(文字列)に変換

環境 cocos2d-x 3.14(c++)

StringUtils::toString()で、int型からstring型に変換できる。

int hogeInt = 123;
string hogeStr = StringUtils::toString(hogeInt);

で、下記でもできるのですが、androidでビルドするとエラーになるので、
下記を使う場合はご注意を。


string hogeStr = std::to_string(123);

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++)ひっかかりそうなポイントメモ

ただ生成した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);

Unity5でアイコンフォントをNGUIで使ってみる。

UILabel、ペースト

Unityでボタン等のアイコン画像をフォントでまかないたいなと思って、

NGUI「UI Label」に入れようとおもったけど、どうやっていれていいかわからなかったのでメモ

1. アイコンフォントで有名らしい「http://fontawesome.io/」を、Unityで入れてみたいと思い入れてみた

※ライセンスにはご注意を!

2. まずダウンロードし、UnityのAssets/Fonts/**.ttfにドラッグ。

※拡張子がttfのものを使おう!

3. でこのあとどうしてよいのかわからくなった、textにいれたらいいんだろう。

サイト内に各アイコンに紐づく、unicodeというもので指定ができる。。

iconfont unicode
iconfont unicode

が、実際にはそれをUI Labelのテキスト内にいれてもアイコン画像は表示されません。

そう、通常unicodeはそのままでは入力できないんです。ただ、実はクリップボードコピーはできちゃいます。

iconfont
iconfont

この画面でコピーw

4. ダウンロードしたフォントデータを開き、使うアイコンテキストをコピーし、UI Label内にペーストする。

UILabel、ペースト
UILabel、ペースト

text内は何の文字も見えない状態ですが、ペーストされていれば、アイコン画像が表示されているはず!

5. これで表示されると思います!

6. 一応上記でも対応できますが、ちゃんとunicodeを入力できるようにする方法がありました。先人の知恵

参考サイトさま:http://nekobata.blog.jp/archives/1032788479.html