上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
tht20141028.png
選択シーン完成

uGUI(unity4.6beta20)のボタン
InputでいうGetKeyDown()みたいなのが無かった(見つからなかった?)から実装した

//----------------------------------------------------------------------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

namespace Shiso{
public class ButtonMgr : MonoBehaviour {
static ButtonMgr m_Instance;
public static ButtonMgr Instance
{
get
{
if(m_Instance == null)
{
m_Instance = FindObjectOfType();
if(m_Instance==null)
{
GameObject obj = Instantiate(Resources.Load("Shiso/ButtonMgr")) as GameObject;
m_Instance = obj.GetComponent();
}
}
return m_Instance;
}
}

public class Element
{
public Element(Button btn){this.btn=btn;}
public Button btn;
public bool clicked = false;
}
List m_Buttons = new List();

void LateUpdate()
{
m_Buttons.ForEach (delegate(Element obj) {
obj.clicked = false;
});
}

public bool Clicked(Button btn)
{
Element r = m_Buttons.Find (delegate(Element obj) {return btn==obj.btn;});
if (null != r)
return r.clicked;
else
Add (btn);
return false;
}

void Add(Button btn)
{
if(null == btn)
return;
Element r = m_Buttons.Find (delegate(Element obj) {return btn==obj.btn;});
if (null != r)
return;

UnityEngine.Events.UnityAction action = () => {ClickEvent(btn);};
btn.onClick.AddListener(action);
Element element = new Element (btn);
m_Buttons.Add (element);
}

void ClickEvent(Button btn)
{
Element r = m_Buttons.Find (delegate(Element obj) {return btn==obj.btn;});
if (null != r)
r.clicked = true;
}
}
}
//----------------------------------------------------------------------

シングルトンの規定クラス作れってツッコミは無しで!

準備
ButtonMgrを付けたゲームオブジェクトをプレハブ化してInstantiateできるようにしておく
呼び出し
if(Shiso.ButtonMgr.Instance.Clicked(button))
{
hogehoge;
}

//
uGUI配置したシーンが開けなくなるバグの解決方募集!(unity4.6beta20)
スポンサーサイト
20141020213622.jpg



         デ  ス  マ  開  幕
        n:       ___      n:
        ||    / __ \    .||
        ||    | |(゚)  (゚)| |    ||
       f「| |^ト    ヽ  ̄ ̄ ̄ /   「| |^|`|
       |: ::  ! ]      ̄□ ̄     | !  : ::]
       ヽ  ,イ  / ̄ ̄ハ ̄ ̄\  ヽ  イ

//----------------------------------------------------------------------
20141021theworlddebug.png
ザ・ワールド デバッグ中

theworld案
色々試したけど反転すると見づらかったので、ただのグレースケールになった
エフェクト適用部分を円状に広げたりしたいけど、時間に余裕ができてからにしよ
時よ止まれ!(切望)

特定のオブジェクトだけイメージエフェクト(ポストエフェクト)の効果を適用しない方法(の一例)
20141022描画
ステンシルバッファを使おうとしたけど、他のシェーダーの変更が必要な点と
ステンシル判定の条件分岐の方法がわからなかった点でボツ
今回の手法ならモデルのレイヤーを切り替えるだけでエフェクトを変更できる

//----------------------------------------------------------------------
Standard AssetsのImageEffectをAddComponentしたときにヌルポる対策
(イメージエフェクトに限った話ではないけど)
テラシュールブログさんが詳しく書いてくれていたので紹介
テラシュールブログ AddComponentに気をつけろ!

20141021ぬるぽ
こんな感じにしてスクリプト名とシェーダー名を対応させておけば大丈夫!
//追記
Findで呼ぶものはResourcesフォルダ下に置かないと実行ファイルにしたときに見つからなくなります。


//----------------------------------------------------------------------
thhs_prot.png
次作はハクスラ系かスマブラ系を予定しています!
現在収入無しの貯金45万!東方タクティクス売れてくれ頼む!
テラシュールウェアさんと


Brent Farrisさんの動画を参考に(part10くらいまであります)

unity_hellonetwork.png

キャラクターの同期とチャットが1日でできた
Unityすごい!
よく考えなくてもDX9は時代遅れですわ
Unityしよ

unity_buildsettings.jpg
いろんなプラットフォームで動かせるし

AMD独自グラフィックスAPI「Mantle」の詳細が明らかに。理論上はGeForceのMantle対応も可能!?
次々現れる新しい技術も勝手に取り込んでくれるでしょう

Unityしよ

//

chip_lighting.jpg
左がライティングなし(Ambient1)
右がUnity標準のディレクショナルライトとシャドウマップ 

左のように繋ぎ目を隠し 且つ右のようにシャドウマップを適用するのが理想

繋ぎ目が目立つ問題はマップチップをやめて1つのステージモデルにするれば解決するが
地形変化やステージのランダム生成が出来なくなるので却下

(あっ これは自分でシェーダー書くやつですわ)

//追記
ディファードライティングならライティングの陰影をつけつつ繋ぎ目も消せるな

//追記
Deferred Lighting はライトと影が最も厳密にレンダリングされます。もし多くのリアルタイムライトを使いたいのであれば最適でしょう。ただ、これはハードウェアがある一定のレベルが必要なので、Unity Pro 専用で、 Mobile Devices ではサポートされていません。
あ、はい。
Unity Pro ¥157,500
DxLibのモデル操作はハンドルを使って行うんだけど

int handle = MV1LoadModel("aaa.x");
MV1DrawModel(handle);
MV1DeleteModel(handle);

int型はあかんやろ

handle = 12345;//こんなん出来たらあかんやろ

というわけで

class Handle
{
public:
Handle() : h(-1){} //ハンドルの初期値は-1にする
operator int() const { return h; } //dxlibの関数で使いやすくするため
void Set(int n){h=n;}
int Get(){return h;}
private:
void operator = (const Handle& src);//代入禁止
int h;
};

こんなん作った、Setterで明示的に操作することで
「意図せずにハンドルの値を書き換えていた」ということは無くなる

Handle handle;
handle.Set(MV1LoadModel("aaa.x"));
MV1DrawModel(handle);
MV1DeleteModel(handle);

operator=をprivateにしているので代入しようとするとコンパイルエラーにできる
handle = 12345;//エラー
operator intを実装しているのでhandle.Get()としなくて良い

もう1つ問題点

handle = MV1LoadModel("aaa.x");
handle = MV1LoadModel("aaa.x");
handle = MV1LoadModel("aaa.x");
MV1DeleteModel(handle);

こんな事をするとメモリが爆発するので
適当な関数を作ってハンドルを引数として渡して
ハンドルの値をチェックするようにした

bool Hoge(ss::Handle* pHandle, const char* szPath)
{
//ハンドルがモデルを持っていたら解放を試みる
if(*pHandle == -1)
{
MV1DeleteModel(*pHandle);
}

//読込、ハンドル設定
pHandle->Set(MV1LoadModel(szPath));

//成否
if(*pHandle == -1)
return false;
return true;
}

こんな感じ

Handle handle;
Hoge(&handle, "aaa.x");
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。