朝陽をおかずに飯を食え

アプリ開発チーム「マツケソフト」(一人)の開発ブログだったり開発ブログでなかったりします。絵もかきます。Unity / Android な話題が多め。

シフトシューターをアプカジュ様にレビューしていただきました!!アプカジュすごい!

アプカジュ様にシフトシューターのレビューをしていただきました!!(拍手!

とても素晴らしい記事なので是非読んでみてください。詳細は下記リンクですが、アプカジュ様本当すごいと思ったので、つらつら書いてみます。


「【激ムズ対戦STG】シフトシューター」徹底やりこみレビュー | ゲームアプリはアプカジュ

 

続きを読む

Live2D で遊んでみた

Live2D という、2次元の絵をまるで生きているかのようにうごかすソフトの無料版で遊んでみました。

公式サイトは、こちら → Live2D

 

チュートリアルを見つつなんとなく組んでみました。

今回犠牲になったのは、マツケソフト最新作「シフトシューター」のメインキャラ、通称シフ子です。

f:id:matsukesoft:20150226015131p:plain

 

もともと Illustrator で組んでいたので、パーツをばらして保存します。

f:id:matsukesoft:20150226015430p:plain

大体こんな感じ。ゴーグルは邪魔だったので、Live2D 上で省きました。

3時間ほどごにょごにょすると、こんな感じのアニメが作れるようになります。

 

f:id:matsukesoft:20150226015802g:plain

非常に眠そうですね。

 

さらに、表情なんかもころころ変えられます。ついでに背景も足してみました。

f:id:matsukesoft:20150226020150g:plain

ウインクもあくびも思いのままっすわ。ぐへへへ。

 

でも、表情を大きく変えるよりずっとジト目で見られているほうがなんか心に来ることに気づいた。(ほぼ性癖の暴露。

 

f:id:matsukesoft:20150226020416g:plain

パーツの切り分けとパラメータの割り振りがすんごい面倒だけど、

2次元の絵が3D っぽくぬるぬる動くインパクトはすごい。

今度は Unity 上で動くランタイムも試してみる所存。

 所存ったら所存。

カメラがぶれぶれだったりガクガクになる現象への対策

Unity でカメラの注視点として、プレイヤーキャラの GameObject のTransform を指定することはままあると思います。

カメラの更新とプレイヤの更新をスクリプトの Update() でやっていると、
カメラがぶれぶれ(ガクガク?)になってしまうことがままあります。

これは、各オブジェクトの Update() 関数が毎回同じ順番で呼ばれるわけではないということに
起因しているっぽいです。

Update の順番が入れ替わると、突然カメラが 2 フレーム分進んだり戻ったりするので、
そりゃガクガクになります。

どうやって対策するのか、それは、LateUpdate() を使うです。

LateUpdate() は Update() よりあとに呼ばれることが保証されるので、

プレイヤーの Update() で position を更新して、
カメラの LateUpdate() で その position を見てやればいいわけです。

これで、ガクガクカメラからおさらばなのかも。

ほか、無理やり毎フレームオブジェクト同士をくっつけている場合に離れちゃう!とかいう場合に
使えるかも。

時間で自動的にGameObjectが消える(Destroy)スクリプト

エフェクトみたいな使い方で Prefab のインスタンス作ってあとは時間で自動的に消えてほしい時が結構あります。
そのための、 autoDestroy.cs というスクリプトです。
消したい GameObject にくっつけて life で 秒数を指定するだけで、
勝手にオブジェクトがデストロイです。
オブジェクトデストロイヤーです。

以下サンプルコード

using UnityEngine;

using System.Collections;

public class autoDestroy : MonoBehaviour {

  public float life = 3.0f;

  // Update is called once per frame

  void Update () {

    life -= Time.deltaTime;

    if(life < 0)

    {

      Destroy(this.gameObject);

    }

  }

}

 

テキストやオブジェクトをフェードイン・フェードアウトさせるスクリプト

unity で フェードインフェードアウトさせるスクリプトサンプルです。

fade.cs というファイルを作ってまるっとコピペして guiText を持ったオブジェクトのコンポーネントに追加してつかーさい。

今回は guiText を対象にしていますがそこは自由にいじればいいと思います。
フェードイン、フェードアウトの時間と IN 状態 OUT 状態の時間をそれぞれ指定できます。


using UnityEngine;
using System.Collections;

public class fade : MonoBehaviour {
public float fadeInTime = 1.0f;
public float inTime = 1.0f;
public float fadeOutTime = 1.0f;
public float outTime = 1.0f;
public enum FADE_STATE {
FADE_IN,
IN,
FADE_OUT,
OUT
}
public FADE_STATE fadeState = FADE_STATE.FADE_IN;

public float currentTime = 0.0f;
private Color textColor;

// Use this for initialization
void Start () {
textColor = this.guiText.color;
}

// Update is called once per frame
void Update () {

switch (fadeState)
{
case(FADE_STATE.FADE_IN):
currentTime += Time.deltaTime;
if(currentTime > fadeInTime)
{
currentTime -= fadeInTime;
fadeState = FADE_STATE.IN;
textColor.a = 1.0f;
}else{
textColor.a = currentTime / fadeInTime;
}
break;
case(FADE_STATE.IN):
currentTime += Time.deltaTime;
if(currentTime > inTime)
{
currentTime -= inTime;
fadeState = FADE_STATE.FADE_OUT;
textColor.a = 1.0f - currentTime / fadeOutTime;
}else{
textColor.a = 1.0f;
}
break;
case(FADE_STATE.FADE_OUT):
currentTime += Time.deltaTime;
if(currentTime > fadeOutTime)
{
currentTime -= fadeOutTime;
fadeState = FADE_STATE.OUT;
textColor.a = 0.0f;
}else{
textColor.a = 1.0f - currentTime / fadeOutTime;
}

break;
case(FADE_STATE.OUT):
currentTime += Time.deltaTime;
if(currentTime > outTime)
{
currentTime -= outTime;
fadeState = FADE_STATE.FADE_IN;
textColor.a = currentTime / fadeInTime;
}else{
textColor.a = 0.0f;
}

break;
}
this.guiText.color = textColor;
}
}