募集要項

  • ■ボイスの募集は終了しました。

    非常に沢山のご応募ありがとうございました!

     結果はこちら
2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

カテゴリー「 Unity Tips」の記事

2017年9月12日 (火)

【Unity Action】 今週の進捗(9月2週目)

もう9月も半ば…!早い(-_-;)

現在、メニュー側のスキルアイコンの対応を終わらせ、
色々と数値の設定や調整を中心に進めています。

具体的にはスキルの効果説明文の作成、
敵のドロップアイテムの設定、経験値テーブルの調整等。

それらと同時に、細々とクオリティUPやバグ修正を進めている感じです。

……そういえばタイトル画面まだ手を付けてなかった(ノД`)・゜・。
何だかんだ、まだやる事は多い!

2017年6月 5日 (月)

【Unity Tips】簡単な汎用UIシェーダー例(色相/彩度/明度)

結局先月はほとんど動けませんでした。申し訳ありません…;;
今日からは時間が取れるようにしたので
本格的に作業復帰です。

と、言うだけではアレなので、
最近作った簡単で便利なUI向けのシェーダーの紹介。

 

このシェーダーでは、
uGUIのImageのカラー情報を参照して
「R成分で色相」(元の色を基準に色相変更)
「G成分で彩度」(白黒~彩度2倍)
「B成分で明度」(暗転~明るさ2倍)

をコントロールできるようにしています。

これによって何が便利かというと、
ボタンを例にした場合

 ・ボタンの色替えが1つの素材で可能(別の意味合いのボタン等)
 ・ボタンのグレーアウトが可能(非選択状態等)
 ・ボタンの押下アクションに便利(明るくしたり暗くしたり)


といった具合に、元となる画像が1つあれば、
複数のリソースを持つ必要が無くなるという点です。
メモリに優しいですね。

また、通常の上から色を載せる形ではないので、
グレースケールで色を載せるよりは良い場合も多いです。

さて、作り方に関してですが、
ShaderForge(Assets)を使っています。
便利な事に、基本的なノードで操作できるパラメータなので、
繋ぎ方もシンプルです。

Photo_2

注意点は、彩度はDesaturateで変更している点でしょうか。
RGB変換時のノードの方で彩度調整をやってしまうと、
モノクロ時に綺麗に出てくれません。
※この辺りの詳細は、画像のモノクロ化の手法について
 ググると良い感じかと思います。


そして、シェーダーをマテリアルに適応して、
uGUIのImageのMaterialに付ければ完成です。

他にもコントラストや追加効果を当てはめたりする等、
様々な事が出来るので、色々便利です。

2016年1月12日 (火)

【Unity Tips】 いくつかアセットを紹介

あけましておめでとうございます。

色々作業は進めてますが、
書ける大したネタも無いので、最近購入アセットを紹介してみます。
※全てUnity 5.3.1p1で確認。

-----------------------------------------------------------
■Script Inspector 3($55)
https://www.assetstore.unity3d.com/jp/#!/content/3535

 Unity上でスクリプトを編集できるアセット。
 MonoDevelopやVisual Studioで使う基本的な機能はほぼ揃っているので、
 さほど変わらない感覚で編集できる優れ物。

 1601126

 特にConsoleやProject/Hierarchyからスクリプトを開く際のレスポンスが良いので、
 結構お勧めできます。
 ただ、作業が劇的に速くなったりはしないので、
 その辺りは注意。若干ストレスが減る程度だと思って下さい。

 個人的に気になった欠点は以下。
 ・日本語だとカーソル位置が横にずれる(使用は可能)。
 ・breakpointが無い模様。

 と、いう訳で、breakpointが無さそうなので、
  その辺りを使いたい時はMonoDevelopやVisual Studioで
  スクリプトを開く形の作業になります。
 が、一度使い始めるとついつい利用する程度には便利。

 費用対効果としては・・・人による感じでしょうか。

■Advanced Inspector($25
https://www.assetstore.unity3d.com/jp/#!/content/18025

 容易にインスペクター表示の拡張を行えるアセット。
 例として?作成中のゲームの攻撃設定に関して
 面倒でエディタ拡張していなかったのを、これを使用して整理してみました。
1601123
 手動でのインスペクター表示の拡張は正直めんどくさいので、
 拡張を頻繁に行う人には良さげ。

 基本的には配列数を開かなくても確認できる↑のリスト表示を使いたいのですが、
 リストの並べ替えはそれ以外の表示タイプでないと出来ないので、
 リストの表示を切り替えるボタンを拡張して作ったりしました。
 これで並び替え時だけリスト表示を変更すればOKに。

 また、便利な機能は色々あります。
 ・要素毎のコピペが可能
 ・要素毎のRevert/Applyが可能
 ・配列の中身をドラッグで並び替え可能
 ・複数のオブジェクトの特定のパラメータを選別して羅列する機能
 ・メソッドをボタンとして個別に実行可能
 ・タブ分け、グループ分け、編集不可設定等、色々と幅広く設定可能

 必須系のアセットでは無いですが、
 使うと何かと便利になる感じです。

■Maintainer($10)
https://www.assetstore.unity3d.com/jp/#!/content/32199

 プロジェクトの参照等がちゃんと設定されているかどうかを
 確認、羅列するアセット。

 使ってみたら超色々ありました・・・。
 といっても古いデータやシーン、アセットがほとんどでしたが。1601121

 という訳で、半日程かけて修正して警告も含めて0にしました。
 定期的に使うとプロジェクトの整理もできて良い感じかと思います。

■Simple LOD($30)
https://www.assetstore.unity3d.com/jp/#!/content/25366

 LODを自動で作ってくれるアセット。
 LODのメッシュの作成から、実装までまとめてやってくれます。
 マテリアルやメッシュをどこまで統合するか等の選択も可能、

 また、LODはもちろん、単純にメッシュやテクスチャを統合したいなーと
 思った際も、DCCツールでやるより楽にできる場合も。

 とはいえ、あくまで自動なので、軽減具合はお察しな所も。
 やはり、LODの質を追求する場合はマニュアルで作る必要はあります。

 利点、欠点を理解し、DCCツールと使い分けるといい感じかと。

 作成中のゲームは見下ろし視点とはいえ、
 多少は意味あるので使用検討中。

■Export2Maya($30
https://www.assetstore.unity3d.com/jp/#!/content/17079

 UnityのデータをMayaに持って行けるアセット。
 ライトマップのUVや、頂点カラー、テクスチャ、ライト等も持っていけるので、
 単純なobjのエクスポーターより色々融通が利く。

 1601124_2

 基本的な用途としては、オクルージョン等、Unityではなく
 Maya側で焼いたりしたい物がある場合や、
 Unity上でゴニョゴニョしたデータをMayaに持って行きたい場合に有効。

 MayaでUnity業務するなら1チームにつき1本は欲しい所。

-------------------------------------------------------

と、いう訳で今年もよろしくお願いします。m( __ __ )m

2015年4月23日 (木)

【Unity Tips】 地形テクスチャの作り方について考察

最近は順調に作業は進んでるのですが、
ブログ更新自体忘れてました(汗
折角なので以前下書きして放置してた記事に若干加筆してペタリ。

内容としてはステージの地面(等)のテクスチャについて。
※主に単純なタイリングじゃない場合

以前も書きましたが、
Terrain等の地形ツールのデータは、
そのままではモバイルゲームではまともに使えないので、
地形等のテクスチャの境界の馴染ませ方に関しては
何かしら対策が必要になります。
では、どういった対応が考えられるでしょうか。

①コツコツタイプ
 ポリゴンで大枠のテクスチャ分けを行い、
  境界を頂点アルファ等で馴染ませたり、
  アルファを使ったオブジェクトを被せたりするやり方。
  150227_1

  若干手間はかかるものの、
  必要な箇所のみ半透明を使用する為、無駄は少ない
  ただ、Unityのライトマップも使う場合、
  頂点アルファとライトマップを両立するシェーダーは
  標準では無いっぽいので自前で用意しましょう。
  また、半透明同士の優先度にも気を付けて対応する必要があります。

  今現在使ってるやり方です。

②シェーダータイプ

  頂点カラー等を使ってテクスチャのブレンド具合を管理する。

  150227_2

  例えば、テクスチャAを基準に、
  頂点カラーのアルファ情報の頂点ではテクスチャBが表示される
  といったようなシェーダーを作る手法。

  RBGAそれぞれに違うテクスチャを使うこともできるので、
  頂点カラーだけで5枚の地形テクスチャのブレンドに対応できるかなと。

  ShaderForge等のアセットを使えばシェーダーは比較的簡単に
  作れる
ので有力候補だったのですが、
  どうも(ShaderForge1.05&Unity4.63)で上記のようなシェーダーに
  ライトマップも同時に使おうとするとエラーになるので実用には至ってません。
  負荷次第では有用かもしれません。

  ※同時に、Maya等の3Dツール上で同様のシェーダーを用意したい所。
    ⇒MayaのShaderFx使えば行けるか?使ったことないので要調査。

  ※ShaderForgeがアップデートしてたので試したら
    問題なくコンパイル&動作しました(1.06)。
    タイミング見て実用してみる予定です。
  
  ■ShaderForge
  AssetStore https://www.assetstore.unity3d.com/jp/#!/content/14147
  公式  http://acegikmo.com/shaderforge/

③力技タイプ
  Terrain(Unity外のツール含)で作った地形を画面上部から
  フラット気味なライトでスクリーンショットで撮りテクスチャとして扱うやり方。
  あまりお勧めはできません(汗

  150227_0

  作るのが容易で、頂点カラーやアルファも使わないので描画は最も軽いです。
  が、当然ながらテクスチャの容量が非常に大きくなるので、
  それに伴う様々な問題が発生します。
  また、広いマップでは解像度が相当高くないと対応できない為、
  「マップ数が少ない&広くない」ような場合でないと使い難いでしょう。
  尚、急角度の壁や、洞くつのような、
  上部から見えない(もしくは鋭角な角度の)部分がある場合も
  適していません。

  作成中のゲームの1つ目のダンジョンで使ったりしましたが、
  解像度不足が気になります。。。追々別の手法でやり直すかも。

④出力タイプ
 Terrainで作った地形テクスチャのブレンド具合を
  外部ツールで読めるデータに自動変換する処理を作ってしまうとか。
  モデル形状の出力は以前の記事で紹介しましたが、
  テクスチャは現状無い・・・?

と、いった感じでしょうか。

私自身、背景は専門じゃないので、
常に試行錯誤してる状態です。
あくまで、参考程度にどうぞ。

2015年3月 1日 (日)

【Unity Tips】 CharacterControllerでコリジョンを滑り落ちよう

タイトルの内容が
背景作ってる際に必要になったので考えてみました。

例えば、尖ってるオブジェクトがあり、
コリジョンは設けたいが、上には乗らせたくない、
というシチュエーションがあったとします。
この場合、CharacterControllerのslope limitで登れる角度設定できるから
単純に三角錐のコリジョンを作ればいいんじゃ?

・・・とは行きません。
CharacterControllerのslope limitはあくまで
「CharacterController.Move」で登れないだけであって、
基本的なジャンプ処理でコリジョンの高さに行くと、
↓図の右上図のようにはいかず、の左右下図のように、
コリジョンに触れると、その場で止まってしまいます。

 150301_2

つまり、CharacterControllerは
シンプルな実装のジャンプだと、
どこでも登れてしまうのです
(;´Д`)ナ、ナンダッテー

本来は右上図のように、下に滑り落ちて欲しいですよね・・・。

って事で対応を考えました。

①地面に設置した瞬間に、設置した面の角度を取得する

②地面した地面の角度が一定以上ならスライド開始
  ⇒一定以下なら着地処理へ

③地面の角度から、滑る方向を算出して滑りつつ、
 一定角度以下の地面に設置したら着地処理へ

ゲームによっては、急な崖等で本当に「滑り落ちる」ような
モーションを適応しても面白いかもしれませんね。

---------------------------------------------

さて、実践してみましょう。
CharacterControllerが地面に設置した状態で、
まだ着地していない場合に以下を実行します。

//キャラクターの位置から下方向にRayを飛ばす(指定レイヤー限定※この場合は地面コリジョンのレイヤー)
//RayLengthは、Rayを飛ばす距離。私の場合は地面の位置すれすれまで飛ばしてます(地面の高さは固定な前提)
//レイヤーマスクは⇒で指定 int layerMask =1 << LayerMask.NameToLayer("レイヤー名");
if (Physics.Raycast(myTransform.position, Vector3.down, out slideHit, RayLength,layerMask)) {
  //衝突した際の面の角度とが滑らせたい角度以上かどうかを調べます。
  if (Vector3.Angle(slideHit.normal, Vector3.up) > controller.slopeLimit){
   isSliding = true;
  }else{
   isSliding = false;
  }
}

基本的(※1)には上記で、「滑らせる状態かどうか」を調べられます。
そして、CharacterControllerのMoveを処理しているUpdate系の関数で、
滑らせる処理を入れます。

if(isSliding){//滑るフラグが立ってたら
  Vector3 hitNormal = slideHit.normal;
  moveDirection.x = hitNormal.x*slideSpeed;
  moveDirection.y -= gravity * Time.deltaTime;//重力落下
  moveDirection.z = hitNormal.z*slideSpeed;
}

※どこにどう挟むかは各人の処理次第。

で、これを地面、もしくは滑らない角度まで繰り返します。
斜面に触れてから着地までは逐一Rayを飛ばすことになりますが、
長く滑り続ける訳ではないので問題ないかなーという感じです。

※1:
 基本的、と書いたのは、CharacterControllerのRadiusやskinWidthが大きいと、
 「真下にはコリジョンがないのに滑ってる途中で着地してしまう」
 という事が起こりえる為です。
 自分の場合は、真下のチェックをスルーした際に、
 周囲に再度Rayを短く飛ばして、コリジョンの再チェックをしてます。


-------------------------------------------------

■CharacterController同士の重なり問題にも役立つ

CharacterControllerで、ジャンプを作った人は
経験ある人も多いかと思いますが、
CharacterController同士って、普通に乗れるんですよね・・・(´・ω・`)
150301_2_2
Unityユーザーみんな大好き、配管工!

少しでも動けば落ちますが、見た目的にはかなり違和感です。
そこで、今回の記事のやり方で、チェックするレイヤーを
CharacterControllerのレイヤーにすれば、
重なっても滑り落ちる事が可能です。

但し、CharacterControllerは
頂点付近のコリジョン角度が浅いので
少しでも角度があれば滑り落ちるくらいの設定にする必要があります。
なので、CharacterControllerのレイヤーだったら
  if (Vector3.Angle(slideHit.normal, Vector3.up) > controller.slopeLimit){
のslopeLimitを、「>0」等に分岐させると良いでしょう。

また、私の場合は、
「ジャンプ下降状態で下方向に敵がいた場合」は敵を若干ずらして
邪魔にならないように、という処理も入れていましたので、
今回の処理との相性もいい感じでした。
(ずらし具合を前より抑えて、残りは滑らせるイメージ)

対応するかはちょっと悩んだ項目でしたが、
結果やってよかった、と思います(´▽`*)

2015年2月 1日 (日)

【Unity Tips】 UnityのTerrainをOjbで出力して外の3Dツールで使う

色々途中なのでちょっとお茶濁し記事ですヾ(゚ω゚)ノ゛

まず前提としてですが、
UnityのTerrain機能で作った地形はモバイルではまともに使えません。
※動きはするのですが、重すぎて、他に処理が割けなくなります。

したがって、モバイル向けゲームでTerrainを使って
地形を作ろうとした場合、
基本的には何かしらの対応が必要になります。

ちなみに、Terrainは標準機能ではモデルデータをしては出力できません。
一応UnityからHeightMapは出力できますし、
Maya等でもHeightMapの読み込みはできますが、
正直面倒です。

そこで、TerrainObjExporter。
http://wiki.unity3d.com/index.php?title=TerrainObjExporter

これで、Obj形式でTerrainを出力できるので、
このデータをMaya等の3Dツールで読み込めます。
↓な感じです。作った人に感謝!(´▽`)

150201
※適当にグリグリしただけの地形です。

当然ながら、このままではポリゴン数がものすごいので、
用途に合わせて減ポリ、最適化して使いましょう。

2014年7月15日 (火)

【Unity Tips】 TooltipとContextMenuItem便利

Unityで要素の多めのゲームを作ってると、
色々とパラメータの類が増えてきています。

変数名が長くてInspectorの幅が狭いと文字が入りきってなかったり、
あれ?これって何の変数だっけ。とふと思う事等が
まれにあります。・・・ゴメンナサイ。

そこで、一々スクリプトを開くのも面倒なので、
↓みたいにマウスオーバーで説明を出せるようにしたいなーと。
140714_1

結論から言えば、これ、
[Tooltip("説明文")]
を変数の前に入れれば行けました。(Unity4.5~の機能の模様)

4.5のアップデートの情報だと
「エディター: スクリプト属性 [Tooltip] および [ContextMenuItem] の使用によりインスペクターのカスタマイズ性を改善」
としか書かれて無かったので全く気付かなかったです…。

それに気づかず、最初はエディター拡張で試してました・・・。
ほぼ完成した所で気づいて涙目です。゜(゚´Д`゚)゜。

ついでに、[ContextMenuItem]に関しても少し。
これは、Inspector上で変数を右クリックする事で、
特定の関数を走らせることができる物のようです。
↓みたいな感じになります。

140714_3_4

これはこれで便利そうですね。

2014年4月 9日 (水)

【#unitychan】 Unityちゃんを使ってみた

昨晩Unity公式キャラクターのUnityちゃんのデータが
公開されてた事に気づいたので、
今日は急遽予定を変えて、Unityちゃんを検証と、
作成中のゲームへの入れ込みをしてみました。
※Twitterに書いてたのをまとめた感じです。

■Unityちゃん情報
 ホームページ   :http://unity-chan.com/
Sign_o_s
 ポリゴン数    :約16000(△ポリゴンで)
 表情       :ブレンドシェイプ
 モデルパーツ数  :21
 ノード数     :約140
 マテリアル数   :9
 ドローコール   :42
 ボイス、モーション、専用シェーダー有

といった感じ。
とても魅力的にできていると思います。
これだけの物を無料で使えるのは素晴らしいですね。
(使う場合はHPの規約を熟読しましょう)

ただ、PCで使うならともかく、
モバイルとして考えるとかなり贅沢仕様。
特にノード数とドローコールがヤバめな感じです・・・。
例えば、胸に8本のノードを使ってたりします(;´Д`)
※以下、モバイル使用基準で書いてるので注意。

単体で出すならともかく、他の要素も絡んでくるゲームだと
正直、厳しいです。
また、後髪を下から見ると穴開いてたり、
モーションが(質的に)微妙だったりと個人的に残念な点も。
無料ですし、今後のアップデートに期待でしょうか。

ちなみに、ゲームで使うためにちゃんと削減するなら、
・テクスチャ、マテリアルを可能な限り統合
・ポリゴン数の削減(できればLODも)

・ウェイトは1頂点2ウェイトまでに
・ノード数削減
・モデルパーツの統合
・ブレンドシェイプの最適化

辺りをやる必要があるかと思いますが、
そこまでやると数日レベルでかかると思うので、
今回は検証という事で、モデルパーツの統合のみ。
これだけでもドローコールは42⇒18
に。
(顔周りだけはブレンドシェイプの関係で統合してません)

Unity

また、肝心のモーションに関しては、
デフォルトのままでは既存のモーションが使えないので、
ちゃんと使えるように、Mayaで以下を調整
・ノード名を変更
・ノードの階層を若干変更
・キャラクターの標準サイズをMaya上で既存キャラクターに合わせる
・ウェイトコピー

※メカニム使ってなくて独自に制御してるのでちょっと手間多いです
※Mayaではシェーダーが上手く読めなかったので、マテリアル再設定しました。

後、Unity上で以下を設定
・マテリアルを変更
 ※シェーダーがLightProbeに対応してなかったので
・後髪のみJointを設定
・キャラクター制御周りのスクリプト追加


結果、動きました。
Unity2

これで人型の既存モーションは全て適用でき、
自分で操作する事も、敵として出す事もできるようになりました。
Unityちゃんはもしかしたら、
製品でも何処かで使うかも?しれません。
詳しくは全く考えてないですが、おまけ要素的な感じで。

ちなみにAndroid(NW-Z1050)にビルドしてみた所、
40f程度出ました。
Unity3

とはいえ敵が密集して戦ってると30f切りますが・・・。
本格的に削減すれば行けそうですね。

さて、制作の方に戻りますか。


・・・一応ライセンス表記しとこう。

ユニティちゃんライセンス

本コンテンツは、『ユニティちゃんライセンス条項』に基づいて公開・配布されるものです。
本コンテンツをご利用される場合は、ユニティ・テクノロジーズ・ジャパン合同会社が
定める『
キャラクター利用のガイドライン』をお守りいただく必要があります。

2014年3月10日 (月)

【Unity Tips】マテリアルアニメーション問題、補足情報

4.3x以降でマテリアルのアニメーションが適応されない件ですが、
どうやらAnimationではなくAnimaterの方で動かせば動く模様。
M氏情報サンクス。

なんだこれ差別かっヽ(`Д´)ノ!

・・・まぁ普通に不具合だとは思いますが。
とはいえ、シンプルな要素こそAnimationを使わせて欲しい所。

基本はメカニムにメインは移行していくだろうとは思いますが、
Animationはシンプルな挙動の場合は使いやすいので
ちゃんと残して欲しい・・・。

2014年3月 9日 (日)

【Unity Tips】 マテリアルをTRSで操作するスクリプトを作ってみた

どうも4.3あたりから上手くマテリアルのプロパティのアニメーションが
動作しない
ようなので、
オブジェクトのTRS(移動、回転、スケール)とマテリアルのパラメータとの
動作を連動させるスクリプトを作成してみました。

これで移動、回転、スケールの値にアニメーションを付ければ、
マテリアルのアニメーションができるように。

といってもMayaからマテリアルアニメをインポートする時のスクリプトの拡張です。
固有名称のプロパティに関しては、List型で自由に増やせるようになっており、
TRSどの値にも適応させられるようにしました。
エディター拡張すればもう少しスマートな見た目にできますが、
面倒なのでこの程度でいいかなと(´▽`*)

あと、アニメーション付ける時の事を考慮して、
[ExecuteInEditMode ()]をクラスに付けてます。
これにより、実行中でなくても、動的にパラメータに干渉できるので、
確認しつつ付けられます。というかそうしないと色々無理です(;´Д`)

とりあえずはUVの位置、スケールは思ったより直感的に動かせるので、
これはこれで、案外アリかもなぁと思いましたが、
カラー情報はちょっと混乱しそうかもと思いました・・・。

List型にしないで、指定数を限定すればTRSとリンクさせなくても、
直接アニメーションも付けられますが、
念の為、拡張性優先としてこの形にしてます。

一応、1つのオブジェクトのTRSで指定しきれない場合は
別のオブジェクトを追加で生成すればどんな量でも対応できるようにしてますが、
所詮は力技なので、色々悩ましい所ですね・・・。理想とは程遠い感じです。

実際、パーティクルとか使わないで、
モデル自体のマテリアルを操作したい時くらいしか
使わないと思うので、この程度で置いておこうかと思います。

明日からはゲーム自体の製作の方に戻るぞーヾ(゚ω゚)ノ゛

より以前の記事一覧

Twitter等

  • にほんブログ村 ゲームブログ ゲーム制作へ

メールフォーム

  • 直接コンタクト取りたい方はこちらからどうぞ

サイト内検索
ココログ最強検索 by 暴想