Unity
「現場で役立つシステム設計の原則」を読み終わって、今は「レガシーコードからの脱却」を読んでいる途中。 先日のEOF2019であったt_wadaさんの「質とスピード」、ryuzeeさんの「レガシーコードからの脱却」の資料も合わせて読むと理解が深まってくる。 spea…
Witcher3から派生して作られたカードゲーム「Gwent」のiOS版がリリースされたので早速インストールしてプレイした。 (PS4版はある程度プレイ済み) app.famitsu.com なかなか渋い。ハースストーンと比べて、テンポが遅いのが気になる。 Witcherファン的には…
YoutubeのUnityチャンネルを適当に見ていて、自分もProBuilderでなんか試すかーと思ったので試してみた。 www.youtube.com ProBuilderを使うには、まずPackage Managerからインストールしてくる Mayaのようにある程度自由にMeshを編集できるが、Presetの形状…
Unite Tokyo 2019 二日目も参加したので、DAY1に引き続きレポート。 kidooom.hatenadiary.jp 参加したセッションは下記の通り。 10:00 - Stadia 開発環境について 11:00 - SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~ | Unity Learn…
Unite Tokyo 2019 参加してきたので、まずはDAY1で自分が参加してきた講演のレポートを書いとく。 <七つの大罪>をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介 youtu.be 「えっ!?スマホでこんなハイクオリティなゲーム作っち…
GDCの資料を見て英語とゲーム開発について勉強するシリーズ。 自分がとても好きなゲーム「Witcher3」に関する講演資料を読んでみる。 今回は、GDC2014で発表された資料2つを読んだ。 まず1つ目の資料は、 GDC Vault - Speed Up Your Game Using Simplygon (…
ゲームでよくある武器の属性を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.1 で新しく追加されたPrefab Mode を使い始めてハマった点とか注意すべき点があったのでメモ。 Auto Save は OFFにする Prefab Modeを触っていて最初に感じたのが、「これいつPrefabへの編集がSaveされてんの?」という点。 調べ…
こちらのblogで紹介されていたunity-voxelizerを試してみて、どんな仕組みで動いているのかを調査。 baba-s.hatenablog.com github.com まず、デフォルトのSphereにたいして unity-voxerlizer を適用すると こんな感じのボクセルSphereになる。 ボクセルの密…
UnityAsset の Arbor3 を使うと、StateMachineやBehaviourTreeをノードベースで割と簡単に実装できる。 https://arbor.caitsithware.com/ 今回、個人的に制作予定のシミュレーションゲームの敵行動AIの一部をBehaviourTreeで試しに実装した。 (BehaviourTre…
Unity認定エキスパート試験 Unity Certification - Expert Gameplay Programmer がUnityの勉強にもなるため会社でも取得を奨励されており、意識高く2回受けたけれど2回とも落ちてしまった・・・。 しかも2回とも、合格基準点500に対し、自分の成績は490点…
Unity内蔵の Unlit/Texture shader は非常にシンプル。 ライティングの反映無し、透過無しのテクスチャのみのシェーダー。 Shader "Unlit/Texture" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } …
githubで公開されている下記shaderについて学んだのでメモる。 github.com shader コードはここ unity-alphamask/SpriteWithMask.shader at master · keijiro/unity-alphamask · GitHubまずは Blend SrcAlpha OneMinusSrcAlphaBlendingに関する設定。Blendin…
Shaderを勉強しはじめたので、まずはシンプルな Sepiatone shaderの中身を写経しながら基本的なところを学んでいく。Unity の ImageEffectsで使われているセピアトーン化のshaderコードがこれ Shader "Hidden/Sepiatone Effect" { Properties { _MainTex ("B…
拡張エディタやImporterの設定ファイルとして、ScriptableObjectが使用できる。 tsubakit1.hateblo.jp 例えば今回は、画像ファイルをUnity上にインポートする際に、特定のフォルダ配下の場合はTrue color にしたりmip mapをOFFにするといった自動設定を行う…
Maya等で作成した3Dモデルが含まれるFBXファイルはUnity上にドラッグ&ドロップするだけでインポートが可能だが、デフォルト設定では色々とまずいので設定を変える必要があったりする。 インポートするファイルの数がたいしたことなければ問題ないが、100を超…
スマホの縦向きのレイアウトしか考慮しない場合は縦向き固定にする。 [Build Settings] から [Player Settings]を開き、Resolution and Presentation のところの Orientation を変更する。 Portrait: 縦向きでホームボタンが下固定 PortraitUpsideDown: 縦向…
とりあえず使いそうなのメモ コードスニペット: 予約語を入れて 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からWebSocketを使う発表を聞かせてもらった。C#のWebSocketライブラリにはこういうのがあるらしい WebSocketSharp (今回はこれを使用) SuperWebSocket WebSocket4Net SuperWebSocketからforkしてクライアント部分だけ切り出したもの? W…
今日は草の根のUnity勉強会で自分で作った糞ゲーを発表してきた。 糞ゲーをこちら。 https://dl.dropboxusercontent.com/u/6023300/Space_Shooter/Space_Shooter.html基本はUnity公式チュートリアルを使ったもので、プラスαとしてボス敵を追加している。 ボ…
公式チュートリアルのSpace Shooterでは隕石が飛んでくるだけの状態で終わって寂しいので、勉強がてらボス敵を追加してみた。 今日できたところまでのボスの仕様は下記の通り。 ボスにはHPがある HPがある程度へったら攻撃パターンが変わる ボスの弾を当てた…
音源の設定。 Assetsの音源を各オブジェクトにドラッグすれば基本的にはOK. 爆発エフェクトは発生と直後に音を鳴らしたいので、Play on Awakeをチェックする。 Playerの弾を発射する時の音は、Playerに音源をつけたあと Play on Awakeのチェックを外し、 Scr…
プログラムの実行を中断して、任意のタイミングで再開する方法として yieldを使う。 yieldを書ける場所としては メソッドの戻り値がIEnumerator型である StartCoroutine()にメソッド名を指定して呼び出される ことが条件である。 チュートリアルでは、最初の…
衝突や表示を何も持たないGameObjectを作成し、それをGameControllerとしてScrpitを付与した。Quaternionはunityで回転の制御に用いられているもの。 チュートリアルでは、回転していないQuaternionとして、Quaternion.identityが使われた。参考URL Quaterni…
対象のキーボード入力があったかどうかをチェックするには、Input.GetKeyDown (押した瞬間を確認。押しっぱなしでも1回入力として扱う)を使う。 例えば、'R'が入力されたかどうかの判定は下記の通り。 Input.GetKeyDown(KeyCode.R)) Input.GetKeyDown https…
GUI Textを用いてスコア表示 Viewport Space 画面の左下の座標を(0,0), 右上の座標を(1,1)としてtrasnform指定する方式 Screen Space 画面のx,y座標を絶対値で指定する方式 GameController側でスコア管理とスコアテキストの更新を行うようにスクリプトを更新…
よく見そうなのでメモ。 参考URL http://docs-jp.unity3d.com/Documentation/Manual/ExecutionOrder.html おおざっぱにとらえると、 Awake() Start() Update() レンダリングやコルーチンなどイベントに応じて OnDestroy