2015年8月30日日曜日

キャラクター移動の基礎

 ⒈アニメーションの話 

 オブジェクトのスピードが一定以上の時、「走る」アニメーションを
 SetFloat・・はTrigger、Boolとかでも可 

  private Animator animator;

    // Use this for initialization
    void Start () 
    {
        animator = GetComponentInChildren<Animator> ();
    }


  // Update is called once per frame
    void Update () 
    {
        animator.SetFloat ("Speed"20f);
    }




⒉使い回せそうな移動スクリプトの話


CharacterController controller;
    public float MoveSpeed = 7f;
    public float RotationSpeed = 360f;

    // Use this for initialization
    void Start () 
    {
        controller = GetComponent<CharacterController> ();
    }
    
    // Update is called once per frame
    void Update () 
    {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");

        var direction = new Vector3 (

              h * MoveSpeed
              0f
              v * MoveSpeed);
        if(direction.sqrMagnitude > 0.01f)
        {
            Vector3 forward = Vector3.Slerp(

                  transform.forward
                  direction
                  RotationSpeed * Time.deltaTime);

            transform.LookAt(transform.position + forward);
        }
        controller.Move (direction * MoveSpeed * Time.deltaTime);


2015年8月8日土曜日

iTweenでアニメーション

Asset Store


iTweenでNPCが巡回する


NPCオブジェクトにI Tween Event スクリプトを
Nameのところにイベント名を入力
x, y, z の座標にチェック 数字を入力
time で上の座標まで移動する時間を指定
looptype でloopの仕方を指定

iTweenEvent.GetEvent(gameObject,"イベント名").Play();
iTweenEvent.GetEvent(gameObject,"イベント名").Stop();
スクリプトではこれで制御可能


ActionScript入門Wikiで

2015年8月6日木曜日

QuickSetObjectPlacerを使ってみた

Asset StoreのQuickSetObjectPlacerを使ってみた

  1. Asset内の”_QuickSet”のprefabをScene上に配置
  2. セットしたいObjectをScene上に
  3. ”_QuickSet”のAdd an object group を押す
  4. Add a game object を押す。そこに、連続して配置したいオブジェクトを選択
  5. 左に出るチェックボックスにチェックを
  6. START OBJECT PAINTING を押す。

 これでScene上クリックで、そこに選択したオブジェクトを連続配置が可能。


この場合、Hierachy上に個別に配置される。グループでまとめたい時は⑥を押す前にGroup Name と Group Parent を設定してやるといい。


この方法で配置した場合、マウスクリックの位置になるため、バラバラの座標になる。
だから、Edit>Snap Settings で一挙座標を整数値に変えることが出来る。

が、Vキーを押して微調整する方が早いかも

Lightingについて

Lightingで遊ぶ

Sample Assetsをインポート
https://www.assetstore.unity3d.com/jp/#!/content/21064



1.

Scene全体を真っ暗にして・・
SpotLightにLightShaftのスクリプトをつけるだけ
 この方法はDirectionalLightとSpotLightのみ(普通にHaloにチェック入れればOK)

 真ん中に黒い線が走ってしまうのはなんでだろ?
スクリプトのAttenuation curveにチェックを入れて、少しずつ光が弱くなるようにした。
 これで少しごまかせたが…







2.


こんな感じの壁のScene作成


DirectionalLightにLightShaftのスクリプトを付けて、ちょうど窓から射し込むように配置





















結果・・・


これみる感じ、黄色い四角に入ったところしかボリュームライトは出来ないみたい。

⒊IBL&LightProveのこと

・Staticにしたオブジェクトは間接光の影響を受けるが、動的のものは影響を受けない。
そのためにLightProveを設置したら動的のものにも間接光をあてることができる。

・ライトを使うよりも超軽いため、LightProbeで代用する
ただ、影や光沢といった表現を行うことができない


 できてる・・・?

IBL


DirectionalRightを削除して、オブシェクトを全部staticに。IBLのみのライティング
動的オブジェクトにこのライトをつけるには、LightProveを配置する。


上のこの方法は、屋内では使えない。本来暗いはずの室内にもIBLの影響が出てしまうから
こういう時、RefrectionProveを使う。
参考:http://tsubakit1.hateblo.jp/entry/2015/03/17/233423

RefrectionProveはレンダリング結果から反射や色をきめる。
なお、RefrectionProveの設定がBakeの場合はStaticのものしか影響されない

IBLのみ
RefrectionProve使用時
Bloom.csとScreenSpaceAmbientOcclusion.csをMain Cameraに
   これは…陰と陽を強くするものだろうか…?
   まだよく分かってない


テラシュールブログさん:http://tsubakit1.hateblo.jp/entry/2015/05/15/003739
kode80SSRのをやってみた
Assets内の「SSR.cs」「SSR.cs.meta」「Resourcesファイル」を入れれば、できるみたいだったが、なぜか「SSR.cs.meta」を入れられなかったので 元のプロジェクトを開いて作ってみた。
床に赤球が反射している。床のマテリアルのSmoothnessの数値を変更すれば、反射度を変更できる。

2015年8月5日水曜日

Shader学んだことまとめ

再生させたらオブジェクトの色を変える

プロジェクト内でやったこと
・オブジェクト一つの色を変更
・Sceneに存在する全ての色を無色に(カメラにスクリプトを)
 transform.GetComponent<Camera> ().SetReplacementShader (nightvisionShadernull);
  で全てのシェーダーを差し替えできる


ソナーのようなことができるAssetを使ってみた

・オブジェクトを配置して、Asset内に入っていたスクリプトをカメラにつけた

結果… 赤い線が走っているだけのように見えた。
・インターバルの感覚、スピードの調整
・ソナーを出す時に、画面全体の色を黒く。機械視点で見ているような
・カメラを複数置く

とかすれば、ソナーっぽくなるかな?今度やってみる

2015年8月3日月曜日

綺麗なScene切り替え

テラシュールブログさんのhttp://tsubakit1.hateblo.jp/entry/20140505/1399289078やってみた。

FirstSceneには
 ・cube1つ
 ・Create Empty(GameController)に作ったFadeというスクリプトを
          スクリプト内のLodeLevelには次のScene名(SecondScene)を
 ・Inport Packageに入っている、FadeCameraを
SecondSceneには
 ・Cube2つ

Fade.cs
using UnityEngine;
using System.Collections;

public class Fade : MonoBehaviour 
{        
    void Update ()
    {
        if (Input.GetKeyDown (KeyCode.Space)) 
        {
            LoadLevel ("ScondScene");
        }
    }

    void LoadLevel (string name)
    {
        float time = 1// フェードアウト時間
            
        // フェードアウト
        FadeCamera.Instance.FadeOut (time, () =>
                                     {
                
                // フェードアウト完了後の処理(画面は真っ暗)
                Application.LoadLevel(name); // シーン遷移
                
                // フェードイン
                FadeCamera.Instance.FadeIn (time, () =>
                                            
                                      {
                    
                    //  フェードイン完了後の処理
            });
                
            });
            
        }
        
    }




ただ、自分の設定が悪いのか微妙だなー

Lightingについて

前回の続き


Bounce Intensity




Directional LightのBounce IntensityをMAXに。そして、赤床と白い壁のオブジェクトのstaticにチェックを入れる。
そしたら、赤色がうっすら反射している。(形がおかしく明らかに不自然だが…)

この場合、staticが付いていないオブジェクト(動的)には反映されない。そこでライトプローブを使用して、間接光もプローブに焼き付ける。


ライトプローブとは

光源情報を先にベイクしておくことで(ライトの当たり具合を事前に焼き込む)、リアルタイムでもモバイルで動かせるレベルで光源情報を適用させることができる技術。
テラシュールブログ さん

Karasuのアプリ奮闘記さん

のがわかりやすい





ちょっと実験・・・

こんな感じでライトプローブグループを配置


ライトプローブグルーブなし

ライトプローブグルーブあり
うーーーん・・・ありの方は、ワールド全体が赤っぽくなって、白いオブジェクトも赤っぽくなってるけど、金色カプセルには影響なしか…(わかりにくいだけ?)




AseetStoreのGame Jam Menu Templateを使って見る

AseetStoreのGame Jam Menu Templateを使って見る


1.Prefabを二つ配置。
2.StartOptionスクリプトのChangeSceneにチェックをいれる。そしたら、BuildしたSceneの1に移る。

簡単にタイトル画面が作れるからいいですね。・・・地味ですが

2015年8月2日日曜日

Lux2.0で遊んでみる

Lux2.0で遊んでみる

雨を作ってみる

床のオブジェクトに、Setup Lux2.0のスクリプトを。以下数字は適当に…


床のマテリアルはこんな感じ…

これだけで、

こんな感じに。

Water FX Pack というAssetを組み合わせると良い感じに雨降っているようになる!
ただこのアセットの雨の、FX_Spit(水しぶき)は微妙? ないほうがいいかも

土砂降りにしたい時はprefabを複製して、同じ場所に配置すればいい





これで、LuxでIBLができるかも。Lux2.0でのやり方はまだよく分からない。

2015年8月1日土曜日

Title Scene

タイトルScene作り

スクリプト

void Update () 
    {
        if(Input.anyKeyDown)
        {
            Application.LoadLevel("MainGameScene");
        }
    
    }

で何を押してもMainGameSceneに飛ぶようになった。


文字

Canvasの設定の中に「Screen Space - Overlay」「Screen Space - Camera」「world space」
という項目がある。それぞれ順番に、Unity-GUIのように最前面カメラへの描画 カメラから見たUI ワールド座標のカメラ となるらしい。

フリーテキストをダウンロード。サイズを指定



 文字を点滅させる
アニメーションでTextの色のa値を変換
1.AnimationClipとAnimatorを登録
2.AnimationとAnimationController
3.キーフレームで色を変えてクリップを(赤い録画マーク?を押してからじゃなきゃキー打てないんだ。初めてしった…)



背景

は、スカイボックスでゲームの雰囲気に合うのを設定した。けど、静止画なのはなんかイヤだったので、回転させてみた。

transform.Rotate (0f0.2f0f);

MainCameraをこれでゆっくり回転させただけ。

もっと詳しくやりたい方は、↓の方のブログを

【Unity】SkyBox(背景)を簡単に360度回転させる方法


学んだことをメモするだけ


動く床を作りたい

public class AutoMoveScript : MonoBehaviour 
{    
    Vector3 BasePosition;

    private float offset = 30f;

    // Use this for initialization
    void Start () 
    {
        BasePosition = transform.position;
    }
    
    // Update is called once per frame
    void Update () 
    {
        //sinカーブ 掛ける値を大きくすると周期が短くなり、小さくすると周期が長くなる。
        transform.position = BasePosition + Vector3.forward * Mathf.Sin(Time.time + offset);
    }
}

最初Update内を、transform.position = transform.position + ・・・

ってやってたが、移動する床の中心がズレた。それもそのはず、自分の座標に足されていくからそうなるよねー



セーブポイント(チェックポイント)を作りたい

public class CheckPointCS : MonoBehaviour 
{
    public GameObject target;
    public ParticleSystem savefin;
    public ParticleSystem respawn;

    Vector3 checkposition;

    private bool checkable = false;

    // Use this for initialization
    void Start () 
    {
    
    }
    
    // Update is called once per frame
    void Update () 
    {
        if (checkable
        {
            if (Input.GetKeyDown ("1")) 
            {
                target.transform.position = checkposition;

                respawn.Play();
            }
        }
    
    }

    void OnTriggerEnter(Collider collider)
    {
        if(collider.tag == "Player")
        {
            checkable = true;

            checkposition = transform.position;
            Debug.Log("getcheck");

            savefin.Play();
        }
    }
}

プレイヤーがセーブポイントのトリガーにあたったら、その座標を取得。1のキーが押されたら、取得した座標に出現する。
 おまけでパーティクルを使って、セーブポイントに着いた時、セーブポイントに出現した時を演出


パーティクル

スクリプトから再生

public ParticleSystem 変数名;
で、パーティクルを保持

変数名.Play();
で、再生。

収束エフェクトの作り方

収束エフィクト(チャージしているような)
  1. ShapeをSphere(球)に
  2. Emit from ShellをONに。球面からパーティクルが出るようになる
  3. Start SpeedをRadiusのマイナスの値にする。マイナスの数字を入れることによって逆方向に。この場合球の中心に
  4. Rateを100に(パーティクル発生頻度)
  5. Render ModeをStretched Billboard(形状を変化させることができる)
  6. Length Scaleを0.5に。縦長にすることができる