神様は有休消化中です。

Unity関連の技術ネタを書いてます。

【Unity】Reflectionを使った情報収集を軽量化するアイデア

ライブラリを開発している中で、書き心地を担保するためにReflectionを使用したい場面が出てきます。 例えば特定のキーが押された時に指定した関数が実行されるようなショートカットキーの仕組みを実装する場合、Attributeでショートカットアクションを指定…

【Unity】uGUI ImageでAlpha Maskを使えるように実装する方法

はじめに この記事は、先日公開した以下のリポジトリの技術解説です。 使ってみたいという方は、ぜひ使ってみてください。 github.com 概要 Unity uGUIでMask表現を行う場合、標準で実装されているMaskコンポーネントを使用すると、境界にひどいジャギーがで…

【Unity】Inspectorで管理できる汎用アセットインポーターを公開しました

仕事で所属しているプロジェクトが佳境に入りまして、テクスチャの最適化などをアーティストさんと共同で進めております。 その中で「この非圧縮テクスチャを圧縮に変えたいのに変わらない!」「テクスチャのmaxSizeを512にしたいのにできない!」というよう…

【Unity】iPhoneX対応の罠 なぜかCanvasのAnchorがずれる問題の解決策

概要 遅ればせながら、今開発中の新作ゲームでiPhoneX対応を行うことになりました。 ネットを検索するといろんな情報が溢れていますが、まずは公式情報を・・・ということでUnity公式のサンプルを元に対応を進めた結果、見事に地雷を踏んだので共有しておき…

【Unity】カメラ1つでUI解像度を維持し、3D解像度だけを下げる方法

昔からモバイル端末の解像度は狂気の沙汰としか言えず、あの小さな面積にフルHDとかのディスプレイを積んでいます。 撮った写真を綺麗に見るなら良いのかもしれませんが、1フレーム16msとか33msで描画しないといけないゲームではかなり辛いものがあります。 …

【Unity】無駄なドローコールなしで深度バッファを取得する方法

UnityでDepth Bufferを使用する方法として公式に紹介されているのは、Camera.depthTextureModeを使用する方法です。 しかし、Camera.depthTextureModeを使用すると、UpdateDepthTextureなるレンダリングパスが増えてしまいます。これは公式ページにも記載さ…

【Unity】【uGUI】リストビューに、セルが画面外から差し込まれるアニメーションをつける

uGUIで作ったリストビューに、セルが画面外から差し込まれるようなアニメーションを追加する方法を共有。 最終的にこんな感じになります。

【Unity】カメラからどれだけ離れても、最低1ピクセルは表示されるように保障する

通常3Dオブジェクトがカメラから離れすぎると、レンダリングサイズが1ピクセルを下回った時点で画面に描画されなくなり、カメラとの位置関係によって描画が切れたり出たりしてチカチカと表示されることがあります。今回はこの問題の解決方法(レンダリングの…

【Unity】マテリアルの描画がシェーダーのQueue順に処理されない原因と対策

自作シェーダーなどを使用してレンダリングを行う場合、レンダリング順序をTagsのQueueで指定しますが、特定の条件でこのレンダリング順序が無視される現象が発生したので共有。 簡潔にまとめだけ まとめると 現象 :シェーダーで指定したレンダリングキュー…

【Unity】Graphicを継承したクラスでMissingReferenceExceptionが発生する

先日、Graphicを継承したクラスで何故かMissingReferenceExceptionが発生することがあったので共有。 結論から言うと、OnDisableをオーバーライドすると発生する様子。テスト用にこんなクラスをすると、コンパイル時にMissingReferenceExceptionが発生します…

【Unity】AssetBundle化したPrefabのシェーダー参照が壊れる現象

先日、AssetBundle化したPrefabのシェーダー参照が壊れる現象に遭遇したため解決策を共有。状況としてはこんな感じ。 ・自作のUGUIオブジェクトにカスタムシェーダーを適用してPrefab化 ・上記Prefabをシーンに追加して実行→正常動作 ・上記PrefabをAssetBun…

【Unity】EventSystemsから受け取った座標をRectTransform.localPositionに設定する方法

uGUIのEventSystems(IBeginDragHandler, IDragHandler, IEndDragHandlerなど)から受け取った座標をそのままRectTransform.localPositionに設定すると、Canvasのscaleによってはぶっ飛んだ位置(描画領域外)に移動してしまうことがあります。 EventSystems…

【Unity5】HPゲージを実装する最も簡単な方法!

UnityでHPゲージを実装する簡単レシピを共有。最終的にこんな感じになります。

【Unity5】ゆっくり動き始めて、ゆっくり止まる補間を実装する

カメラやキャラクターの移動で、以下のグラフのような補間を実装する方法を共有。ゲームで一番よく使う補間方法です。 正式名称(?)はEase-in, Ease-Outとのこと。

【Unity5】Visual Studio Codeを使ってデバッグする

Visuat Studio Codeを使ってデバッグするための情報が公式から出たので、試してみました。 今の所Mac OS X以外は未サポートみたいです。 環境 ・Mac OS X 10.10.1 ・Unity 5.2.1f1 ・Visual Studio Code 0.8.0 やりたいこと ・UnityのエディタとしてVisual S…

【Unity5】【C#】string.StartsWithが激重いのでstring.IndexOfを使おう

先日Unityのプロファイラーを眺めていたところ、string.StartsWithが激重いことに気づいたので共有。テスト用にこんなスクリプトを実行。 using UnityEngine; using System.Collections; public class Hoge : MonoBehaviour { void Update () { string hoge …

【Unity5】Vector3.DotとMathf.Acosの組み合わせでNan発生

Vector3.Dotで取得したラジアン値をMathf.Acosに突っ込んだところNanが発生することがあったので共有。 以下のようなソースで出ました。 Vector3 a = (end - start).normalize; Vector3 b = hoge.transform.rotation * Vector3.forward; float rad = Vector3…

【Rails】db:migrateでMySQLのLONGTEXT、MEDIUMTEXTを使う

MySQLで使用できる文字列型には CHAR:255Bまでの固定長文字列 VARCHAR:64KBまでの可変長文字列 TINYTEXT:255Bまでの可変長文字列 TEXT:64KBまでの可変長文字列 MEDIUMTEXT:約1.6MBまでの可変長文字列 LONGTEXT:約4.3GBまでの可変長文字列 がありますが…

【Rails】Apache経由でInternal Server Error(500 Error)が発生して困った

環境 CentOS 6 Ruby 2.0.0 Rails 4.2.0 Apache 2.2.15 Phusion Passenger 4.0.58 やりたいこと ローカル環境で開発したRailsアプリをサーバーに入れて、Apache経由で使いたい まだ作りかけのアプリなので、development環境で動作させる やったこと 基本的に…

【Rails】feedzirraでRSSを取得してみる

feedzirraでRSSを取得してみる feedzirraでRSSを取得しようとして、つまらないところでハマったのでメモ。まずは、gemfileにfeedzirraを登録。 ネットで調べると以下のように登録するとのことで、追加。 vi Gemfile gem 'feedzirra' んで、いつもの bandle i…