反対側の壁に向かて斜めにジャンプをくり返しながら、壁を登っていく仕組みを作ってみましょう。
ジャンプで壁に触れれば、落ちることなく、その場に留まります。
再び逆方向にむかってジャンプ。これを続けながら、壁を登っていきます。
関連記事:
斜めにジャンプする
ジャンプで壁に触れると引っ付く
キャラクターをジャンプさせるしくみ
触れたらひっつくオブジェクト
クリックすればオブジェクトが浮上するしくみ
ジャンプの方向をランダムにする
反対方向へ飛び続けながら登る
まず最初に、壁をつくっていきましょう。
PlaneとCube2個を作成。
Cubeはそれぞれ、Wall1、Wall2と名前を変えて、位置とサイズを変更。
Wallという名前でタグを付けます。
続いて、プレーヤーをつくりましょう。
ubeを作成し、名前をPlayerにして、位置を変更します。
マテリアルで色をつけ、リジッドボディを追加。
回転を固定にすべてチェックを入れます。
ゲームビューではこのように見えています。
JumpScript.csを作成し、Playerに追加します。
JumpScript.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JumpScript : MonoBehaviour { Rigidbody rb; private float input; private float speed; private float upForce; private bool isStop; private Vector3 colPosition; void Start() { speed = 3; upForce = 5; rb = GetComponent<Rigidbody>(); } void Update() { input = Input.GetAxisRaw("Horizontal"); rb.velocity = new Vector3(input*speed, rb.velocity.y, 0); if(Input.GetKeyDown("up")) { isStop = false; rb.velocity = new Vector3(rb.velocity.x ,upForce, 0); } if(isStop) { gameObject.transform.position = colPosition; } } void OnCollisionEnter(Collision other) { if(other.gameObject.tag == "Wall") { isStop = true; colPosition = this.transform.position; } } void OnCollisionExit(Collision other) { if(other.gameObject.tag == "Wall") { isStop = false; } } } |
ゲームプレイしましょう。
ジャンプすれば、壁にくっつきます。
反対側に向かって壁に当たれば、落下せずに、またその場にくっついてストップ。
これを続けながら壁をよじ登っていきます。
関連記事:
斜めにジャンプする
ジャンプで壁に触れると引っ付く
キャラクターをジャンプさせるしくみ
触れたらひっつくオブジェクト
クリックすればオブジェクトが浮上するしくみ
ジャンプの方向をランダムにする