モズク食べる

雑食雑記

メタセコイア4EX購入

3DCGをほんの少しだけかじっています。

ちょうど10年前にMetasequoiaチュートリアルをちょっとやって、

ktg.xii.jp

それ以降、ゲーム作りのための小物を作る程度しか触っていなかったのですが

最近VRChatも楽しくなってきたので、再加熱しまして

キャラクター作成も練習しています。

楽しいですよ。VRChat。

www.vrchat.net

 

実力が全然無いのでちっとも記事にならないかも知れませんが

何かためになりそうなことがあったら記事にしようと思います。

 

本日はその前段というか、ご報告というか。

f:id:mozukuino:20181224220543p:plain

EX、買いました。

Mayaを買うよりは安いし初期投資としてはお手軽な値段ですね。

(ちなみにスタンダートを持っていない場合は19,000円くらいで買えます)

これでFBXが出力できるのでUnityにもどんどんモデルを渡していけます!

 

うはうは

 

TensorFlow-GPU環境を整えたい

検索で来られた方へ:こちら↓が最新のまとめです。

本記事はあまりご参考になりません。

mozukuino.hatenablog.jp

 

◆目的

TensorFlowをお勉強します。

最近また流行っていますね。既存の技術的な課題はAIがぜーーーんぶ解決してくれると

信じてやまないうきうきな世間に反し、お通夜モードで頑張ろうと思います。 

 

取り敢えず、この本を購入しました。

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

 

 会社でちょっと触った感じ、AI習熟のポイントは情報の鮮度だと思いました。

というわけで評判も悪くない最近の書籍・・・ということで選んだのですが

情報が足りないみたいなので記録します。

 

◆試行錯誤ログ

 ※CUDAはインストール済みとして書いています。色々↓ありました。

CUDAのバージョン入れ替えに成功した話 - モズク食べる

CUDA10.0はNGです。9.0を入れましょう。

 

anacondaダウンロードして、仮想環境構築して、(書籍P46)

pipでTensorFlowをインストール…

f:id:mozukuino:20181224214242p:plain

f:id:mozukuino:20181224214544p:plain

書籍手順ではちょっとどちらもうまくいきませんでした。

 

解決手段は以下です。 

 

TensorFlow公式サイト参照。

https://www.tensorflow.org/install/pip#package-location

f:id:mozukuino:20181225011900p:plain


丸で囲ったURLのリンク先に、各環境毎用のpipインストール用URLが載っています。

でも対応Pythonのバージョンが3.5か3.6しかありません。※今の最新はPython3.7です

というわけで…

Anacondaでは3.7で触ってたので、仮想環境をPython3.6で作り直し。

f:id:mozukuino:20181225005800p:plain

で、私はGPU版をインストールしたいので「packageURL」の部分を読み替えて

pip install --ignore-installed --upgsrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.12.0-cp36-cp36m-win_amd64.whl」を実行。

f:id:mozukuino:20181225010157p:plain

確認。

f:id:mozukuino:20181225010222p:plain

 

tensorflow-gpuをインストールできました!

 

今回で思い知りましたが、

今後のバージョン管理を考えたらAnacondaの導入は必須ですね。

 

続く

 

Unityでダイヤル錠を作りたい

◆Unityでダイヤル錠を作りたい

【目的】

脱出ゲームにありがちな3桁か4桁の数字をダイヤル鍵に入力してもらい

スクリプトで正解の数字と比較して答え合わせする っていうのをつくりたい。

一応ググってみたところ、

haruoroom.work

 というやり方があるみたいです。

今回は数字の画像を一枚一枚作りたいというわけではないので、 超簡略な方法で作りました。 らくらくなので需要あるのか分かりませんが ググって出てきたらそれはそれで安心かと思うので一応書いておきます。

3桁くらいなのでこれでも良いと思うところですが 数字を画像にしたり桁が増えるときは配列の使い所なのですかなあと思います。

◆手順

【完成イメージ】

数字のボタンを押すと「0→1→2→3→・・・・9→0」と表示が遷移します。 不正解の数字の組み合わせのままEnterを押すと「不正解」の表示をします。 正解の数字の組み合わせでEnterを押すと「正解」の表示をします。

f:id:mozukuino:20190105021102g:plain

(録画にScreenToGifを使ってみました。便利ですね)

C#スクリプト(初心者なので微妙な可能性あり)】

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

public class EscapeGameManager : MonoBehaviour {

    public GameObject buttonMessageDial; //ボタン:メッセージDial
    public GameObject buttonMessageTextDial; //メッセージテキストDial


    public GameObject buttonDialLText; //左ダイヤルテキスト
    public GameObject buttonDialMText; //真ん中ダイヤルテキスト
    public GameObject buttonDialRText; //右ダイヤルテキスト


    public int NumL = 0;
    public int NumM = 0;
    public int NumR = 0;

    void Start () {
    }
    
    // Update is called once per frame
    void Update () {   
    }
//DialLを押した
    public void PushButtonDialL()
    {
        NumL = NumL+1; //押される毎に1足していく

        if (NumL == 10) //表示前に判定、10になっていたら
        {
            NumL = 0; //0に戻す。
        }
        else { } //1~9のあいだったら何もしない
        buttonDialLText.GetComponent<Text>().text = NumL.ToString();
    }

    //DialMを押した
    public void PushButtonDialM()
    {
        NumM = NumM + 1;

        if (NumM == 10)
        {
            NumM = 0;
        }
        else { }
        buttonDialMText.GetComponent<Text>().text = NumM.ToString();
    }

    //DialRを押した
    public void PushButtonDialR()
    {
        NumR = NumR + 1;

        if (NumR == 10)
        {
            NumR = 0;
        }
        else { }
        buttonDialRText.GetComponent<Text>().text = NumR.ToString();
    }


    //DialEnterを押した
    public void PushButtonDialEnter()
    {

        if (NumL==1 && NumM==2 && NumR==3) //ダイヤルナンバー正誤用(1,2,3)
        {

            DisplayMessageDial("正解!▼");
        }
        else
        {
            DisplayMessageDial("ブッブー!▼");
        }
    }

    //Dialメッセージを表示
    void DisplayMessageDial(string message)
    {
        buttonMessageDial.SetActive(true);
        buttonMessageTextDial.GetComponent<Text>().text = message;
    }

    public void PushButtonMessageDial()
    {
        buttonMessageDial.SetActive(false); //メッセージを消す
    }
    

Unity側は普通にインスペクタの変数に適用して メソッドを割り当てるだけです。

らくらく

UnityでInputFieldのTextとCharを文字列比較したい

◆UnityでInputFieldのTextとCharを文字列比較したい

【目的】

脱出ゲームにありがちな

ユーザに鍵となる文字列を直接入力してもらい

スクリプトで正解の鍵と文字列比較して答え合わせする

っていうのをつくりたい。

 

ダイヤルでアルファベット選択するほうがよく見るのだけど

練習も兼ねているのでInputFieldを使う方でチャレンジしたい。

◆手順

【完成イメージ】

「PASSWORD?」の部分をクリック(タップ)すると文字入力を受け付けます。 「ENTER」の部分をクリック(タップ)すると、答え合わせをします。

f:id:mozukuino:20190105021536g:plain

C#スクリプト(初心者なので微妙な可能性あり)】

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

public class EscapeGameManager : MonoBehaviour {

    public GameObject buttonMessagePC; //メッセージ表示用ボタン
    public GameObject buttonMessageTextPC; //メッセージテキスト
    InputField inputField; //パスワード入力ボックス
    public const string TruePASS = "UNITY";  //正しいパスワード

    void Start () {
        inputField = GameObject.Find("InputField").GetComponent<InputField>();
    }
    
    // Update is called once per frame
    void Update () {   
    }

    public void PushButtonEnter()
    {
     string pass = inputField.text;

     if (pass.ToLower() == TruePASS.ToLower())
        {
         DisplayMessagePC("正解!▼");
        }
        else
        {
            DisplayMessagePC("ブッブー!▼");
        }
    }

//PCメッセージを表示
    void DisplayMessagePC(string message)
    {
        buttonMessagePC.SetActive(true);
        buttonMessageTextPC.GetComponent<Text>().text = message;
    }
    
//Back(PC)を押した
    public void PushButtonBackfromPC()
    {
        buttonMessagePC.SetActive(false);     //メッセージを消す
        inputField.text = "";     //InputFieldの文字を消す
    }

Unity側は普通にインスペクタの変数に適用して メソッドを割り当てるだけです。

【ぼやき】

初心者すぎて 、

 ・InputFieldに入力された文字列を取ってくる方法がわからん

 ・InputFieldから取ってきた文字列がStringじゃないけど型変換がわからん

 ・代入用のString型変数宣言はここに書いていいのか…?

 ・大文字小文字無視はCSでどう書くんだ……

と順序を追って全部調べる羽目になりました。

先人ブロガーの皆様に多謝。

Windows7 に Docker for windowsを導入したい

※古いブログが消せなくなってしまったので転記しちゃいます…。

Windows7 に Docker for windowsを導入したい

【目的】

Windows10に抗って生きていきたかった。(敗北)

Windows7で、Docker、使いたかった。

 

◆手順

※2017年12月時点での情報です。今も有効かどうかは調べてません

※Docker for Windowsの実行にはWindows7以上の64bitOSが必要です。

 

【DOCKER TOOLBOXのダウンロード】


参考記事:http://docs.docker.jp/windows/step_one.html

Docker ToolboxのDLリンクが(当時は?)超見つけづらかった。

下記からDLです。

docs.docker.com

どんどんいきましょう。

ss0007

 
【マシンが対応しているかどうか確認する】

使用しているWindows仮想マシンに対応しているかどうか。

ss0012

とりあえずSpeccyをインストール。※必要に応じて選びましょう

ss0024

f:id:mozukuino:20181203230422p:plain

ss0029
CPUのVirtualizationの部分が「Supported, Enabled」となっていればOK。いえーい。

 
【DOCKER TOOLBOXのインストール】

インストーラのダウンロード後、

ファイルを実行してDocker Toolboxをインストールします。

 

pppurple.hatenablog.com

あとはこの参考記事通りに進めればオッケーなんですが、

気になった部分もあったので掻い摘んで書いていきます。

 

Windows7の場合はDockerを動作させるためにVirtual Boxが必要になるため

ない場合は、Docker Toolboxインストールと同時にインストールします。

ss0002

インストールの最後に「Connect to Docker Hub」の画面になります。

「SKIP FOR NOW」で取り敢えず続行。

ss0006.JPG

 
 
【DOCKER QUICKSTART TERMINAL 実行】

インストールが終わったらデスクトップにアイコンが3つ出来ています。

ss0013

早速「Docker QuickStart Terminal 」を実行しようとしたのですが

ss0030

ショートカットのリンク切れ。

アイコンを右クリックしプロパティからパスを確認。

 

“C:\Program Files\Git\bin\bash.exe” –login -i

“D:\XXX\000_Software\Docker Toolbox\start.sh”

(パスはいい感じに読み換えて下さい

 

Git for Windows必要じゃん。というわけでインストール。

gitforwindows.org

というわけで、Gitインストール&ショートカット修正。

 

“D:\XXX\000_Software\Git\bin\bash.exe –login -i

“D:\XXX\000_Software\Docker Toolbox\start.sh

(パスはいい感じに読み換)

 

一応当時調べた限りだとGitをインストールしてたって何らかの条件下で起きる様です。

ショートカット周りのトラブルが厄介そうな場合はこちらが参考になるかも。

github.com

 

いろいろありましたが、

再度「Docker QuickStart Terminal 」をダブルクリックすれば…

ç¡é¡-24bitã«ã©ã¼-04

無事に実行できました。

 
【エラーが出て実行出来ない場合】

“Looks like something went wrong in step ‘Finalize’ … Please any key to continue…”

が出ちゃった場合、起動出来ません。

 

(手元のstart.shでは)74行目をコメントアウトすれば解決です。

※参考サイトにも記載ありましたが行数が異なったので一応

ss0031

 

◆おわり

先人方の知恵の寄せ集めです。

いつもありがとうございます。

【未解決】RaycastMaskを使いたい

◆Unityで透過画像をボタンにしたい

【目的】

Unity練習のために、2D脱出ゲームを作っていました。

自作したPNG透過画像を、Buttonに使おうとして

透過されている部分にもクリック判定があることに気が付きました。

違う、そうじゃない。

【試したこと】

ここみて

answers.unity.com

ここもみて

ryu955.hatenablog.com

ふんふんってRaycastMaskDLして、

github.com

画像を設定して

f:id:mozukuino:20181203224449p:plain

ボタンに画像を設定して、スクリプト入れて

f:id:mozukuino:20181203224809p:plain

ちゃっちゃっちゃっちゃっちゃーーーー

 

できない!!

透過部分もクリックしたら反応しちゃいます。駄目です。

 

ちなみに1つ目のリンクのAdvancedはそもそも選択がありませんでした。

 

 

やりたいことはまんまこれですが、、、

ほんの数十行のコードで解決できるかも知れないのにセール価格で12$ってよお

assetstore.unity.com

と思うのですが。。。背に腹は…

 

ちなみにバージョン違いで

2017.4.15f1を試しましたが、駄目。

2018.2.18f1も駄目。

SwitchbuildでPCとAndroid試しましたが両方駄目、別の画像でももちろん駄目。

うーーーん。