Programming Serendipity

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

Unity5 メモ24

  • 衝突した場所にParticleSystemを生成
public void OnCollisionEnter(Collision coll)  
{  
    var p = Instantiate(collParticle, coll.contacts[0].point, Quaternion.identity) as ParticleSystem;  
    Destroy(p.gameObject, p.duration);  
}  
  • 下からも水面が見えるようにする
    Standard Assets > Environment > Water > Water > Prefabsに水面があるが、これ1つだけだと下から見たとき水面が見えない。
    これを複製し、X軸かZ軸を180度回転させることで、下からでも水面を表現することができる。
    ただし、両面描画されると反射などの描画が不自然になるため、水中に入ったら表面をオフで背面をオン、水から出たら表面をオンで背面をオフにすることで自然な見た目になる。

  • プレイヤーの向きを加味した、現在位置からターゲットまでの角度の算出
    矢印など、目標への角度を示す* ガイドするオブジェクトにアタッチすることを想定

// Y座標は統一する  
target.y = player.transform.position.y;  
// 位置と目標の単純な角度を求める  
float angle = Vector3.Angle(player.transform.position - target, Vector3.forward);  
Vector3 cross = Vector3.Cross(player.transform.position - target, Vector3.up);  
if (cross.z > 0)  
    angle *= -1;  
// プレイヤーの向きを加算する  
angle += player.transform.rotation.eulerAngles.y;  
// 向く方向のrotationを取得  
Quaternion desiredAngle = Quaternion.Euler(90, angle, 0);  
// slerpで徐々に近づける  
transform.rotation = Quaternion.Slerp(transform.rotation, desiredAngle, Time.deltaTime * 2);  
  • ゲームが実行中かどうか判別
    if(Application.isPlaying) // ...