02 «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.» 04

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Unity】ダイアログ出してみた!with NGUI 

おはようございます!
おなじみ坂内です。

花粉やばいっす!なんか今日はそれほどじゃないんですが、土日がやばかった!
スマホから半径1mの花粉をやっつけてくれるアプリないですかねー
え?物理的にむりだって?了解!

本日はダイアログについてです。
ゲームにダイアログって必須ですよね?
でもネットで調べても素敵な方法が出てこない!(OnGUIのダイアログは色々でてきますが)
ということで、NGUIでダイアログつくってみよー的な感じです。

まずは、ボタンとダイアログの背景の絵を用意します。



んで、これをAtlasに組み込んでおきます。

Scriptも作っておきます。
MainControl ⇒ ボタン押したときの処理と、ダイアログから戻ってきた時の処理
DialogControl ⇒ ダイアログにて、OK・NOを押した時の処理

とりあえずこんな感じで考えてみましたが、どうなんだろう。
DialogControlにてボタン押した時の処理をするのが一番早いんだけど、そうなるとDialogControlという名前に違和感が・・
ってことで、処理はMainControlの方に置いておきます。(こんな感じでいいのかな?)

で、中身はまずはこんな感じ。
【MainControl】
using UnityEngine;
using System.Collections;

public class MainControl : MonoBehaviour {

public GameObject dialogPref;

/// ボタン押下時ダイアログオープン.
public void OpenDialog(){
Instantiate(dialogPref);
}

/// ダイアログにてOKが押された場合の処理.
public void Proc(){
Debug.Log("OKの処理されました!");
}
}

【DialogControl】
using UnityEngine;
using System.Collections;

public class DialogControl : MonoBehaviour {

/// OKボタン押下時処理.
public void Click_OK(){
CloseDialog();
GameObject.Find("Test").GetComponent().Proc();
}

/// NOボタン押下時処理.
public void Click_NO(){
CloseDialog();
}

/// ダイアログ抹殺.
void CloseDialog(){
Destroy(gameObject);
}
}

どうでしょう。
こんな感じで動きそうじゃないっすか?

んじゃボタンを作ってみましょう。

一番上のオブジェクトの名前を「Test」にして、このオブジェクトにMainControlをつけておきます。
DialogControlのClick_OKメソッドで呼ばれるオブジェクトになります。
ここで、mainPanelというPanel。dialogというPanelを用意しました。
mainPanelにはボタンを追加しています。
で、ボタンの方にはNGUIのUIButtonMessageやUIButton等のコンポーネントをつけて、MainControlのOpenDialogを呼ぶようにします。
では、次にダイアログを作っていきます。
ダイアログはPrefabにして置いておくのでどんな形でもいいですが、今回はPanelを用意し、その下にダイアログの背景、ボタン等を作成します。(ここが不明なんですが、ふつうはどうするんだろう?)

メインパネルの表にダイアログが来ないといけないので、mainPanelのDepthは「0」にdialogのDepthは「1」にしています。
で、dialogの子供にバックグラウンドとボタンを二つ作成しました。
とりあえず押してる感を出すため、各ボタンにはNGUIのUIButtonScaleをくっつけてみます。
その後、dialogのオブジェクトにはDialogControlをつけます。


ちゃんとOKボタンとNOボタンに先ほど作ったDialogControlのメソッドをくっつけてやります。

ここまでできたら、ダイアログ側のオブジェクト完成です!

ダイアログ側の処理が全部作れたら、プレハブにしちゃいます。

プレハブ化が終わったら、ヒエラルキーからdialogをけしまーす。

そしたら次は、Testオブジェクトに付けたMainControlの「public GameObject dialogPref」で用意したdialogPrefに先ほど作成したdialogのプレハブをつけます。

はい、出来上がり。
さて実行してみましょう。

しーーーーーーん。
あれ?
ボタンにコライダーつけていませんでした!
大事です!忘れないでください!(おれだけ?

で、実行をすると・・・・
画面が灰色に!!!


なんか、dialogの場所がおかしいです!
プレハブ化する前の場所ってCameraの下でしたよね。
ってことで、Cameraの子供にダイアログが来るようにコードを修正します。

【DialogControl】
using UnityEngine;
using System.Collections;

public class DialogControl : MonoBehaviour {

/// オブジェクトの初期設定.
void Start(){
gameObject.transform.parent = GameObject.Find("Camera").transform;
gameObject.transform.localScale = new Vector2(1f,1f);
}


/// OKボタン押下時処理.
public void Click_OK(){
CloseDialog();
GameObject.Find("Test").GetComponent().Proc();
}

/// NOボタン押下時処理.
public void Click_NO(){
CloseDialog();
}

/// ダイアログ抹殺.
void CloseDialog(){
Destroy(gameObject);
}
}


でやってみると・・・・・


でた!!
OKボタン押すとちゃんとメッセージでるし、NOボタン押すとメッセージでないでダイアログが閉じます!

って感じでダイアログ使ってます。色々間違えているような気もするが・・・・
正しいというか、一般的なダイアログってみなさんどうしてるんでしょうか?
何か方法ございましたら、喜んで聞きます!

以上、本日の記事でした!
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】ResourcesからSpriteファイルを取得 

こんにちは。
大坂です。

すごく簡単な話題ですが、
Spriteを使用していろいろやってる時にプログラムで動的にSpriteを変更したい時とかに使いました。

まず使用するファイルを「Resources」フォルダを作成しその中に入れます。
Spriteの「Sprite Mode」が「Single」の場合は以下の方法で取得できます。
 Resources.Load<Sprite>("TestSprite");
※「TestSprite」はSpriteのファイル名です。

また、「Resources」フォルダ以下にさらにフォルダを作成し、「Resources/Test」等とした場合
 Resources.Load<Sprite>("Test/TestSprite");
で取得できますね。

短いですが以上となります~。

ではまた来週!

Category: 開発日記(Unity)

tb 0 : cm 0   

【アプリの宣伝】LunaticDungeonそろそろ公開!? 

ハーイ 坂内デ~ス。

ハルシオンシステム起死回生のRPG「ルナティックダンジョン」名前も決定し、開発後半に入りました!

12月から開発しており、他のアプリに手を出すこともできず。。。。ようやく!よーーーやく!めどがついてきました!

当初の予定では3月中にリリースでしたが、色々ありまして4月にずれ込みます!

前々から話に挙げていた、トレハンRPGとなっております。

ほんと、起死回生の1本ですので、皆様是非ダウンロードを!!!!そろそろやばいです!

普通に楽しめる1本となっております!!(現在デザインの入れ込みと調整作業に没頭中

ルナティックダンジョン。「ルナダン」です!

もう少しで完成です!皆様よろしくお願い致します!

とりあえずタイトルだけ・・・・(開発中のため変わる可能性もあり



こんな感じです。

では皆様、リリースまで待って下さい!楽しみにしてくだい!お願いします!orz

Category: Androidアプリ紹介

tb 0 : cm 1   

【Unity】Unity4.3の2Dツールでアニメーション ② 

こんにちは~。大坂です。
なんか3月も後半に入ったのに、今日は寒いですね!
横浜の最高気温9度ですね・・・。

先週の予告?通りにアニメーションの続きを。

先週の木曜の状態でAnimatorを見るとこんな状態になってますね。


これだと1個アニメーションしか実行できないので、先週と同じ手順でchar_2の分もアニメーションを作ります。


Animatorにアニメーション「char_1」「char_2」の2個になりますね。


このまま実行しても、char_1のアニメーションしか動かないのでchar_1とchar_2を紐づけをしないといけません。
char_1を右クリックして「Make Transition」を選択し、矢印をchar_2に引っ張ってあげるだけです。


char_1からchar_2に向かって線が付きますね。
この線をクリックするとInspectorが以下のようになってます。


この状態でそのまま実行すると、char_1のアニメーションが1回動いた後にchar_2のアニメーションが動き続けます。
回数で制御したい場合はそのまま「Exit Time」の回数を変更すすればいいですが、ほかの判定でアニメーションを変更するためにAnimatorの下のほうにある「Parameters」を使用します。


これですね。「+」をクリックするとリストが出てきます。選べるのは「Float」「Int」「Bool」「Trigger」ですね。
今回は「Bool」を使用したいと思います。




名前は適当にTestBoolにしてます。
追加したらまたchar_1からchar_2への線をクリックし、「Exit Time」のところをクリックすると作成した「TestBool」が選択できるので選択し、条件を「true」にしておきます。


この状態で実行し、Parametersの「TestBool」の横のチェックボックスにチェックを入れるとchar_2のアニメーションに変わります。が、チェックを外してもそのままchar_2のアニメーションのままですね。
なので、今度はchar_2を右クリックして「Make Transition」を選択し、矢印をchar_1に引っ張ります。


こんな感じですね。
char_2からchar_1に向かっている線をクリックし、条件を「TestBool」「false」にします。


これで実行した後にParametersの「TestBool」の横のチェックボックスをオンオフするとchar_1とchar_2のアニメーションを切り替えることができますね!

コードでこのチェックを入れ替えるのは以下のような感じです。

 GameObject.Find("char_1_0").GetComponent<Animator>().SetBool("TestBool", true);

とするとアクセスできるので、あとは好きなように制御するだけでアニメーションの入れ替えができます。

Animatorの上にあるLayerについては今のところ使っていませんが、アクションゲームなどを作るときに複雑なアニメーションを作成するのに役立つみたいです。
詳細はマニュアルを・・・【ごめんなさい。】【ごめんなさい。】

今週はこんなところで~
ではでは~ノシ
(´-`).。oO(さて来週は何について書くか・・・)

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】アセットのご紹介と簡単な使い方? 

こんちは!坂内っす。

Unity開発者としては初心者なため、あまり新しい技術が分からないまま時が過ぎていきます!
ってことで、今日は使ってみてよかったアセットについてご紹介と説明をば!

今回ご紹介するアセットは、こちら!
「EasyMaskingTransition」
https://www.assetstore.unity3d.com/#/content/8734

あれです、画面切り替え時とかに使えるフェードアウトインのアセットでございます。
色々な形のフェードが使えてなんと1000円(だいたい)!
どんなものかができるのかは、デモのほう見て頂くといいと思います!

使い方も簡単!

Assets内にあるオブジェクト「EasyMaskingTransition」⇒「Presets」⇒「EMTransition - Color」をヒエラルキーにドラッグアンドドロップ!



さぁ実行してみましょう!





ほらできた!

フェードの形を変えたい場合は、こちらを変更します。
ヒエラルキーにおいたオブジェクトの「Color Transition」のSelectから変更したいTextureに変更するだけ!
今回はLineというやつを選んでみました。




という感じで、簡単にフェードの種類が変更できます。

また、フェードが終了した際にメソッドを呼びたい場合は、以下のようなメソッドを作成し、ヒエラルキーにおいたEMTransition - Colorにくっつけます。

Test.cs
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

void OnTransitionComplete(){
Debug.Log("フェード終わり");
}

}






という感じで、フェードアウト終了も取れます!

これでフェード周りは色々使えそうですよね!

ということで、アセットの紹介でした!
(たぶん こんな感じでつかえるのかな?)

アデュ~!

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】Unity4.3の2Dツールでアニメーション 

こんにちは~。
大坂です。

花粉が飛びまわっていて一回くしゃみが出ると止まらなくて困る時期がやってきましたね。
昨日ゲームやってたらおかげで死にました…orz

さて今日は、Unity4.3の2Dツールでアニメーションです。
ネタがないので短めです。ごめんなさい。

使う素材は相変わらず臼井の会様のキャラチップです・・・。

まず用意した画像をそのままTexture等のフォルダに入れます。



入れた画像をすべて選択して、InspectorにあるTextureTyepを「Texture」から「Sprite」に変更



Spriteに変更し、別の場所をクリックすると以下のウィンドウが出てくるので「Apply」を押すと
「Sprite」に変わります。



つぎに「Sprite」にしたファイルを「Hierarchy」にドラッグ&ドロップ。



これで画像がゲーム画面のほうにも出ます。(サイズが小さかったので5倍に拡大してます。)



最後に、アニメーションさせたい組み合わせのファイルを選択して「Hierarchy」にいれた「char_1_0」にドラッグアンドドロップ。



以下のウィンドウが出てくるので、適当な名前を付けて保存。



あとは再生ボタンを押すだけでアニメーションされますね。
あとはプレハブにでもしておいて使用したい時に呼び出せば簡単に使えますね~。

次回はAnimatorの設定周り・・・かな?

ではではまた来週~。

Category: 開発日記(Unity)

tb 0 : cm 0   

【完成までやります】Unity4.3の新機能の「Unity2D」を使ってゲームを作ろうに参加!(勉強会) 

またまたこんにちは、坂内です。
事後報告!!
3月4日に行われた勉強会「【完成までやります】Unity4.3の新機能の「Unity2D」を使ってゲームを作ろう」(以下参照)に参加してきましたYO!名前長いっ!

http://cloud.gmo.jp/news/14030400.html

今までUnityにて2Dでゲーム作ってきましたが、ずっとOrthello2DFrameworkを使用しており、UnityのSprite機能を使っていませんでした。
ってことで、Spriteを使用した簡単なゲームの作り方なぞをちょこっと触ってきました。

中でも勉強になったなーって思ったのはアニメーション周りですかね。
ColliderとかRigidbodyはなんとなくわかっていたのですが、アニメーションが簡単にできるってのが驚きでした。
ただ、今週月曜日に書いた記事のように、たくさんの絵が必要なアニメーションはどうすればいいのか未だに分からず!

あ、それと講師のユニティ・テクノロジーズ・ジャパンの山村様が、勉強途中の小話で私の書いたブログの記事についてお答えして頂いたのには驚きでした!
ちなみにこちらの記事についてです。http://halcyonsystemblog.blog.fc2.com/blog-entry-80.html

部品をシーンにして読み込むのと、プレハブにして読み込むのはどっちがいいの?
シーンにしてApplication.LoadLevelAdditiveにしても、PrefabにしてInstantiateしても見た目同じですよねーって話です。

で、答はというと「どっちでもいい」でした。(たしか!
ただし、シーンにしてApplication.LoadLevelAdditiveをした場合は、次の画面の描画処理(Updateとかのタイミングなのかな?)にならないと反映されないので、追加してすぐにそのオブジェクトを使用したりする場合は、プレハブにしてInstantiateにする必要があるとのことでした。
(なんか記憶があやしいが!)

ということで、あんまりこういう勉強会に参加していませんでしたが、少しずつでも参加していこうという心意気!

アデュ~!

Category: Androidアプリ紹介

tb 0 : cm 0   

【Unity】Unityにおけるアニメーションについて 

おはようございます!坂内っす!

本日はUnityにおけるアニメーションについてと題しまして、ただの疑問を書いてみようかと!!!

ソシャゲーとか作ってる企業さんからしたらアタリマエのことかもしれませんが、ゲーム作成初心者として疑問がござる!
アニメーションってどうしてるの!??

【2D】
キャラが歩くアニメーションとかはパラパラアニメと同じ要領でいいっすよね?
【3D】
Mecanimとか使って、3Dオブジェクト動かすんですよね?

簡単なScale変更や、移動等のアニメーションはUnityのAnimationで問題はなさそうですよね。
ただ・・・・
(全て2Dゲームについての質問です)
今回疑問に思ってるのが、エフェクト系です。
タイトルがかっこよく光ったり、必殺技のアニメーションだったり、カットインだったり色々ありますが・・・・

必殺技とかのアニメーションはやっぱりパラパラ方式?
キャラ毎に必殺技アニメーションとか用意するってなると、ファイル量が半端なくなりますよね。1つの技で派手なやつだと絵が数百枚必要になると思うんですが・・
そこは、やっぱり基本パーティクルなんですかねー

あと、タイトルのロゴをかっこよくアニメーションさせてるのって、あれはなんだろう・・・
swfが組み込めるからまさかのFlash!?違いますよね~ 透過できませんし・・・ でもパラパラの方式だと2秒のアニメーションで120枚(60fps)とかいっちゃいますし・・・う~ん、謎がいっぱいです!!!

ほんっと、世の中のゲームがどう作られているのか不思議がいっぱいですね!

なんだろうこれ!疑問しかないじゃん!ってことで、詳しい方!コメントよろしく!という他力本願なブログでした!

Category: 開発日記(Unity)

tb 0 : cm 0   

【Unity】Spriteを白くフラッシュさせてみた 

こんばんは~。
大坂です。

ネタがなさ過ぎてこんな時間になってしましました・・・orz

Sprite画像とか設定すると、もともとのColorが白(255,255,255,255)で指定されているため、
白く光らせるのにちょっと困ってしまったので、ネタに。

今回はシェーダーをカスタマイズして対応しました。

ここからbuilt-in shadersをダウンロード。

解凍したファイルの「\builtin_shaders-4.3.4\DefaultResources\Sprites-Default.shader」を開く。
(4.3.4のをダウンロードしてみましたのでダウンロードするバージョンによってパスは変わると思います。)

1行目を

Shader "Sprites/Default" から Shader "Sprites/Custom"


などに変更
次に66行目にある fixed4 frag(v2f IN) : COLOR を

fixed4 frag(v2f IN) : COLOR
{
return tex2D(_MainTex, IN.texcoord) * IN.color;
}

から

fixed4 frag(v2f IN) : COLOR
{
fixed4 emi = tex2D (_MainTex, IN.texcoord) * _Color;
emi *= IN.color;
emi.rgb = emi.rgb*2+max(fixed3(0,0,0),IN.color.rgb-0.5)*2;
return emi;
}


と変更します。

ファイルを別名(Sprites-custom.shaderなど)に変更して保存し、
UnityにShaderのようなフォルダを作ってそこに入れておきます。

あとはこのシェーダーをSpriteに設定し、
Spriteの色を変更すると黒~テクチャの色~白と色の変更ができるようになります。
色の指定 )
 黒(0,0,0,255)
 テクスチャの色(127,127,127,255)
 白(255,255,255,255)

ここまでできてしまえばあとはプログラムでiTweenのValueToなどで色の変更を指定すれば白く光ったような感じにできますね!

一応その部分のコードも。



using UnityEngine;
using System.Collections;

public class FlashSpriteController : MonoBehaviour {

SpriteRenderer spriteRenderer;

public void FlashSprite(bool critical) {
spriteRenderer = GameObject.Find({オブジェクト名}).GetComponent();
iTween.ValueTo(gameObject,
iTween.Hash("from",1f,"to",0.5f,"time",0.5f,"easetype",iTween.EaseType.easeInBounce,
"onupdate","Flush","oncomplete","EndFlush"));
}

void Flush(float value){
spriteRenderer.color = new Color(value,value,value,1);
}

void EndFlush(){
spriteRenderer.color = new Color(0.5f,0.5f,0.5f,1);
}
}


これだけですね!簡単です!

ではではまた来週!ノシ

Category: 開発日記(Unity)

tb 0 : cm 3   

【Unity】シーンについて 

月曜の顔 坂内っす。

うわ~ あっという間に2月が終わりましたね!
もう3月とか!3月とかっ!大事だから2回言いました。

今頃?って話題になりますが、初心に戻ってシーンについてちょこっと書いてみようかと。

シーンって基本的には1画面1画面分けるのが当たり前ですよね?

でも一部一部のパーツを使いまわしたい時、Prefab使います?シーン使います?
その辺の棲み分けが未だにわかっていません!

たとえばこんな画面。



こんな画面あった時、情報1の箇所はPrefabにします?シーンにします?

ってことで、Prefabにした場合は普通にInstantiateすればいいんですが、
シーンにした場合は、Application.LoadLevelAdditiveを使います。

画面1の中で、

Application.LoadLevelAdditive("情報1");



これで一応画面1に情報1がつきます。

でもこれって、Hierarchyを見ると、PrefabにしてInstantiateしたのと同じ状況になるんですよね。
分担して開発がしやすいのが強み?
特に意味はなく、LoadLevelAditiveでもPrefabでもどっち使ってもいいよ~ってこと?

まぁ どっちでも動くからいいかな・・・的な感じで開発しちゃってます!

どなたか詳しい方説明を!!

明日、GMO様のUnityハンズオン参加してきます。
頭茶色いの俺っす。
絡みたいかた是非絡んできてください!!

アデュ~!

Category: 開発日記(Unity)

tb 0 : cm 0