Unityリフト移動
Unityでつまずきやすいポイントのメモ。
移動するリフトに乗っても、プレイヤーは移動しない問題。
床だけが移動するリフトというのも面白いけど、一緒に動きたい場合は、
リフトに乗っている間だけ親子関係にするとよい。
子供のオブジェクトは、親の動きと同期する。
↓の記事が詳しく載っていました。
Unityで動く床を実装するときにハマる罠とその解決方法
これの応用で、接地している間だけ、リフトの形状を変えたり、動きを変えたりもできる。
タグの種類を増やしてって、リフトの種類も増やせる例を作ってみた。
コードは乗る側、タグはリフト側で設定。
void OnCollisionEnter(Collision col)
{
//接触した相手のタグが"LiftA"場合、その子供になる
if (col.gameObject.tag == "LiftA")
{
transform.SetParent(col.transform);
}
//接触した相手のタグが"LiftB"場合、相手のサイズを変える
if (col.gameObject.tag == "LiftB")
{
col.transform.localScale = new Vector3(20, 1, 5);
}
}
void OnCollisionExit(Collision col)
{
//接触が終わったとき元に戻す
if (col.gameObject.tag == "LiftA")
{
transform.SetParent(null);
}
if (col.gameObject.tag == "LiftB")
{
col.transform.localScale = new Vector3(5, 1, 5);
}
}