たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

UniRxを使用したuGUIのデザインパターンを実装してみた

以下の記事を参考にUniRxを使用したuGUIのデザインパターンを実装してみました

www.slideshare.net

  • 今回やってみたこと
  • 使用した環境
  • MV(R)Pモデル
  • 感想

今回やってみたこと

記載したスライドを参考にUniRxを使用してMV(R)Pパターンの実装をしてみました。処理の内容は、RedButton,BlueButton,YellowButtonの3つのボタンを用意して、ボタンを押したらSphereの色が変わるようにしました。

これがデフォルトで
f:id:c_taquna:20180805073359j:plain

RedButtonを押すとこうなります
f:id:c_taquna:20180805073405j:plain

続きを読む

以前つくったゲームの処理の一部をUniRxで書き直してみた

前に作ったゲームをUniRxで一部処理を書き換えてみました。自分がどんな処理をUniRxで書き換えたのか記載します。

c-taquna.hatenablog.com

  • 使用した環境は以下
  • 今回やってみたこと
    • カウントダウンの処理を書き換え
    • ゲーム内の 処理の直列化
    • 感想
続きを読む

【メモ】Shader Graphを使ってみた

下記サイトを参考にShader Graphを使ってみた。確かに、パズルの様に組み合わせていくだけで色んな表現ができるので、使いこなせたら面白いなと思った。ただ、どういう風に考えれば再現できるのかなーと考え中。Shaderを使う人って何をどう考えて設計しているんだろう。。

negipoyoc.com

f:id:c_taquna:20180712232215j:plain

f:id:c_taquna:20180712232328j:plain

VRシューティングゲームを作った(3作品目)

今回、Unityで3つ目のVRゲームを作ってみました。今まで勉強してきたものに、自分にとって新しい要素をいくつか取り入れました。
Menu画面のレーザーポインタもそうですし、直接は見えないですが今回はOculusRiftだけではなくOculusGoでビルドして遊べることも確認済みです。

  • 今回作成したゲーム
  • 使用した環境は以下
  • 今回やってみたこと
    • メニュー画面
    • UIについて
      • メニュー画面のUI
      • リザルト画面のUI
    • ゲームのプレイ状態の判定
  • Oculus Go
  • 感想
  • GitHub

今回作成したゲーム

youtu.be

続きを読む

UnityでScene遷移時にstatic変数の値を引き継いでしまう問題に遭遇した時

UnityでSceneの遷移時に少しハマったのでメモします。あまり具体例とかないですが。

環境

使用した環境は以下

  • Unity 2018.1.3f1

何にハマったのか

各シーンにて、条件を満たすとSceneの遷移が起こるようになっていて以下の様に遷移してみた。

Menu→Play→Menu→Play

最初Menuから入って、その後Playに移って、クリアしたらMenuに戻ってまたPlayへと遷移していたのですが、2回目の遷移の時にゲームが始まった瞬間に終わってしまったり、Clearの時に表示されるUIが消えなかったりして思った様に動いてはくれませんでした。

何が原因だったのか

問題は2つあって、

  1. 原因となっていたのは、ゲームのプレイ状態(開始・プレイ中・終了のステータス)を保持する変数がstaticで定義されていて、Sceneが変わってもゲームのプレイ状態を引き継いでしまっていたことが問題でした。(クリア後にMenuに戻っても、ゲームのプレイ状態はクリアのままなので、次にPlayにいってもすぐに終了してしまう)
  2. もう一つは、同じ様にstaticで定義していたのだけれど、Start()の前、インスタンス変数を定義するところで初期化されている変数があったためSceneが始まった際にきれいに初期化されなかったことです。

例として、変更前と

public class PlayManager : MonoBehaviour {
    float _PlayTime = 20;

~~~

変更後

public class PlayManager : MonoBehaviour {
    float _PlayTime;

    void Start () {
        _PlayTime = 20;
    }

~~~

何を対応したのか

Scene遷移時にゲームのプレイ状態の初期化を入れたのと、もう一つはインスタンス変数として定義した変数はStart()の中で定義するようにしたこと。この当たりのstatic変数の扱いとかはUnityのベストプラクティス的なものがあるのかな?

Oculus Rift/Oculus Go でレーザーポインタを当てたオブジェクトの色を変える

Oculus Rift/Oculus Go でレーザーポインタを使用して見ようと思い、色々と勉強してみました。今回は、最終的にレーザーポインタがあたったオブジェクトの色を変更するところまで実行します。

  • 今回つくったもの
  • 環境
  • 前提条件
  • 追加処理の説明
  • Sphere の Collider の削除
  • 感想

こんな感じで、レーザーポインタがオブジェクトにあたった時に色を変えています。(赤→黄色)

今回つくったもの

f:id:c_taquna:20180705054350j:plain
f:id:c_taquna:20180705054347j:plain

続きを読む

Unity5ゲーム開発レシピ~ハマるゲーム制作のノウハウ~を読んだ

がんばってUnityを使おうと思ってたけど、やっぱ基礎ちゃんとしないといけなくね?ということで参考書を読んだ。結論からいうと今後も続けていきたい。

どんな本か

www.shoeisha.co.jp

Unity5でのゲーム制作におけるTIPSが載っています。最初からたどるとTPSのロボゲーが完成します。これはなかなか感動。

環境

使用した環境は以下

  • Unity 5.6.3p1

感想

ざっくりとした内容

まず、章ごとにやることが決められていて、一つずつステップを踏んでいく様になっている。一からたどればTPSのロボゲーが完成するし、こういこうことやりたいな~って時に開く逆引きの参考書としても優秀。

良い点

Unityは触ったことあるけど、あまり基礎から勉強したことない人にはうってつけな気がする。個人的に、ある程度コードが読めてUnityを触ったことある人で初心者を抜け出したいな~と思っている人は買ってみてもいいのではと思う。参考書にあるコードを写経して理解するだけでもなかなか学びがある感じ。特に、GUIでの操作も文字だけではなくちゃんとキャプチャがはられているので、すごくわかりやすい。

悪い点

Unity5が古いので、参考書の記載だとうまく動かない部分がある。そのため、適宜読み替える必要がある。本当に初心者の場合はその箇所に気がつけず嵌りそうなきがする。あと、やっていることと書いてあることが違ったりするので(結構多い)その部分も適宜読み替える必要がある。そういう点でも初心者向きではないかも。

書評

初心者向きではないが、Unityの使い方を学ぶ点では非常に学びがある。ただ、現在はUnity2018もでていることからかなり古い資料になってしまっている。来年には役にたたなくなっているかもしれないが、それでも今なら勉強の参考書として優秀だと思う。

SpeedTree materials need to be regenerated が出たときの対処法

Unityで下記メッセージが出た時に対処した方法を記載します。

SpeedTree materials need to be regenerated

環境

  • Unity 5.6.3p1

発生したタイミング

Assets -> Import Package -> Environment で Import が完了した直後

対処方法

下記4ファイルのInspectorで 「Apply&Generate Materials」をクリック

インポートした Asses -> Standard Assets -> Environment -> SpeedTree
-> Broadleaf -> Broadleaf_Desktop, Broadleaf_Mobile
-> Conifer -> Conifer_Desktop
-> Palm -> Palm_Desktop


f:id:c_taquna:20180616091454j:plain

Unity 2018でArgumentExceptionが出る時の対応

Unity 2018 .1.3f1 をインストールして起動した時に、ArgumentException~というメッセージがでたので、その時に対応したメモ。

メッセージ

ArgumentException: Value does not fall within the expected range. SyntaxTree.VisualStudio.Unity.Bridge.CompilationUnit.LanguageOf (SyntaxTree.VisualStudio.Unity.Bridge.CompilationUnit unit)

www.visualstudio.com

最新版ではFIXされてそうだったので、ここのサイトでVisualStudioCommunityをダウンロードして最新版にアップデートすることで解消した。

OculusGoで「USBデバッガ~」が表示されないとき&アプリがビルドできないときの対処法

Oculus Go でUnityのVRサンプルアプリをビルドするまでにハマったところを2点だけ紹介する。予想以上にハマって悔しかったので、少しでも同じことで時間を使う人がいなくなりますように。

ハマりポイント

ケーブル

結論からいうと、純正ケーブルを使いましょう。これはどんな時にハマったかと言うと、PCとOculusGoを接続していて明らかに充電されているのにもかかわらずPCがOculusGoを認識していないとき。そういった時はケーブルを疑いましょう。そこらへんにあるケーブルを使うとまったく認識してくれなかったので純正ケーブルのほうが100パーセント安心です。どんなケーブルならOKかわからないですが、PCが認識してくれない時はケーブルが怪しいです。
ドライバをたくさんいれたけど、認識しなかったわちくしょう。

Java SDKのバージョン

Unity 2018.1.3f1 の Edit > Preferences > External Tools にて、JDKを指定する必要があるのですが、「お、最新版は10.01か~」と、何も考えずにいれるとビルドに失敗します。8ぐらいにしておきましょう。

f:id:c_taquna:20180612225125j:plain

ケーブルに関してはしょうもないぐらいハマってしまったので、気をつけてください。

VRでゲームを作って遊んでみた~飛んでくる弾を切る~

休日を使い、一気にゲームを作りきってみました。ステージ作成、クリア・ゲームオーバー判定などなど、、、まだまだ甘いところは多いけど、ひと段落ついたかなといった感じです。その勢いのまま、多田くんは恋をしないを見始めました。荒ぶった心に染み渡る。

tadakoi.tv

今回つくったもの

youtu.be
ソードアートオンラインⅡ9話でキリトが光剣で銃の弾を撃ち落とすシーンがイカしてたのでそのイメージで作ってみました。

  • 今回つくったもの
  • やったこと
    • ステージを作成する
      • Terrain
      • Skybox
    • クリア判定できるようにする
    • ゲームオーバー判定できるようにする
    • タイトル画面を作成する
      • タイトル画面用のシーンを作成する
    • 改善:剣を常に持った状態にする
    • 改善:HPのUIを変える
  • 感想
続きを読む

弾と剣があたったら、弾が消失してエフェクトでパーティクルを発生させる

前回作成した弾に軌跡をつけることと、剣にあたったら弾が消失してパーティクルがはじけるようにしました。

今回つくったもの

youtu.be

  • 今回つくったもの
  • やったこと
    • 弾に軌跡をつける
    • 剣にあたったら弾が消失する
    • 弾を切った時のエフェクト
  • 感想
続きを読む