生成したPrefabが、坂道を上っていくように、スクリプトを作成してみましょう。
Sphereが斜面を転がらず、頂上までずっと上って動いていきます。
関連記事:
着地すれば前進移動する
オブジェクトに触れていれば動く
ジャンプで壁に触れると引っ付く
触れている相手に一定間隔で力を加える
坂道を上り続けるスクリプト
Planeを作成し、簡単な坂道をつくります。
Sphereを作成して、リジッドボディを追加します。
SphereMove.csを作成し、Sphereに追加します。
SphereMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { private float speed = 10.0f; private bool isGround; private Rigidbody rb; void Start() { rb = gameObject.GetComponent<Rigidbody>(); } void Update() { if(isGround) { transform.Translate(0, 0, speed * Time.deltaTime); } } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Plane") { isGround = true; rb.isKinematic = true; } } void OnCollisionExit(Collision other) { if(other.gameObject.name == "Plane") { isGround = false; rb.isKinematic = false; } } } |
Sphereをプロジェクトビューにドラッグ&ドロップし、Prefab化しましょう。
Sphereの元データは削除します。
ボール出現のスクリプト
続いて、Prefabを生成するスクリプトを作りましょう。
空のオブジェクトを作成します。
BallDrop.csを作成し、GameObject(空のオブジェクト)に追加します。
BallDrop.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallDrop : MonoBehaviour { public GameObject ball; void Update() { if (Input.GetMouseButtonDown(0)) { Instantiate(ball,new Vector3(0,5,0),Quaternion.identity); } } } |
Ballのフィールドに、Sphereのプレハブデータを入れます。
ゲームプレイして、画面をクリックしてみましょう。
Sphereが生成されて、坂道を上っていきます。
関連記事:
着地すれば前進移動する
オブジェクトに触れていれば動く
ジャンプで壁に触れると引っ付く
触れている相手に一定間隔で力を加える