質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1086閲覧

【Unity】3Dぷよぷよの当たり判定に困っています。

Locu_______

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/04/05 08:30

編集2022/04/05 11:17

Unityで3Dぷよぷよを作っています。

実現したいこと

・ぷよぷよの枠と見立てているオブジェクトにぷよが触れたときにサイドの壁だったら壁にめり込まずにそこで左右の移動はできなくする
(例)右にぷよが移動して右の壁に当たったら壁にめり込まないで右には行けなくする(左も同様)

・下に着地したときピタっと止まる

発生している問題・エラーメッセージ

現状左右の壁に当たった時、半分くらいめり込んでいけなくなります
言葉じゃ説明が難しいので、YouTubeに限定公開として動画をアップロードしてあります。
動画➡https://youtu.be/W_gGE4qRglA

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MovePuyo : MonoBehaviour 6{ 7 private float span = 1f; 8 private float timeNow; 9 private float posX, posY, posZ; 10 private bool touchDown = false; 11 private float RightFramePosX = -0.5f, LeftFramePosX; 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 timeNow += Time.deltaTime; 22 23 posX = transform.position.x; 24 posY = transform.position.y; 25 posZ = transform.position.z; 26 27 Debug.Log(posX + ":" + posY + ":" + posZ); 28 29 if(timeNow >= span) 30 { 31 transform.position += new Vector3( 0, -1, 0); 32 timeNow = 0f; 33 if(touchDown == true) 34 { 35 this.enabled = false; 36 } 37 } 38 39 /*下に押したとき spanを1fから0.05fに変更することで 40 下に降りるスピードが上がって下を押さずに早く移動することが可能*/ 41 if(Input.GetKeyDown(KeyCode.DownArrow)) 42 { 43 span = 0.05f; 44 } 45 46 //右を押せば1マス右に移動 47 if(Input.GetKeyDown(KeyCode.RightArrow)) 48 { 49 transform.position += new Vector3( 1, 0, 0); 50 if(posX == RightFramePosX) 51 { 52 transform.position -= new Vector3( -1, 0, 0 ); 53 Debug.Log("Right"); 54 } 55 } 56 57 //左を押せば1マス左に移動 58 if(Input.GetKeyDown(KeyCode.LeftArrow)) 59 { 60 transform.position += new Vector3( -1, 0, 0); 61 } 62 } 63 64 void OnCollisionEnter(Collision other) 65 { 66 if(other.gameObject.name == "Frame-Bottom") 67 { 68 touchDown = true; 69 } 70 } 71} 72

試したこと

RigidBodyの設定を見直したり、Triggerの設定でやってみたりしたのですができませんでした。

補足情報(OS / Unityバージョン)

Windows 11
Unity 2020.3.29f1

マルチポスト

Yahoo知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10259832495

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Locu_______

2022/04/05 11:16

すいません。 記載するのを忘れていました。
guest

回答1

0

ベストアンサー

RigidbodyなどUnity上で物理演算を使って当たり判定を行う場合は、transform.positionに直接代入するのは避けてください。
transform.positionに直接代入したとき、内部的には「移動した」というより「ワープした」と見なされ、その間の当たり判定はしてくれません。ワープ的な移動をする場合は自分で移動制限を付けた方がいいと思います。

[追記]
そもそも、物理演算というのは現実世界の物体の運動をシミュレートするために作られているので、パズルゲームでよく使われるような飛び飛びの瞬間移動を伴う動きと相性が悪いです。左右の壁に当たったら移動自体をできなくしてしまう実装をするのが普通だと思います。

投稿2022/04/05 09:36

編集2022/04/05 11:31
KomoriGameDev

総合スコア433

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Locu_______

2022/04/05 11:15

回答して頂きありがとうございます。 言われたとおりにtransform.positionで直接移動せずに、Movepositionで移動してみたところ、ぷよが一番下の床に着地するとこは理想通りになりました。 ですが、左右の壁にぷよがあたってもピシッと止まってくれません 動画➡https://youtu.be/3eyuc3i8J4U
KomoriGameDev

2022/04/05 11:22

自分のコードでは解決しなかったので回答を編集しました。そもそも、物理演算というのは現実世界の物体の運動をシミュレートするために作られているので、パズルゲームでよく使われるような飛び飛びの瞬間移動を伴う動きと相性が悪いです。左右の壁に当たったら移動自体をできなくしてしまう実装をするのが普通だと思います。
Locu_______

2022/04/05 11:27

なるほど。相性が悪かったのですね。 2Dで作りたいと思います! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問