
動く足場と落ちるプレイヤー(ゲーム作りで出会う現象)
☆初めに
閲覧していただきありがとうございます。
今回は私がゲーム制作をしていた時に遭遇した現象について
記事にして皆さんにお届けしようかと思います。
日本語がおかしい部分もあるかもしれませんが何卒よろしくお願い致します。
※記事の中に埋め込んだ画像は一部ネットから取ってきたものがあり、警告や違反などに関していた場合その部分を変える(消す)可能性がありますのでご了承ください。
・どんな現象?
→ 移動床と落ちる自機
ファイナルソードのアレを想像して頂ければわかりやすいかと思います。

・ではどうすればいいか?
今回私がゲーム制作してた時にUnityで遭遇したためUnityでの対処法としての一例として紹介させていただきます。
※やり方は人それぞれありこれが答えというわけではありません。むしろ私が書いた解説より簡単で分かりやすい物が多々ありますので軽い参考程度で閲覧してください。。
→状況の再現(下準備編)
まずは簡単にですが下記の画像をご覧ください

ゲームオブジェクト、「Ziki」(プレイヤー)、「A」(床)、「B」(動く床)、「C」(床)を用意します。
「Ziki」には当たり判定と重力を
「A」「B」「C」には当たり判定を設定してください。
※画像ではわかりやすいように「Ziki」を緑色、「B」を赤色にしています。
また「C」はわかりやすくするために置いただけなのでつくらなくても問題ありません
次に簡単なスクリプトでいいので「Ziki」に移動するスクリプトを
「B」に動く床のスクリプトを設定してください。
これにて簡単にではありますが動く足場と落ちるプレイヤーの現象の再現ができたかと思います。

→状況の打破
結果から申しますと「Ziki」と「B」が当たった時に
「Ziki」を「B」と同じ速度だけ移動させればいいのです。

※操作が下手なため「C」に乗り切れず落ちかけていますが解決
・最後に…
→実際に移動床を組み込む際は…
今回は大雑把に簡単に移動床とその床と合わせて移動するプレイヤーを実装しましたが、あくまでも大雑把な実装なのでこの後に記載する、プログラムをそのままコピペすることはお勧めできません。
あくまでも参考程度にご利用してください。
またほかにも移動床とプレイヤーを親子関係にして移動床を実現させるなど方法は多々あるかと思いますので皆様もぜひ移動床に挑戦してみてください。
→今回の作ったプログラム
「Ziki」に入れたスクリプト(C#)
public class Ziki00 : MonoBehaviour
{
private float speed = 5.0f;
private float speed_B = 2.5f;
// Update is called once per frame
void Update()
{
// Dキー(右移動)
if (Input.GetKey(KeyCode.D))
{
transform.position += speed * transform.right * Time.deltaTime;
}
// Aキー(左移動)
if (Input.GetKey(KeyCode.A))
{
transform.position -= speed * transform.right * Time.deltaTime;
}
}
void OnCollisionStay(Collision collision)
{
//ゲームオブジェクトBに触れたら(一緒に移動)
if (collision.gameObject.name == "B")
{
transform.position += speed_B * transform.right * Time.deltaTime;
}
}
}
「B」に入れたスクリプト(C#)
//Bの動く床スクリプト
public class Idou_yuka_B : MonoBehaviour
{
private float speed = 2.5f;
// Update is called once per frame
void Update()
{
transform.position += speed * transform.right * Time.deltaTime;
}
}
宣伝
ハンドメイドサイト「minne」にて作品を販売しています。
気に入ったものがあったりした場合は購入していただけると嬉しいです。
以上で記事を終わらさせていただきます。