kidoOooOoooOOom

ゲーム開発やってます

Unity

「現場で役立つシステム設計の原則」と「レガシーコードからの脱却」を読んでUnity開発のテスト自動化への危機感UP

「現場で役立つシステム設計の原則」を読み終わって、今は「レガシーコードからの脱却」を読んでいる途中。 先日のEOF2019であったt_wadaさんの「質とスピード」、ryuzeeさんの「レガシーコードからの脱却」の資料も合わせて読むと理解が深まってくる。 spea…

WitcherのGwent制作チームもUnityのアップデートに苦しんでいるという話

Witcher3から派生して作られたカードゲーム「Gwent」のiOS版がリリースされたので早速インストールしてプレイした。 (PS4版はある程度プレイ済み) app.famitsu.com なかなか渋い。ハースストーンと比べて、テンポが遅いのが気になる。 Witcherファン的には…

4歳の子供と一緒にUnityのProBuilderでピタゴラスイッチみたいなものを作成

YoutubeのUnityチャンネルを適当に見ていて、自分もProBuilderでなんか試すかーと思ったので試してみた。 www.youtube.com ProBuilderを使うには、まずPackage Managerからインストールしてくる Mayaのようにある程度自由にMeshを編集できるが、Presetの形状…

Unite Tokyo 2019 DAY2 参加レポート

Unite Tokyo 2019 二日目も参加したので、DAY1に引き続きレポート。 kidooom.hatenadiary.jp 参加したセッションは下記の通り。 10:00 - Stadia 開発環境について 11:00 - SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~ | Unity Learn…

UniteTokyo2019 DAY1 参加レポート

Unite Tokyo 2019 参加してきたので、まずはDAY1で自分が参加してきた講演のレポートを書いとく。 <七つの大罪>をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介 youtu.be 「えっ!?スマホでこんなハイクオリティなゲーム作っち…

Witcher3の開発で使われているSimplygonとUmbra3について

GDCの資料を見て英語とゲーム開発について勉強するシリーズ。 自分がとても好きなゲーム「Witcher3」に関する講演資料を読んでみる。 今回は、GDC2014で発表された資料2つを読んだ。 まず1つ目の資料は、 GDC Vault - Speed Up Your Game Using Simplygon (…

複数フラグ判定を行うenum実装とそれのUnityTestRunnerコード

ゲームでよくある武器の属性をC#のenumで実装する時、こんな感じで書ける。 using System; [Flags] public enum WeaponElement { Fire = 1, Water = 1 << 1, Earth = 1 << 2, Wind = 1 << 3 } public static class WeaponElementExtension { public static b…

Unity2018.3で追加された Prefab Modeを使ってみての注意点2つ

最近チームでもUnity2018.3.1 で新しく追加されたPrefab Mode を使い始めてハマった点とか注意すべき点があったのでメモ。 Auto Save は OFFにする Prefab Modeを触っていて最初に感じたのが、「これいつPrefabへの編集がSaveされてんの?」という点。 調べ…

Unityで3Dオブジェクトをボクセル化する「unity-voxelizer」について

こちらのblogで紹介されていたunity-voxelizerを試してみて、どんな仕組みで動いているのかを調査。 baba-s.hatenablog.com github.com まず、デフォルトのSphereにたいして unity-voxerlizer を適用すると こんな感じのボクセルSphereになる。 ボクセルの密…

Arbor3のBehaviourTreeでシミュレーションゲームの敵反撃行動を実装

UnityAsset の Arbor3 を使うと、StateMachineやBehaviourTreeをノードベースで割と簡単に実装できる。 https://arbor.caitsithware.com/ 今回、個人的に制作予定のシミュレーションゲームの敵行動AIの一部をBehaviourTreeで試しに実装した。 (BehaviourTre…

Unity認定エキスパート試験2回受けて2回とも落ちた

Unity認定エキスパート試験 Unity Certification - Expert Gameplay Programmer がUnityの勉強にもなるため会社でも取得を奨励されており、意識高く2回受けたけれど2回とも落ちてしまった・・・。 しかも2回とも、合格基準点500に対し、自分の成績は490点…

UnityのUnlit/Texture shaderを理解

Unity内蔵の Unlit/Texture shader は非常にシンプル。 ライティングの反映無し、透過無しのテクスチャのみのシェーダー。 Shader "Unlit/Texture" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } …

Unityでアルファマスクを使うshaderについて理解

githubで公開されている下記shaderについて学んだのでメモる。 github.com shader コードはここ unity-alphamask/SpriteWithMask.shader at master · keijiro/unity-alphamask · GitHubまずは Blend SrcAlpha OneMinusSrcAlphaBlendingに関する設定。Blendin…

UnityのSepiatone shaderを理解する

Shaderを勉強しはじめたので、まずはシンプルな Sepiatone shaderの中身を写経しながら基本的なところを学んでいく。Unity の ImageEffectsで使われているセピアトーン化のshaderコードがこれ Shader "Hidden/Sepiatone Effect" { Properties { _MainTex ("B…

UnityでScriptableObjectを用いて設定管理

拡張エディタやImporterの設定ファイルとして、ScriptableObjectが使用できる。 tsubakit1.hateblo.jp 例えば今回は、画像ファイルをUnity上にインポートする際に、特定のフォルダ配下の場合はTrue color にしたりmip mapをOFFにするといった自動設定を行う…

UnityでFBXファイルをインポートした時のデフォルト設定を自動化

Maya等で作成した3Dモデルが含まれるFBXファイルはUnity上にドラッグ&ドロップするだけでインポートが可能だが、デフォルト設定では色々とまずいので設定を変える必要があったりする。 インポートするファイルの数がたいしたことなければ問題ないが、100を超…

Unityでアプリ起動時の画面向き設定

スマホの縦向きのレイアウトしか考慮しない場合は縦向き固定にする。 [Build Settings] から [Player Settings]を開き、Resolution and Presentation のところの Orientation を変更する。 Portrait: 縦向きでホームボタンが下固定 PortraitUpsideDown: 縦向…

Monodevelop ショートカットメモ

とりあえず使いそうなのメモ コードスニペット: 予約語を入れて tab 2回 定義へジャンプ: 変数を選択して cmd + y 参照先リストアップ: cmd + shift + y リファクタリング: Cmd + r 指定行へ移動: Cmd + L コメント挿入: /// 矩形範囲選択: option + マウス…

一時停止して演出を流す

ゲーム進行は一時停止させたままカットイン演出などを入れたい場合、Time.timeScaleを0fにして世界を止めて、動かせたいものだけiTweenのignoretimescaleオプションを使って動かせる。 (制御系のクラス) if (pauseFlag) { Time.timeScale = 0f; return; } el…

任意の攻撃ポイントに対してシールド成功かどうかをチェックする

盾のオブジェクトに攻撃発生座標を渡して、ガードが成功したかどうかを判定したいような場合、下記のようにPhysics.CheckSphereを使った。 public bool IsGuardSuccess(Vector3 attackPoint) { if (Physics.CheckSphere(attackPoint, shieldRange)){ Instant…

こっち見んな を作る

敵キャラクターなどにCameraの方向を向かせる単純なスクリプト // Update is called once per frame void Update () { var newRotation = Quaternion.LookRotation(Camera.main.transform.position - transform.position).eulerAngles; newRotation.x = 0; n…

UnityでWS

今日は勉強会でUnityからWebSocketを使う発表を聞かせてもらった。C#のWebSocketライブラリにはこういうのがあるらしい WebSocketSharp (今回はこれを使用) SuperWebSocket WebSocket4Net SuperWebSocketからforkしてクライアント部分だけ切り出したもの? W…

最初の糞ゲーを作って発表しました

今日は草の根のUnity勉強会で自分で作った糞ゲーを発表してきた。 糞ゲーをこちら。 https://dl.dropboxusercontent.com/u/6023300/Space_Shooter/Space_Shooter.html基本はUnity公式チュートリアルを使ったもので、プラスαとしてボス敵を追加している。 ボ…

Space Shooterにボス敵を追加&ハイスコア管理追加

公式チュートリアルのSpace Shooterでは隕石が飛んでくるだけの状態で終わって寂しいので、勉強がてらボス敵を追加してみた。 今日できたところまでのボスの仕様は下記の通り。 ボスにはHPがある HPがある程度へったら攻撃パターンが変わる ボスの弾を当てた…

Unity Tutorial Beginner Space Shooter chapter 14で学んだ事

音源の設定。 Assetsの音源を各オブジェクトにドラッグすれば基本的にはOK. 爆発エフェクトは発生と直後に音を鳴らしたいので、Play on Awakeをチェックする。 Playerの弾を発射する時の音は、Playerに音源をつけたあと Play on Awakeのチェックを外し、 Scr…

Unity Tutorial Beginner Space Shooter chapter 13 で学んだ事

プログラムの実行を中断して、任意のタイミングで再開する方法として yieldを使う。 yieldを書ける場所としては メソッドの戻り値がIEnumerator型である StartCoroutine()にメソッド名を指定して呼び出される ことが条件である。 チュートリアルでは、最初の…

Unity Tutorial Beginner Space Shooter chapter 11,12 で学んだ事

衝突や表示を何も持たないGameObjectを作成し、それをGameControllerとしてScrpitを付与した。Quaternionはunityで回転の制御に用いられているもの。 チュートリアルでは、回転していないQuaternionとして、Quaternion.identityが使われた。参考URL Quaterni…

Unity Tutorial Beginner Space Shooter chapter 16,17で学んだ事

対象のキーボード入力があったかどうかをチェックするには、Input.GetKeyDown (押した瞬間を確認。押しっぱなしでも1回入力として扱う)を使う。 例えば、'R'が入力されたかどうかの判定は下記の通り。 Input.GetKeyDown(KeyCode.R)) Input.GetKeyDown https…

Unity Tutorial Beginner Space Shooter chapter 15で学んだ事

GUI Textを用いてスコア表示 Viewport Space 画面の左下の座標を(0,0), 右上の座標を(1,1)としてtrasnform指定する方式 Screen Space 画面のx,y座標を絶対値で指定する方式 GameController側でスコア管理とスコアテキストの更新を行うようにスクリプトを更新…

イベント関数の実行順 / Execution Order of Event Functions

よく見そうなのでメモ。 参考URL http://docs-jp.unity3d.com/Documentation/Manual/ExecutionOrder.html おおざっぱにとらえると、 Awake() Start() Update() レンダリングやコルーチンなどイベントに応じて OnDestroy