前提・実現したいこと
落下するボールをお椀でキャッチする2DゲームをUnityで作成中です。
ボールは画面上部からランダムに自然落下(重力で)してきます。
お椀をボールの落下地点にドラッグして動かしてボールをキャッチするのですが、
キャッチしたボールがお椀の中で動き回ったり、
お椀を素早く動かすとお椀の中からボールが上に飛んでいってしまいます。
キャッチしたボールをお椀の中で動かないように、かつ
お椀の中からボールが飛んでいってしまわないようにする方法を知りたいです。
試したこと
キャッチしたボールに対して:
- Physics Material 2D の Friction:0 Bounciness: 0
- スクリプトを無効にする
- velocityをゼロにする
- drag値を高くする
- Rigidbody2DのBodyTypeをDynamicからkinematicに変更する
- Rigidbody2Dを外す
- コライダーを外す
- カゴオブジェクトの子オブジェクトにする
- キャッチしたボールの位置をお椀の相対座標で指定する
※上記は同時に試したわけではないです
c#
1void OnTriggerEnter2D(Collider2D collider) 2{ 3 ball = GetComponent<BallController>(); 4 ball.enabled = false; 5 6 GetComponent<Rigidbody2D>().velocity = Vector2.zero; 7 8 GetComponent<Rigidbody2D>().drag = 50f; 9 10 GetComponent<Rigidbody2D>().isKinematic = true; 11 12 Destroy(GetComponent<Rigidbody2D>()); 13 14 cc2d = GetComponent<CircleCollider2D>(); 15 cc2d.enabled = !cc2d.enabled; 16 17 GameObject owan = GameObject.Find("owan"); 18 transform.SetParent(owan.gameObject.transform); 19 20 Vector3[] owanRow4HoldPositionList = new[] 21 { 22 new Vector3(-0.37f, 0f, 0f), 23 new Vector3(-0.12f, 0f, 0f), 24 new Vector3(0.12f, 0f, 0f), 25 new Vector3(0.37f, 0f, 0f), 26 new Vector3(-0.37f, 0.3f, 0f), 27 new Vector3(-0.12f, 0.3f, 0f), 28 new Vector3(0.12f, 0.3f, 0f), 29 new Vector3(0.37f, 0.3f, 0f), 30 new Vector3(-0.37f, 0.6f, 0f), 31 new Vector3(-0.12f, 0.6f, 0f), 32 new Vector3(0.12f, 0.6f, 0f), 33 new Vector3(0.37f, 0.6f, 0f), 34 35 }; 36 transform.localPosition = owanRow4HoldPositionList[0]; 37 38}
お椀に対して:
- unity Hierarchy では
親:Owan(Rigidbody2D: kinematic, Box Collider 2D: isTrigger: on)
子:LeftWall(Physics Material 2D の Friction:0 Bounciness: 0)
子:RightWall(Physics Material 2D の Friction:0 Bounciness: 0)
子:BottomWall(Physics Material 2D の Friction:0 Bounciness: 0
補足情報(FW/ツールのバージョンなど)
MacBook Pro (Apple M1)
Unity 2020.3.10f1