前提・実現したいこと
Unity 1日目の超絶初心者です。
ブロック崩しを作っているのですが、
プレイヤー(板)にボールが当たっても跳ね返ってくれなくて困っています。
試したこと
プレイヤーを左右に移動させる上で、壁を突き抜けて移動出来てしまうのを防ぐために
プレイヤーが左右の壁に接触していたら、それ以上いけない、みたいなことを
やろうとプレイヤーにRigitBodyを追加したら跳ね返らなくなりました。
RigitBody無くせば跳ね返るのですが、下記コードみたいな感じで突き抜け防止
したかったので困ってます。
そもそもこんなやり方しないとか、こうすると楽みないな方法があれば
教えていただきたく、よろしくお願いいたします。
また、まだ設定1つ1つの意味を全然理解していないのでどこかいじる必要のある設定
があれば、意味についても教えていただけると助かります......
該当のソースコード
一応、以下が壁抜け防ぐために書いたコードです。
html
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerControl : MonoBehaviour 6{ 7 8 public float speed = 1.0f; 9 private bool moveFlag_left = true; 10 private bool moveFlag_right = true; 11 12 // Start is called before the first frame update 13 void Start() 14 { 15 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 if (Input.GetKey(KeyCode.LeftArrow)) 22 { 23 if(this.moveFlag_left == true) 24 { 25 this.transform.position += Vector3.left * speed * Time.deltaTime; 26 } 27 } 28 else if (Input.GetKey(KeyCode.RightArrow)) 29 { 30 if(this.moveFlag_right == true) 31 { 32 this.transform.position += Vector3.right * speed * Time.deltaTime; 33 } 34 } 35 } 36 37 private void OnCollisionEnter(Collision collision) 38 { 39 if (collision.gameObject.CompareTag("Wall_Left")) 40 { 41 this.moveFlag_left = false; 42 } 43 else if (collision.gameObject.CompareTag("Wall_Right")) 44 { 45 this.moveFlag_right = false; 46 } 47 } 48 49 private void OnCollisionExit(Collision collision) 50 { 51 if (collision.gameObject.CompareTag("Wall_Left")) 52 { 53 this.moveFlag_left = true; 54 } 55 else if (collision.gameObject.CompareTag("Wall_Right")) 56 { 57 this.moveFlag_right = true; 58 } 59 } 60}
補足
<プレイヤーのRigitBodyの設定>
質量:1
抗力:0
角抗力:0
重力:なし
補間:なし
衝突判定:非連続的
位置、回転全部固定
<ボールのRigitVBody設定>
質量:1
抗力:0
角抗力:0
重力:あり
補間:なし
衝突判定:非連続的
位置:y固定
回転:全固定
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/24 06:40
2020/06/24 06:45