めもぶろぐ

勉強したこととかめもめも

【横スクロール2Dアクションゲーム】キャラクターのジャンプと走りモーション実装【3】

こんばんわ、ちょっと最近不幸なことがありまして・・・長年飼っていた犬とお別れしてきました。
2匹飼っていたのですが、どっちも今年でお別れしちゃって悲しみが半端ないです。
1匹は寿命で17?ぐらい生きてて、もう1匹は13ぐらいで子宮がんで最後苦しんで逝っちゃったのでそれだけ心残りです。
物心つくときから犬と生活してきたので、犬がいない生活って寂しいなって感じてます。

しばらくしたらこの生活にも慣れるとは思うけれど、これから頑張りたいと思います。長い間ありがとう。


と、まあいきなり悲しみから入ってしまいましたが、書かないと気が済まなかったので申し訳ありませんw

今日はキャラクターの操作、ジャンプと走りモーションを実装してみました。

        //move
        float _x = Input.GetAxis("Horizontal");

        if (_x > 0f)
        {
            _Rigidbody2D.velocity = new Vector2(_Speed * _x, _Rigidbody2D.velocity.y);
            animator.SetFloat("_Speed", _x);
            animator.SetBool("isWait", false);
        }
        else if(_x < 0f)
        {
            _Rigidbody2D.velocity = new Vector2(_Speed * _x, _Rigidbody2D.velocity.y);
            animator.SetFloat("__Speed", -_x);
            animator.SetBool("isWait", false);
        }
        else
        {
            _Rigidbody2D.velocity = new Vector2(0, _Rigidbody2D.velocity.y);
            animator.SetBool("isWait", true);
            animator.SetFloat("_Speed", _x);
        }

一部分だけ置いときます。
右向きのときと左向きとで実装するのに手こずりましたが、走ってるかどうかを管理する変数を2つ用意して無理やり実装しましたw
_Speed変数と__Speed変数とで2つ用意して、→のときは一つ目のifで動かして、←のときはelse ifで動かして、止まるときは最後のelseで処理を行っています。
elseifの-_xの部分は別に必要ないかなーと思ってますが・・・。

今回はサイトとかいろんなところ見ないで自分で作ったのでいろいろと無駄が多そうですが、とりあえず実装できたので良しとしますw

このスクリプトを用意した後Unity側でアニメーションを上手いこと設定すれば以下のようになります(説明めんどくなってしまった)
f:id:gen-193:20171112235403g:plain

void Startの中にanimator = GetComponent();
と書いてUnitychanコンポーネントを取得しています。これを使うことでUnityのアニメーション側で認識?されるようになって後は変位の条件を適切に設定すればモーション変更ができるようになります。

とりあえず実装できたので・・・次はどうしようかなぁ・・・動きは一通りできるようになったので一旦どういうゲームにするか考えなおしてから次何するか決めようと思います。
では

【横スクロール2Dアクションゲーム】2D キャラを入力方向に向ける【2】

こんばんわ!193です。大学3年も後半になり研究とか始まっちゃったり、よく寝ちゃったりして全然作成に取り掛かれないのですが、少しでも進めたいと思います。。

前回はキャラのジャンプとか移動をしたのですが、右向いたまま左に入力すると後ろに向かないので、不自然だから変えます。

こういうオブジェクトを弄ったりできるクラスがUnityにはちゃんと用意されてるみたいですね。今回は画像の移動とか回転ではなく反転するということなので、Transform.localScaleクラスを使っていきたいと思います。

Transform.localScaleクラスは以下の通り

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
void Example() {
// Widen the object by 0.1
transform.localScale += new Vector3(0.1F, 0, 0);
}
}

今回は2DなのでたぶんVector2クラスを使用するんだと思いますが、これが行っているのはオブジェクトをx方向に0.1ずつ広げている・・・という処理を行っているんだと思います。多分。
画像を縮小拡大ということは-にすれば反転するし、+にすれば元に戻ると・・・


ほとんどこのサイトを参考にしています。ありがとうございました。
raharu0425.hatenablog.com

やること

・右向いているかどうかをisRight変数として管理します。
・最初キャラクターは右を向いているので初期値はTrue。
・右に入力されて動けば右向きにするのでTrueにし、左に入力されたら左向きにするのでFalseを格納します。
これをC#で記述すれば問題ないはず・・・!

というわけで以下コードです。(一部のみ)

private bool isRight = true; //右向き


        //左向きで右入力もしくは右向きで左入力の場合
        if((_x > 0 && !isRight) || (_x < 0 && isRight))
        {
            //右を向いているかどうかを、入力方向をみて決める(ここでTrueFalseに変わる。)
            isRight = (_x > 0);
            //右を向いているかどうかで更新する
            transform.localScale = new Vector2((isRight ? 1 : -1), 1);
        }

isRightの初期値設定はクラスの外側で宣言してます。
左向き~からの処理はUpdateクラスで行っています。

Cは今までやってきて、C#勉強したてで条件演算式というのを今まで使ってこなかったんですけど、if文よりもかなり簡潔に書けるみたいですね。
?: 演算子 (C# リファレンス) | Microsoft Docs

isRightがtrueならば1になり、falseなら-1になるんですね。画像が反転するかしないかはここで行っています。
この書き方は便利で分かりやすかったので覚えて使っていこうと思いました。
ちなみに大きい数字にすると大きくなるので、巨大化するようなときにも使用できそうですね。逆もしかり。

てなわけで動かしてみました。

f:id:gen-193:20171105203003g:plain


よし!とりあえず向きに関しては不自然さはなくなったし、次は待機モーションと歩きモーション、ジャンプモーションとかを変更してみようかな・・・。というかこのUnityちゃん2Dに用意されてたかな・・・。あったら実装します。なければ敵キャラ実装します。では

パーセプトロンについて学習したよ

ANDORNANDXORを用いてパーセプトロンについて勉強した。

どうやらディープラーニングに行くまでに、パーセプトロンを学んで、そのあとニューラルネットワークについて勉強しないといけないみたいですね。

パーセプトロンとは
ニューラルネットワークというもののアルゴリズム、元になったものらしいです。ニューラルネットワークについてはまだ勉強してないのですけどね()
とにかく元ということなのでこれを知らないと無理ってことです。ディープラーニングって大変だ・・・。

パーセプロトンっていうのは信号を入力として受け取ってそれを何かに変換(しないのかもしれないけど)して出力するもの。
パーセプトロンの信号は1か0ポッキリ。ということはAND、OR、NAND、XORみたいな電気素子?と相性がいいのかもしれないですね。

ただし、XORはちょっとパーセプトロンで表現するのは難しい。図で表すと非線形なグラフになるので、こういう特性を持つようなものにはパーセプトロンはちょっと相性が悪いっぽい。

だけど、このパーセプトロンを2つ組み合わせたりすると実はこれらも表現できちゃいます。
XORをAND、OR、NANDで表現できるからという説明はとてもわかりやすかった。


要するに、パーセプトロンは層を重ねれば重ねるほど柔軟な動きを発揮すると。折り紙で言えばそのまま使うこともできるけど、どんどん折っていけばより複雑な作品ができるのと同じみたいな感じがしますね。
あ、だからアルゴリズムって表現ができるのか・・・。複雑なものも分解して見てみることが大事なんですね。

と、なんかまとまりがないけれど、次はニューラルネットワークの基礎について勉強していきたいと思います。

文字コードを変換すれば治るエラー :メモ

File "NAND.py", line 5
SyntaxError: Non-UTF-8 code starting with '\x8f' in file NAND.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

こういう時のエラーはどうやら最初のNon-UTF-8をみる限り、メモ帳の文字を全てUTF-8に変換すれば治ったので多分そういうことなのだろう・・・。

とりあえずこういう対処法もメモメモ・・・。

Windows搭載してるMacでのPython環境構築について

ちょっと研究のためにディープラーニングについて勉強することになったので、以下の本を使ってこれから勉強していきます

Pythonとか初めてだったので、導入とか色々手間取ったため今日はそれについて少し・・・。
書籍は以下を使用しています。

まず、Pythonの導入方法について
以下のURLからAnaconda3.6をダウンロードしていきます。私はMacで使用するためMacを選択します。

www.anaconda.com

AnacondaというのはどうやらPythonを使用する環境を作ってくれるハッピーセット的なものらしいです。要するにこれをインストールすればPython3.6が使えるようになります。


ここで、インストーラーを出したら、注意することが1つ。
2つぐらいインストールする先を選べるんですが、選ぶのはユーザー名の方ではなく、その下のMacintoshHD?を選択した方が良さそうです。
この後のターミナル(コマンドプロンプト)で 「Python --Version」と入力した時にPython2.7.10とか表示されて3.6じゃないじゃん!ってなって焦ります(普通に場所を指定してあげたりすればいいと思うがそこは詳しくなかったので焦りました。)

インストールできたら、ターミナルを開いてPython --version と入力して、Python3.6のような、3がついていたら成功だと思います。

早速Pythonファイルを作成・・・
ここで、Pythonファイル拡張子である.pyファイルを作るためにMac標準のテキストエディタを使おうとしたのですが、毎回.rtfとなってしまってクソ面倒だったので、自分はパラレルを使ってWindowsを使用しているので、「notepad++」を使って編集することにしました。

以下のURLからダウンロードしましょう。
notepad-plus-plus.org

Macだと.exeファイルが開かないというのをここにきて調べて初めてわかったので、改めてパラレルでWindows入れておいてよかったなあと思いましたね。
もし、Windows入ってなければ多分他のフリーソフトとか、そもそもこんなことしなくても普通にできそうな気もしますが、そちらを使ってください。

とりあえずこれでPythonを使う環境が整ったので、これからPythonを使ってディープラーニングについて勉強していきたいと思います。
もし同じような境遇の人がいたら参考にしてみてください。

めも:はてなブログにソースコードを張り付ける

これははてな技法モードで編集しないと無理。みたままモードとかだとできないので変更すること。

入れたいところに


>||(半角にする)
~(ソースコード貼り付け)
||<(半角にする)


で綺麗に表示してくれるようになります。めっちゃ便利
C#の場合は>|cs|と入力しておくと変数とかに色がついてくれます。超便利

詳しくはここ参考
ブログにソースコードを見やすく掲載する方法【C#】 - 備忘録

めも:gifアニメーションを作成する方法

ブログで便利だと思っているgif画像どうやって作ったか忘れないようにメモしておきます。

自分が使っているのはLICEcapというデスクトップの画面をgifにしてくれるソフトです。
使い方メモというか、操作は大したことはない。
普通に体感でぽちぽち作れたから多分大丈夫だ・・・。とりあえずこのソフトを使ったよ!っていうのがここに来たらわかるっていうのを覚えておけば平気だろう・・・()

もう1つはEDGEというソフトを使って、適当にドット絵作成してそれを数枚用意したらフリーソフトとかネットでアニメーションにする方法