にゃんたのUnityゲーム開発覚え書き

Unityのゲーム開発についてあれやこれや書いていきます。

Unityちゃんを自作したAnimetorで動かしてみよう

Unityちゃんを指定のタイミングで動かそう

こんばんわ。siroです。

昨日Unityちゃんを走らせるところまでやったんですが、

もともとあるAnimetorを使って最初に表示するアニメーションを変更しただけだったので、今回はAnimetorを作ってみようと思います。

いけたら、スクリプトから任意のアニメーションを実行するところまでいけたらと思います。

※前回の記事は以下です

a-zero.hatenablog.com

 

まずはUnityちゃんを走らせよう

まずは、Animetorを作りたいフォルダで右クリックして「Animetor Controller」を選択します。

f:id:sirosiro346:20170919231520p:plain

 

AnimetorウィンドウをWindowsタブから開いて、右クリックしてEmptyのコンポーネントを置く。

f:id:sirosiro346:20170919231552p:plain

f:id:sirosiro346:20170919231606p:plain

 

コンポーネントを作ると、最初に実行されるAnimetorとして設定されるので、

名前を変更してアニメーションを指定する。

f:id:sirosiro346:20170919231624p:plain

f:id:sirosiro346:20170919231958p:plain

 

AnimetorをUnityちゃんにドラッグアンドドロップして走ることを確認!

f:id:sirosiro346:20170919232043p:plain

 

UnityちゃんがジャンプするAnimetorを用意しよう。

さきほど作成したAnimetorにさらにCreate Emptyしてコンポーネントを置き、名前をJumpに変更。

その後、RunningからJumpに相互で遷移するために、右クリックしてMake Transitionを選択して相互に矢印をしておく。

f:id:sirosiro346:20170919232302p:plain

 

ここからが本題。スクリプトで実行するための準備をしよう

状態を遷移するための矢印だけはつなぎましたが、条件などなにも指定していない状態なので、条件を設定する必要があります。

 

具体的には、

①Animetor上にBool値によって状態が遷移するように設定

スクリプト上で指定の条件のときにBool値をTrueもしくはFalseにする処理実装

この二つが必要です。

 

①Animetor上にBool値によって状態が遷移するように設定

これは、Parameterタブで設定します。

ここにBool値で変数追加し、状態遷移の矢印を選択して設定していきます。

※ここではRunningからJumpに遷移する条件を、parameterの「jump」がtrueだったとき

 としています。同様に逆パターンもparameterが「running」のときとして用意しておく

f:id:sirosiro346:20170919233530p:plain

 

スクリプト上で指定の条件のときにBool値をTrueもしくはFalseにする処理実装

とっても簡単です。

animator.SetBool ("jump", true)

これだけ。

 

あとは、Updateメソッドはフレームごとに毎回実行されちゃうんで、アニメーションが終わるまでアニメーションを継続する必要があるのでそれも書いてます。

// Animetorの状態を取得
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);

 // Jumpのアニメーションを終了判定し、falseに変更
 if( stateInfo.IsName("Base.Jump") && stateInfo.normalizedTime >= 0.4f ) {
            Debug.Log("BaseレイヤーのJumpを実行完了");
            animator.SetBool("jump", false);
 }

 

こんな感じでいけます。

Baseという名前のJumpが実行中かつ、実行時間が0.4以上の場合のみジャンプ完了

としています。

 

あとは、横移動と縦移動ができるように処理加えて一旦完了

全文はこんな感じ

---------------------------------------------------------------------------------------------------

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

public class UnityChanAnimetorScript : MonoBehaviour {

    private Animator animator;
    private float dx;
    private float dz;
    // Use this for initialization
    void Start () {
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update () {

        // Animetorの状態を取得
        AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);

        // Jumpのアニメーションを終了判定し、falseに変更
        if( stateInfo.IsName("Base.Jump") && stateInfo.normalizedTime >= 0.4f ) {
            Debug.Log("BaseレイヤーのJumpを実行完了");
            animator.SetBool("jump", false);
        }

        // 矢印キーの値に応じてUnityちゃんを移動
        if (Input.GetButton ("Jump")) {
            animator.SetBool ("jump", true);
        } 
        else if (Input.GetAxis ("Vertical") != 0 || Input.GetAxis ("Horizontal") != 0) { 
            dx = Input.GetAxis ("Horizontal");
            dz = Input.GetAxis ("Vertical");
            transform.Translate (dx * 0.2f, 0, dz * 0.2f);
        }

    }
}

---------------------------------------------------------------------------------------------------

 

そして動かしてみたらこんな感じになりましたとさ。

youtu.be

 

本日学んだこと

  1. Animetorに遷移の変数、条件を持たすことができる
  2. Animetorの変数の値はスクリプトから変更可能。これを利用して遷移を行う。

 

あんまり進まなかったですが、とりあえず動かせたので良しとします。

アニメーションの終了判定とかもっと良い方法ありそうだけど・・・

 

 

なんとなく次のアプリが見えてきた

ここまでやってみて、なんとなく次のアプリをどういうものにするか見えてきた。

とりあえず「縦スクロールの障害物回避アプリ」にしようと思います。

 

そんなところでー!

ではではノシ

 

 

 

Unityちゃんの正しいインポート方法

 

Unityちゃんの正しいインポート方法について

悲報。Unityちゃんがピンクレンジャーに・・・

こんばんわ。siroです。

昨日UnityちゃんをAssetStoreでインポートして動かすところまでやりましたが、

Unity最新版(Unity 2017.1)だと再度ファイルを開いたときに、Unityちゃんがピンクに!!!!笑

f:id:sirosiro346:20170918230821p:plain

 

Unityにおけるオブジェクトピンク現象ですが、

 ・テクスチャが外れた
 ・シェーダーが対応していない

など、何らかの理由で「テクスチャの描画が出来ない」と、

このようなピンク色になるようです。

 

原因と対策

特にいじった記憶がないので、Unity公式サイトにて確認したところ、

シェーダー周りでパッチが出ている模様。

めんどくさいのでUnityちゃんも出ている最新のものをダウンロードしてインポートすることに。

ユニティちゃんシェーダー (Unity 5.4/5.5β 対応版) - ダウンロード - UNITY-CHAN! OFFICIAL WEBSITE

 

帰ってきたUnityちゃん

そんなこんなでインポートしたUnityちゃんのプレハブを、Cubeオブジェクトで作ったステージの上に置いて実行してみた。

f:id:sirosiro346:20170918231615p:plain

なにやらポージングしてますね。笑

 

これは、デフォルトで設定してあるアニメーションがポーズを確認するアニメーションになっているためです。

そのため、本来はアニメーションを自分で作る必要がありますが、一旦動きのあるアニメーションに変更、そして再実行。

f:id:sirosiro346:20170918231824p:plain

f:id:sirosiro346:20170918231539p:plain

 

なにやら嬉しそうにUnityちゃんがジャンプしています。笑

 

移動系のゲーム作るし、とりあえず走らせてみるか

一旦走らせてみようと思います。

動きを司る機能にAnimetorがあるので、一旦そのウィンドウを開きます。

f:id:sirosiro346:20170918232024p:plain

 

Animetorを開くと、なにやら四角いものがいっぱい表示されます。

それぞれ実行されると特定の動きをするようコンポーネントを設定しており、

Unityちゃんの場合はNextやBackを押下するとアニメーションが遷移するようになっているようです。

 

ここで注意するところが、色のついたコンポーネントです。

f:id:sirosiro346:20170918232630p:plain

 

緑がスタート、赤色が終了処理なのですが、緑色の「Entry」からオレンジ色のコンポーネントに矢印が出ていることがわかります。

これは、最初に実行するアニメーションはオレンジ色のコンポーネントですよ。といったことを表しており、これを変更することで。ジャンプではなく走るようにすることができます。

 

右クリック後、「Set as Layer Default State」を選択します。

f:id:sirosiro346:20170918232758p:plain

f:id:sirosiro346:20170918232344p:plain

 

走るUnityちゃん!!

実行するとこんな感じに動きました。

youtu.be

 

ただただ走っているだけですが、こんな感じで動きを設定することができます。

今回はUnityちゃんのAssetに含まれているAnimetorコントロールを使いましたが、次回は自分でAnimetorを作って、スクリプトから動かしてみたいと思います!

 

今回覚えたこと

今回は以下のようなことを学びました。

  • Unityちゃんを使うときは、公式サイトからダウンロードした最新のものを利用しよう
  • Unityでオブジェクトがピンクになった場合はシェーダー周りを疑え!
  • Animetorはオブジェクトのアニメーションを設定しておくことが可能。
  • Animetor上で最初に実行されるアニメーションは、右クリック「Set as Layer Default State」で変更可能

 

明日は面談もありますが、Unity開発も頑張りますー!

ではではノシ

Unityちゃんシンプルゲーム開発 - ①

 

Unityちゃんでゲーム作るぞ

さて、前回まででブロック崩しのゲームができたので、いよいよ3Dっぽいゲーム作ってみようと思います。

構想案は今練っている最中なんだけど、素材としては無料のUnityちゃんを使うことにしました。

この子です。

f:id:sirosiro346:20170918000347p:plain

 

AssetStoreとは?

Unityの便利なところの一つに、AssetStoreという素材のマーケットを利用できる点があります。

無料のものもあるため、ここにある素材を利用してゲーム開発ができるので、専任のデザイナーとかがいない場合に少しリッチなゲーム作るときは利用したほうが良い感じ。

3Dのモデルとしては、キャラのモデルや建物などもあります。

※UnityのWindowにあります。

f:id:sirosiro346:20170918001055p:plain

 

 

さっそくUnityちゃんをインストールしてみた

さっそくですが、UnityちゃんをインストールしてサンプルのSceneを動かしてみました。

youtu.be

無料なのによくできてるよなー笑

 

今回はこの子を題材にいろいろやってみようと思っています。

今考えているのは鬼ごっこか、敵を打って倒すゲームですかね。

 

まだ二つ目だから難易度低めにして、ビーチフラッグとかでも良いかもしれない。

少し考えてみます。

 

そんなところでしたーノシ

 

素人がUnityでブロック崩し作ってみた - ⑩【完成】

WebGLビルド成功

さらにネットで検索してみたところ、、、なにやらUnityのCloud環境でビルド実行できることが判明したので、以下を参考にビルドしてみた

blog.naichilab.com

 

結果、なんとかビルドするところまでできました!

unityroomにアップしようとしたけど、次回以降作るアプリでアップしてみようと思います!

 

Unityでブロック崩しを作ってみて得たもの

今回Unityで初めてブロック崩しを作ってみて、以下を学びました。

 

  1. シーンの遷移はSceneManeger.LoadScene("シーン名")で遷移可能
  2. 画面のテキスト、ボタンなどはUIコンポーネントを使う
  3. 当たったときの処理は「OnCollisionEnter()」メソッドに書く
  4. Rigidbodyを追加することで、OnCollisionEnter()の処理を使える
  5. Rigidbody内の「Constraints」にチェックを入れることで、軸ごとの移動や回転を禁止できる (指定方向のみ移動させたい場合などに設定)
  6. ボールをバウンドさせるときは、「Physic Material」を設定し、Bouncinessを1にして、ソースコードで何かにぶつかったときに速度のみ戻す処理を追加する
  7. 音を出す場合はAudio Sourceオブジェクトを使う。Audio Source内のAudioClipに実際の音源をドラック&ドロップして音を設定可能。スクリプトから音を実行するときはAudioSource名.PlayOneShot(audioClip名)で可能。
  8. セーブ値には、Playerprefsを使う。Int、Float、String型でデータを格納することができる。Playerprefs.GetInt("変数名")で値の取得可能。※Intは他にFloat、Stringなどがある

 

こんなところですかね。

Rigidbody関連と、Playerprefs関連は結構勉強になった気がする。

 

最後にもう一度完成系です

youtu.be

 

次はAsset Storeにある素材を使ってゲーム開発してみようと思います。

次も頑張りますー!ノシ

【Unity】解決できないエラーにぶち当たったときの参考情報

 

ゲームはできたんだけど

こんにちは、siroです。

前回まででなーんとなくゲームっぽい感じのものはできたので、

いよいよunityroomにアップしてみようかなーと思いWebGL形式でビルドしてみた。

 

WebGLを選択し、Buildボタンぽち!フォルダ選択で開始!!

f:id:sirosiro346:20170917123412p:plain

 

ん?あれ?エラー?

f:id:sirosiro346:20170917123509p:plain

 

エラーを見てみたんだけどさっぱりわからず、、、笑

「Unity WebGL ビルド エラー」で調べてみた。

 

検索結果

結論から言うと、やっぱりよくわからなかった。笑

ここに同じようなエラー出てる人いるんだけど、、、

プラグインインスペクタがそもそもどこにあるかわからないww

Can't build WebGL because of IL2CPP crash - Unity Answers

 

さて、どうしよう

開発を行う上で、今回みたいな一筋縄でいかないようなエラーと遭遇するケースはよくあります。

基本的には自己解決できた方が良いんですが、エラーによってはその手の開発をしていないとわからないようなことも多いです。

 

そんなときは

質問サイトに質問しちゃおう!笑

今回は以下二つに質問してみました。

 

1. Unityユーザー助け合い所

まずは、やっぱりここ。

FacebookのUnityグループです。

非公式なんだけど、ユーザ数も多くて返信早くていい感じです。

https://www.facebook.com/groups/unityuserj/

 

2. teratails

みんな大好きteratailsです。笑

ここはUnity以外にも開発で困ったらとりあえず質問する場所に適しています。

まだサービスができて3年ぐらいなんだけど、かなり頼りになるサイトです。

python勉強していた時もよくここ使っていました。

teratail.com

 

とりあえず、様子を見よう。

一旦質問したので、とりあえず様子を見ようと思います。笑

次のゲーム案構想もはじめるかなー!

 

ではではー