Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

Unity5 メモ19

続いたので続けます

  • FixedUpdate()を使うとコマ落ちするように見える場合
    Edit > Project Setting > Time の Fixed TimestepがFixedUpdate()が呼ばれる間隔になっている。
    デフォルトでは0.02になっているが、これでは位置の更新が50FPSなので、この値を小さくするとコマ落ちが軽減される。

  • Terrainコンポーネントの編集
    f:id:q7z:20150818202508p:plain
    ① 地形を隆起させる。
    ② 地形を侵食させる。Flattenボタンを押すと指定した標高にリセットされる。
    ③ 地形をならす。
    ④ 地面のテクスチャを設定する。
    Edit Textures...からAdd Texture...で左側のテクスチャを設定すると、Terrain全体がそのテクスチャで覆われる。
    もう一枚テクスチャを追加し、そのテクスチャを選択してTerrain上でドラッグすると、ペイントツールのように描いた部分だけそのテクスチャになる。
    なお、Assets > Import Package > Emvironmentに、これらの編集に最適化された素材が入っている。
    ⑤ 木を生やすツール。Edit Trees...のAdd Treeで、木のプレハブを選択し、Terrain上でドラッグする。
    ⑥ 草を生やすツール。Edit Details...のAdd Grass TextureからDetailTextureを選択(GrassFrondなど)し、Terrain上でドラッグする。
    ⑦ 各種設定画面。Terrainのサイズなどを変更できる。

  • 水の表現
    Assets > Import Package > Emvironmentをインポートし、
    Standard Assets > Environment > Water > Water > Prefabs 内に水面のプレハブがある。

  • Camera.mainの参照先
    GameObjectにMainCameraのタグがついているものがCamera.mainで呼び出される。

  • 画面全体のグレースケール・セピア化などのエフェクト
    Assets > Import Package > Effects をインポートし、
    Standard Assets > Effect > ImageEffects > Scripts 内にさまざまなスクリプトがあるので、
    これをカメラにアタッチすると、そのカメラから見た映像にエフェクトが付与される。

  • 水中カメラ表現
    水中にカメラが入ったときに視界がやや水色がかったようにしたい場合、
    水中判定用のキューブを置き、そこに当たったら水中、抜けたら水から抜けたととらえてプログラムすることができる。
    カメラにコライダーをセットしてIsTriggerをオン、キューブ側はMesh RendererをオフにしてRigidbodyをアタッチしUseGravityをオフ、
    BoxColliderのIsTriggerをオンにした状態で、以下のスクリプトを記述すると実現できる。

public void OnTriggerEnter(Collider other)  
{  
    // under water  
    if (other.CompareTag("MainCamera"))  
    {  
        RenderSettings.fog = true;  
        RenderSettings.fogColor = new Color(0, 0.7f, 0.7f, 1);  
        RenderSettings.fogMode = FogMode.Linear;  
        RenderSettings.fogStartDistance = -90;  
        RenderSettings.fogEndDistance = 250;  
    }  
}  
  
public void OnTriggerExit(Collider other)  
{  
    // exit water  
    if (other.CompareTag("MainCamera"))  
    {  
        RenderSettings.fog = true;  
        RenderSettings.fogColor = new Color(0.7f, 0.7f, 0.7f, 1);  
        RenderSettings.fogMode = FogMode.Exponential;  
        RenderSettings.fogDensity = 0.003f;  
    }  
}