週刊SleepNel新聞

SleepNel所属のぽうひろが日々の個人開発で気になったことを綴ります。

Unityブレークポイントを使ったデバッグ方法 [VisualStudio Community2019編]

こんにちは、ぽうひろです。

最近、大学や専門学校でUnity講師をやらせていただいているのですが、

意外とブレークポイントを使ったデバッグ方法がわからない」といった声を聞きますので、ここに記しておきたいと思います。

f:id:pouhiroshi:20210601181005p:plain

こんなSceneがあったとします。 画像にはTest.cs がアタッチされています。

using UnityEngine;

public class Test : MonoBehaviour
{
    float x = 10f;
    Transform transform;

    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("Start");
        transform = GetComponent<Transform>();
    }

    // Update is called once per frame
    void Update()
    {
        transform.position += new Vector3(0.1f, 0f,0f);
        x += 1f;

        Debug.Log("Update");
    }
}

このプログラムにブレークポイントをいれてデバッグしていこうと思います。

f:id:pouhiroshi:20210601181002p:plain

UnityからTest.csをダブルクリックすると、VisualStudioが開くと思います。

ブレークポイントを使ったデバッグを行うには、上部にある「Unityにアタッチ」ボタンを押します。

f:id:pouhiroshi:20210601181020p:plain

その後、処理を止めたいコードの行番号の左あたりをクリックします。 すると赤い丸がつき、その行が赤くハイライトします。 この部分のプログラムが実行されると、ここで処理を一時停止することができます。 これがブレークポイントです。1つだけではなく複数個所に設定できます。 これで準備はOKです。

ではこの状態でUnity側で再生ボタンをおして実行しましょう。

f:id:pouhiroshi:20210601181000g:plain

Update()が実行され、ブレークポイント黄色くなりました。ここで処理が一時停止しています!

f:id:pouhiroshi:20210601181017g:plain

一時停止したのち、右上のステップオーバーボタンを押すと、1行処理をすすめることができます。 黄色い部分が現在実行中のプログラム行です。

プログラムの下にはその時点の変数の中身も見ることができる「ローカル」というタブも見えますね。 x変数が増えているのが確認できると思います。

一時停止を終了し、後続の処理を続ける場合は「続行ボタン」を押します。 今回の例ではUpdate()内にブレークポイントをいれているので、すぐ次のUpdate()呼び出しがあり、また同じブレークポイントで一時停止することになります。

f:id:pouhiroshi:20210601182606g:plain

ですので、「続行」をどんどん押していくと、xが1ずつ増えていっているのが確認できますね!

ブレークポイントは、ちゃんと自分が意図したとおりにこのプログラムが呼び出されているか?の確認にも使えます。 例えば、OnCollisionEnterなどのUnityできめられたメソッドを実装した際、スペルミスなどがあるとコンパイルエラーは出ないけど、呼ばれないので思った通りに動かないというケースがありますが、それを調べるのにも使えますね。 呼ばれていないのであれば、ブレークポイントをいれて実行しても一時停止しません。これで何かスペルミスがあるんだなと気づくことができます。

いかがでしたでょうか。 Debug.Logによる確認は限界がありますので、ブレークポイントをつかって変数の内容を確認しながらデバッグを行うと、プログラム制作も格段に効率が上がります。 ぜひ、ブレークポイントデバッグを身に着けて効率よくデバッグを行えるようになりましょう!!

2021年1月振り返り

みなさん、こんにちは。ぽうひろです。

久しぶりにブログを書いていきます。

エージェントからの案件を受けなくなってから早5ヶ月が経ちましたが、なんとか生き延びています。

せめて一ヶ月の振り返りエントリーくらいは書いていこうと思います。

 

さて、今月なのですがいつもの専門学校講師の週3日をベースに、ロボット教室、プログラミング教室をいつもどおり行いました。

プラスで、Unity教材作成のお仕事(3本)納品しました。

あとはアプリ作成のお仕事のプロトタイプを提出しました。

IT顧問の仕事も調査してメールしたのですが反応がありません。こちらはまだお金がいただけてないので、ちゃんと入金されるまではわかりませんね。

ということで、今月は目標収益を達成することができました。(入金が思ったより早く、2月分までは確保できるくらいまでいただけました🙌)

懸念点は、個人開発の時間が取れなかったことと、IT顧問の仕事がまだ不確かというところです。

 

さて、2月の動き方ですが

講師業ベースは変わらず、アプリ案件の完遂を大目標に据えていきます。

また、1月よりは個人時間が取れそうなので、DiveOceanGoGoの開発を進めたいと思います。

 

本当は週イチくらいで振り返ったほうがいい気がしますけどね笑

なるべくブログも書いていきたいなと思う2021年でございます。

それではまた!

 

あれから3年・・・ リベンジ the リモートワーク!!

こんにちは、ぽうひろです。
お久しぶりのエントリになります。
みなさん、コロナ渦の中、元気でお過ごしでしょうか。。。。

さて、3年前のこちらのエントリを覚えていますでしょうか。

sleepnel.hatenablog.com


そう、3年前、私はリモートワークの仕事をあてにし常駐案件を飛び出し、見事撃沈。
物凄いトラウマと共に常駐案件に尻尾を振って逃げ帰ったのでした。。。。

あれから3年・・・・機は熟した・・・!

ぽうひろ、エージェントさんからの受託案件を卒業します!!

今回は以前とは状況がまるで違います。

大事な大事な収益の必要と見積もった金額の80%を確保した状態です。

内訳は
専門学校の非常勤講師 で 40%
自分運営のロボット教室・プログラミング教室 で 30%
オンラインプログラミングスクールのメンター講師 で 10%

この状態でさらに使える時間が 週3日程度!
この時間をゲーム開発や知り合い、地域からの事業をやることで売り上げの不足分を賄っていこうという魂胆です。

あと、持続化給付金も大きいのですが不足分をカバーできる貯金も半年分くらいはあると思います。

この万全の態勢をもちまして、エージェント案件を卒業したいと思います。

7月中は案件がありますので、新しい働き方は8月からですね。
自分の事業をあれこれ進めていきたいと思います。。。!!

いまやろうと思ってることとしては。。。。

  • デザイナーたまむしさん(@tamamushi_tmm)と開発を進めている「DiveOceanGOGO!」をデジゲー博展示を目指す
  • アーバンナックルシリーズの復活(今ストアから落ちているので・・・)
  • コインゲームの開発(スマホでできるのを目指しています)
  • 地元のビジネス交流会での活動(商店街を盛り上げるための事業も立ち上がりつつあります)
  • もしかしたらUnity教材を作るかも?
  • 知り合いから受けたりする案件とか
  • yokohama.unityなどのコミュニティ活動!
  • UnrealEngineもうちょっと触って慣れていきたい

多い!多いよ!
もう並べただけでも結構あるのですが、自分がやりたいと思ってることなのできっと頑張れると思います^^

できればブログやラジオも定期的にアウトプットしていきたいですね。
そして自分事業を盛り上げていきたいです!
みなさん、応援してください!!><

今でこそこんな夢溢れる状態になっていますが、3ヶ月前とか結構どん底でした。

フォロワーのみなさんはご存知かもしれませんが、受託クライアントから
「リモートワークのメンバーではチームワーク感が出ないので、ぽうひろさんは終了してほしい」
3年くらい携わったプロジェクトからこのように言われてしまい、愕然としましたね。
ちょうどそのタイミングでコロナ騒ぎになり、プロジェクトメンバーは全員リモートになりましたが、特に終了は変わりませんでした。
おそらく、資金がショートしたのかパフォーマンスに不満があったのでしょうが、それならそれで正直に言っていただいた方がまだマシでしたね。
ここから、もう会社からの受託案件というのが心底嫌いになりました。
できればもうこの先請けたくない。あ、知り合いの会社とかはいいかなと思ってます^^

※あまりにムシャクシャしたのでゲームを作りました(unity1week)
「デストロイ・ザ・密 〜偽りのチーム感〜」
偽りのチーム感を出したいだけの会社に向けてのアンチテーゼです(大袈裟)
デストロイ・ザ・密 〜偽りのチーム感〜 | フリーゲーム投稿サイト unityroom
f:id:pouhiroshi:20200716202516p:plain


この状況が好転したのは、yokohama.unityの運営のお二人との出会いです。
f:id:pouhiroshi:20200716202614p:plain

紹介でやってみたかった非常勤講師のお仕事も受けることができましたし、繋がりでUnityのお仕事もちらほら出てきています。
UnityステーションというUnityJapan公式の配信にも出演することができました。
www.youtube.com

UnityJapan公式の配信に出演できるとか、夢にも思っていませんでした。
人生何が起きるかわかりませんが、なんかちょっとわかってきたことがあります。

  • 楽しく活動してる人には楽しい人や事が集まってくる
  • 気軽(軽率)に始められることをやる
  • 無理なく続けられることをやる

1つ目は、カモラジとかコミュニティ活動とかそうなんですが、楽しそうに作ったり公表してると、いろんな人が声かけてくれるんですよね。
一緒にやりたいとかこういうこともあるよ、とか。教えてくれるんです。
いやいややってる仕事とか、受託している仕事とか、あんまり公表できないじゃないですか。
なので、自分の意思で興味あることを目一杯やって楽しそうにするのが大事なんじゃないかなと思ったりしています。

2つ目と3つ目はコミュニティ活動とか、教室とか講師の仕事で感じたんですが、
やり始めないとわからないことっていっぱいあるので、まずあまり考えこみすぎないでやり始めることが大事だなと。
無理だったら頑張りすぎないでやめちゃうのもOKだと思います。
あと、続けないとやっぱり形になりませんから、心と体とお金に無理がないように続けられること。

この3箇条と、以前のリモートワーク失敗の教訓を得て、自分の事業を頑張っていきたいと思います!

また、3年後、無事に生きていられていますように!!

失敗を胸に・・・・
f:id:pouhiroshi:20200716202738p:plain

Arbor3について雑に解説してみる

みなさん、こんにちは。ぽうひろです。

この記事は アセット真夏のアドカレ2019 8/5 の記事になります。

先日のUnity1week で作成した「にゃん友ワンだふる」でも使用しました
VisualScriptingアセット「Arbor3」について使用感などふくめて雑に解説していこうと思います。

assetstore.unity.com


unityroom.com

にゃん友ワンだふる
にゃん友ワンだふる

VisualScriptingということで、C#のプログラムを書かずにイマドキの命令ブロックをつなげていくような形で
プログラムを作成していくことができます。

にゃん友ワンだふるでは、障害物となる車の生成、移動処理に使用しました。

f:id:pouhiroshi:20190802190853g:plain
緑の四角アイコンが表示されているのがArborがついているGameObject

やりたかったこととしては、「ランダム間隔で車オブジェクトを作成(Instantiate)し、進行方向を向かせて、そのあとは移動させる」
というものです。

まず最初にArbor3で制御したいGameObjectにArbor FSMコンポーネントをつけます。

f:id:pouhiroshi:20190802191436p:plain
ここではVehicleSpawnという空のGameObjectにArbor FSMコンポーネントをつけています

はい、準備はこれだけ。
Open Editorというボタンが付いていますので、これを押すとArborのビジュアルプログラミングEditorが開きます。

車を作成(スポーン)して進行方向へ向かせる。それをランダム間隔で繰り返す。

f:id:pouhiroshi:20190802191912p:plain

これが「ランダム間隔で車オブジェクトを作成(Instantiate)し、進行方向を向かせる」までのプログラムです。

Initという右上のブロックが初期状態です。
TimeTransitionというブロックをつかっていますが、これはある時間seconds(秒)が経過したらNext Stateでにつながっている状態に遷移してくれます。
secondsに左上のRandom.Range FloatからOutputでつながっていますが、Random.Range Floatは最小(Min)から最大(Max)までのFloat値を返してくれます。
ランダム間隔でというのはこれを使って実現しています。

次の状態は Instantiate(コピーを作成する)ですね。
Instantiate Game Objectは文字通りGameObjectを作成してくれます。
Prefabには作成したいPrefabを指定します。この場合は車を作成したのでバスのPrefabを指定しています。

Instantiateしたあとは、車を進行方向へ向かせます。
ここでつかうのはTransform Set Rotationで回転させるブロックです。
回転対象物のTransformを繋げる必要があるのですが、 Instantiate Game ObjectブロックでOutputされるのは GameObject型です。
そのため、Transform.Get ブロックを通してTransformを得て、つなげています。

そのあとにつけているのは Go To Transitionというブロックで、Next Stateにつなげた状態に状態遷移させます。
ここではずっと繰り返し処理させたいのでInitへ戻しています。

一定速度で移動させる

さて、これだけだと車は移動してくれません。
次は車を勝手に動かすようなArborプログラミングをつけてみます。
f:id:pouhiroshi:20190802194535p:plain
さきほどInstantiateする対象にした車のPrefabにArbor FSMをつけます。

f:id:pouhiroshi:20190802194318p:plain
たったこれだけ

はい、たったこれだけです。
Transform Translateは、Velocityに指定した移動量で移動しつづけてくれます。
動かす対象はTransformで指定します。

UnityEditorで動作しながら状態遷移が確認できる

f:id:pouhiroshi:20190802195525g:plain

UnityEditorで動作しながらArborの状態遷移が確認できます。
黄色くなっているところがいまの状態です。Instantiateは一瞬で終わるので、パッと見黄色く見えませんね^^;
その代わり、ブロックの右上にその状態になった回数が出ていますので、その数字が増えているので
ちゃんと状態遷移しているのがわかると思います。
ブロックにブレイクポイントをいれて処理を止めることもできますし、とてもデバッグがしやすいです。

まとめ

ランダム時間間隔で何か処理をさせる、みたいな処理をプログラムで書く場合、
タイマー変数を用意して、Time.deltaTimeで増やして〜、みたいな意外な面倒な手順を踏むことになりますが、
Arborをつかえば簡単に作ることができます。
それに加えて、状態遷移になっていて後から見返したときに何をしているのか、わかりやすいです。
自分でつくったロジックをいつもすっかり忘れてしまうというアナタにとてもおすすめなアセットです!w
作者さんが頻繁にアップデートしているようなので、今後もとても安心です。
ぜひ、使ってみてください!

UnityStandardAssetを使って5秒でTPSを導入する

みなさん、こんにちは。ぽうひろです。

f:id:pouhiroshi:20190225154755p:plain

先日の記事 3秒でFPSを導入する
sleepnel.hatenablog.com
の記事がそこそこ好評でしたので。。。。

今度はTPSをサクッと導入する方法を紹介したいと思います!

1手順挟むので5秒にしてますが、それでも簡単です。ぜひやってみてくださいね!

TPSはThird Person Shootingの略ですね。
3人称視点ということで、カメラがキャラクターの背後などにあり追随していく形式が多いです。

無料で手軽なアセットを探したのですが、結構ガチ有料のものが多かったので、
今回はUnityStandardAssetにあるTPSを使ってみたいと思います。

UnityStandardAssetは以前はUnityのメニューからインポートできたと思うのですが、
最近ではAssetStoreからダウンロードする形になっているようです。

無料なので気軽にDLしましょう^^
assetstore.unity.com

インポートすると、色々なAssetが入っていますが、TPSに関係するのはその中のCamerasとCharactersにあります。

まずはTPS操作できるキャラクターを配置します。
Standard Assets/Characters/ThirdPersonCharacter/Prefabs/ThirdPersonController のprefabをステージ上にドラッグ&ドロップしましょう。
f:id:pouhiroshi:20190225155655p:plain

つぎにカメラです。
Standard Assets/Cameras/Prefabs/FreeLookCameraRig のprefabをステージ上にドラッグ&ドロップしましょう。
f:id:pouhiroshi:20190225182329p:plain

はい、これでOK!と言えれば3秒だったのですが、もう1つ残っています。
配置したFreeLookCameraRigのFree Look CamコンポーネントのTargetに、ステージ上においたThirdPersonControllerを指定します。
f:id:pouhiroshi:20190225182922p:plain

はい、これで準備完了!
動かしてみましょう!!

あっという間にTPSコントローラの完成です!!

例によってコントローラやカメラには、パラメータがあり数値をいじればカメラ追随の速度やターンスピードなど変えることができます。

f:id:pouhiroshi:20190225183130p:plain
コントローラの設定

f:id:pouhiroshi:20190225183214p:plain
カメラの設定

あ、歩かせる範囲で地面のコロイダ(PlaneなどでOK)をつけるのを忘れないでくださいね!キャラクターが落ちてしまいますのでw

お手軽なので、ぜひチャレンジしてみてください!!

それではよいゲーム開発ライフを!! :)

3秒でFPSを導入できる無料アセットFirst Person All-in-Oneの紹介

みなさん、こんにちは。ぽうひろです。

久しぶりのUnity記事です。
f:id:pouhiroshi:20190217114452p:plain

最近忙しかったのですが、少しゲーム開発を考える余裕ができてきました。

今日はステージを検討していて、ステージになるアセットを吟味していました。

f:id:pouhiroshi:20190217111036p:plain
素晴らしい街並み

とても素敵なアセットです。

こちらをゲーム内に入って細部を確認してみたくなりました。
普通にやると、キャラクターオブジェクト作って、CharacterControllerつくって、カメラ用意して、地面のコロイダーつけて、、、
とやることが結構多くて面倒です。
一応、StandardAssetにもFPSコントローラはありますので、まぁこちらでも3秒でできちゃいますが。。。w
Unity5でStandardAssetを使ってFPS視点で動かそう。 – はじめてプログラム

今回ご紹介するアセットは、

  • レティクル自動生成
  • 足音システム
  • 歩くときの頭の上下運動システム
  • スタミナシステム

などがはいったFPSコントローラーアセットです。(無料!)
assetstore.unity.com

使い方は簡単、ImportしたアセットからFirstPerson-AIO PrefabをSceneに配置するだけです。
f:id:pouhiroshi:20190217112237p:plain
はい、3秒!!

それでは動かしてみましょう!!

十分探索できますね!!
階段の上などもコロイダーをつけてあげればたぶん上がれるようになるんじゃないかな。

f:id:pouhiroshi:20190217113925p:plain
設定項目1

f:id:pouhiroshi:20190217113947p:plain
設定項目2

設定項目を上に貼りましたが、いろいろあります。

歩くスピードやHead bobbingの揺れかたなどはfeature通りにありますし、
足音も地面によって別の音に変えたりするような設定もあります。
無料でなんとも素敵な機能です。。。。

さっとゲーム内環境を確認したいとき、導入されてはいかがでしょうか!

それではよいゲーム開発ライフを!!(*´∀`)

2018年のぽうひろを雑に振り返る

みなさん、こんにちは。ぽうひろです。
年の瀬ですね。

すっかりご無沙汰になりましたが(書くたびに言ってる気がする)
2018年のぽうひろを振り返って来年の糧にしたいと思います。

まずはゲーム開発のほうなんですが、今年はこれといって成果はありませんでした。
いないとおもうけど楽しみにされていた方、申し訳ありませんでした。
あ、Unity1Weekにはいくつか出しましたね。
ぎりぎりゲーム開発者と名乗ってもいいかなぁ。いいですかね?(´・ω・`)
ロシナンテさん、ネコブレさんと一緒につくった「ギリギリ☆アイランド」
ギリギリ☆アイランド | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

f:id:pouhiroshi:20181231131146p:plain
タイトル画面可愛いよまじで

リスペクツ・ハイパーオリンピッククレー射撃
リスペクツ・ハイパーオリンピック・クレー射撃 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

f:id:pouhiroshi:20181231131305p:plain
最初スパイクがあって止まっちゃうのでなんとかしたい


けどあまりゲーム開発できなかったのには理由があって、今年は「ゲーム作りを続けるための(生活)基盤を作る」というテーマがあったからです。
その点ではものすごく成果があった一年となりました。

成果その1 リモートワークを獲得できました!

長年の夢が叶いました。現在常駐しているクライアントさんには1年以上お世話になっていたのですが、契約更新のタイミングで、「リモートワークできるところを探しています。できないのであれば他のクライアントさんを探します」とお伝えして他の案件を探しました。(結果的に見つからなかった)
けど何かの齟齬があったらしく、リモートワークは許可してもらえず、次の更新時に現場のリーダーの方と直接話したら「え?全然できますよ。」と言われ、あれえええええ??!!
たぶんエージェントさんもまずい伝え方をしたんじゃないかなーとか思いつつも、はれて来年からリモートワークできるようになりました!!\(^o^)/ やったぜ!

成果その2 ロボット教室を始めて副収入が入るようになりました!

5月からフランチャイズとしてロボット教室をはじめました!
1年で生徒20人くらいになればいいなぁと思ってたんですが、今の時点で15人!
まずまずのスタートになったと思います。
こどもが小学生ということもあり、地域の教育活動に貢献できたらいいなとはぼんやり考えていたのですが、生徒さんたちも楽しそうに参加してくれて、始めてよかったなぁと思っています^^
それなりに収益もあがっており、来年からはプログラミング教室もスタートさせます。
あわよくば隣の駅に第2教室も検討したりするかもしれません!
kids.athuman.com

成果その3 家の近くに事務所兼コワーキングスペース「カモラボ」を設立しました!

こちらも長年の夢だったコワーキングスペースを事務所兼としてスタートさせました!
kamolab.strikingly.com

家の近所(歩いて5分)のマンションの一室を借りていまして、ゆくゆくはプログラミング教室の場としても使えるようにしたいと思っています。
今月からロボット教室の収益で家賃もカバーできるようになりましたので、ここからさらに収益化を目指していきたいところです。
そうそう、カモラボのロゴはミライノ制作所の未来さんに作っていただきました(*´∀`)

f:id:pouhiroshi:20181231132328p:plain:w400
この素敵なロゴを見よ!
さすがプロの技・・・・とても華やかな印象になりました。ありがとうございました!
ミライノ制作所HP www.mirai-no.com

また、個人開発仲間の森のクマさんことふりふらさんには、カモラボの紹介記事を書いていただきました!
blog.item-store.net

記事どころか、看板にも寄稿していただいたよ!!

f:id:pouhiroshi:20181231132553p:plain:w350
ちゃんとカモ入りいぃぃ!!

ふりふらさんの2019年活動にも注目ですぞ!!
森クマblog

教室スペースはインスタベース、スペースマーケットなどに掲載をはじめているのですが、何回か貸し出し実績も出てきました!こちらも今後が楽しみです!
www.instabase.jp

成果その4 メインクライアント以外からのお仕事をいただけることが多くなりました!

個人開発者の知り合いや、昔のクライアントさんが独立されてお仕事をくれたり、知り合いの紹介からのさらに紹介、など、人脈なのかよくわかりませんが、いろいろお声がけいただくことが増えてきました。
技術力はさほどないのですが、こうやって声をかけていただけるのはフリーランス冥利につきるなぁと思っています。
フリーランスは、大手の目の届かない個人や中小企業などの隙間ニーズを、動き軽快さを武器にくみとっていけるのが生き残る秘訣かなぁと思っているのですが、だんだんそういう基盤ができてきた気がします。
ぜひ来年もそういう小さなお悩みを解決できる、アジリティあるフリーエンジニアでありたいと思います。

来年に向けて・・・

以上、テキストばかりの今年の振り返りでしたが、たくさんの成果が出て充実した一年になりました。

来年はこれをベースにして、ゲームを作ったり、遊んだり、収益基盤をさらに安定したものにしていきたいと思っています。

それではみなさん、来年もぽうひろをよろしくお願いいたします!!!
よいお年を!!