他のオブジェクトに対して、特定の距離まで近づけば、くっついて繋がるしくみを作ってみましょう。
Cube(プレーヤー)を操作し、Sphereに最接近したタイミングで、固定ジョイントをONに。
つながったSphereは、Cubeと一緒に動きます。
関連記事:
特定エリアに近づくと追いかけてくる
範囲内に入ればオブジェクトを落下させる
Fixed Jointを解除してオブジェクトを落とす
一定距離から外れたら実行する
Hingi Jointを使った振り子の動き
Cube(ジョイントされる側)
CubeとSphereを作成します。
Cubeの位置を、X:-3、Y:4に変更しました。
2つのオブジェクトがこのように配置されています。
Cubeにリジッドボディを追加し、以下の項目を設定します。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3; transform.position = new Vector3 ( transform.position.x + dx, 4, transform.position.z + dz ); } } |
高さ4の位置で、十字キーによる操作が可能になります。
Sphere(ジョイントする側)
固定ジョイントは、Sphereのほうに追加します。
Sphereを選択し、コンポーネントを追加 > 物理 > 固定ジョイント
FixedJoint と RigidBody の2つのコンポーネントが追加されます。
続いて、JointOn.csを作成して、Sphereに追加します。
JointOn.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JointOn : MonoBehaviour { public GameObject target; void Update() { Vector3 cube = target.transform.position; float dis = Vector3.Distance(cube,this.transform.position); if(dis < 4.1f){ SphereGravity(); } } void SphereGravity() { GetComponent<Rigidbody>().useGravity = true; FixedJoint fj = this.gameObject.GetComponent<FixedJoint>(); fj.connectedBody = target.GetComponent<Rigidbody>(); } } |
ゲームプレイしてみましょう。
距離4.1まで近づけば、FixedJointが有効になり、Sphereを保持したまま動いていきます。
関連記事:
特定エリアに近づくと追いかけてくる
範囲内に入ればオブジェクトを落下させる
Fixed Jointを解除してオブジェクトを落とす
一定距離から外れたら実行する
Hingi Jointを使った振り子の動き