daeで書き出す時に骨のアニメーションも含めて書き出す方法

http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&id=22694909
でfbxConverterをダウンロード
Mayaとかc4dでfbx2013で一回書き出してから
上記のfbxConverterでそのfbxをimportしてdaeExportすると
骨のキーフレームも入った状態で書き出しが出来る
f:id:shinobigiken:20171018155026p:plain

スプライトシートの使い方(パーティクル)

まずAEとかで動画を作って連番で書き出し

https://github.com/Kavex/GlueIT
をdlしてGlueIT 1.06.exeを開く

Addでファイルを追加(連番ファイルを全部選択して追加)

Number of Columnsで行列の数を入れる
100毎の連番だったら10*10なので10と入れる

GlueITでプレビュー

Saveで保存
f:id:shinobigiken:20171020121043p:plain


次にunity
先ほど作成したスプライトシートをimportしてマテリアルを作る
マテリアルのシェーダはParticles > AlphaBlendedに指定
マテリアルにスプライトシートの画像をアタッチ

次にパーティクルを作って
TextureSheetAnimationにチェックを入れて、
XとYに先ほどのスプライトシートのグリッド数を入れる
f:id:shinobigiken:20171017181825p:plain
Rendererに作ったマテリアルを入れると完成
f:id:shinobigiken:20171017181838g:plain

CharacterControllerとRigidbody

Rigidbodyはvelocityで動かしても2フレ程度
CharacterControllerより反応が遅い
こういう場合はFixedUpdate関数を使うと同じタイミングで反応した

衝突判定を一瞬無くす

例えばhashigoとmyCharaのレイヤーを作って
それぞれのオブジェクトに振り分けてから
コルーチンに下記のように書く

//hashigoレイヤーの番号を変数layerHashigoに入れる
int layerHashigo = LayerMask.NameToLayer("hashigo");
//マイキャラのレイヤーの番号を変数layerMyCharaに入れる
int layerMyChara = LayerMask.NameToLayer("myChara");
//Physics.IgnoreLayerCollisionで2つのレイヤーのコライダーの衝突判定を無効化
Physics.IgnoreLayerCollision(layerMyChara, layerHashigo,true);
//3秒待ってstage0をリロード
yield return new WaitForSeconds(0.5f);
//Physics.IgnoreLayerCollisionで2つのレイヤーのコライダーの衝突判定を無効化
Physics.IgnoreLayerCollision(layerMyChara, layerHashigo,false);

c4dからunityの座標

c4dからunityにimportする時のサイズ
c4dでcubeを100cmで作るとunityのデフォルトcubeと同じ大きさになる

position
c4dの100cmはunityの1

タグをremoveして設定し直してもビルドしたらエラー

タグを一回removeしてから名前を変えて再度設定しても
unity上では出来るけどビルドしてプレイしたらエラーになったりした

一回removeしたらUndefinedっていうのになるっぽい。
unity再起動で直る時もあるって海外の掲示板で誰かが言ってたけど、
上手くいかなかった。

強引な解決策として一回全部packageにして
新しいプロジェクトにimportすることで解決したけど
根本的な解決になってない。
どっかにキャッシュされてるんだろうけど
また時間がある時に調べたいと思う。

敵がマイキャラを等速で追いかけるスクリプト

考え方
このスクリプトは敵のほうにつけるとしたら
publicにマイキャラのオブジェクトを入れて
マイキャラの位置を取得
マイキャラから敵の位置を引いて距離を出す
その距離をnormalizedで正規化して
その値を
0.01f以上は1
ー0.01f以下は-1
にして自分(敵の)positionに足す

ちなみにこれはx軸でしか追いかけてこない

//マイキャラのオブジェクトを取得
public GameObject myCharaObj;
//マイキャラと敵の距離を入れる変数
private Vector3 difference;


//マイキャラを追いかける処理
//マイキャラと自身(敵)の位置の差(距離)を取ってnormalizedで正規化して変数differenceに入れる
difference = (myCharaObj.transform.position - this.transform.position).normalized;

//もし自身(敵)のxとマイキャラのxの距離が0.01以上の場合
if (difference.x >= 0.01f)
{
        //difference.xを1にする
        difference.x = 1.0f; 
}
//もし自身(敵)のxとマイキャラのxの距離が-0.01以下の場合
else if (difference.x <= -0.01f)
{
        //difference.xを-1にする
        difference.x = -1.0f;
}
//それ以外は0にする
else
{
        difference.x = 0.0f;
}
    //自身(敵)の位置にdifference.xを除算したものを毎フレーム足す
    //これで等速でキャラの位置まで敵が移動する
    transform.position = new Vector3(transform.position.x + difference.x/15, transform.position.y, transform.position.z);