Unityでゲーム開発をしていて慣れてくると、いろいろなアニメーションに挑戦したくなると思います。
まずは第一歩として、動く床を作ってみましょう。
準備として動かしたい床オブジェクトにMoveFloorというタグを付けておきましょう。
C#
public Vector3 defaultScale = Vector3.zero;
void Start ()
{
defaultScale = transform.lossyScale;
}
void Update ()
{
Vector3 lossScale = transform.lossyScale;
Vector3 localScale = transform.localScale;
transform.localScale = new Vector3(
localScale.x / lossScale.x * defaultScale.x,
localScale.y / lossScale.y * defaultScale.y,
localScale.z / lossScale.z * defaultScale.z
);
}
void OnCollisionEnter(Collision collision) {
if (transform.parent == null && collision.gameObject.tag == "MoveFloor") {
var emptyObject = new GameObject();
emptyObject.transform.parent = collision.gameObject.transform;
transform.parent = emptyObject.transform;
}
}
void OnCollisionExit(Collision collision){
if (transform.parent != null && collision.gameObject.tag == "MoveFloor")
{
transform.parent = null;
}
}
OnCollisionEnterで、動く床に乗った時に床とプレイヤーを親子関係にしています。
そして、OnCollisionExitで、床から離れたら親子関係をなくしています。
最初の方で、scaleをいじっているのは、親子関係になるとサイズまで影響されてしまうので、動く床に乗った瞬間プレイヤーが変な形になってしまうことがあるのですが、最初にScaleを取得しておいて、固定をすることによって影響されるのを防いでいます。
このスクリプトをそのままアタッチすれば動くはずです...