Unityで3Dぷよぷよを作っています。
実現したいこと
・ぷよぷよの枠と見立てているオブジェクトにぷよが触れたときにサイドの壁だったら壁にめり込まずにそこで左右の移動はできなくする
(例)右にぷよが移動して右の壁に当たったら壁にめり込まないで右には行けなくする(左も同様)
・下に着地したときピタっと止まる
発生している問題・エラーメッセージ
現状左右の壁に当たった時、半分くらいめり込んでいけなくなります
言葉じゃ説明が難しいので、YouTubeに限定公開として動画をアップロードしてあります。
動画➡https://youtu.be/W_gGE4qRglA
該当のソースコード
C#
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MovePuyo : MonoBehaviour { private float span = 1f; private float timeNow; private float posX, posY, posZ; private bool touchDown = false; private float RightFramePosX = -0.5f, LeftFramePosX; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { timeNow += Time.deltaTime; posX = transform.position.x; posY = transform.position.y; posZ = transform.position.z; Debug.Log(posX + ":" + posY + ":" + posZ); if(timeNow >= span) { transform.position += new Vector3( 0, -1, 0); timeNow = 0f; if(touchDown == true) { this.enabled = false; } } /*下に押したとき spanを1fから0.05fに変更することで 下に降りるスピードが上がって下を押さずに早く移動することが可能*/ if(Input.GetKeyDown(KeyCode.DownArrow)) { span = 0.05f; } //右を押せば1マス右に移動 if(Input.GetKeyDown(KeyCode.RightArrow)) { transform.position += new Vector3( 1, 0, 0); if(posX == RightFramePosX) { transform.position -= new Vector3( -1, 0, 0 ); Debug.Log("Right"); } } //左を押せば1マス左に移動 if(Input.GetKeyDown(KeyCode.LeftArrow)) { transform.position += new Vector3( -1, 0, 0); } } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Frame-Bottom") { touchDown = true; } } }
試したこと
RigidBodyの設定を見直したり、Triggerの設定でやってみたりしたのですができませんでした。
補足情報(OS / Unityバージョン)
Windows 11
Unity 2020.3.29f1
マルチポスト
Yahoo知恵袋
➡https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10259832495
まだ回答がついていません
会員登録して回答してみよう