前提・実現したいこと
自由に配置することのできるパズルゲームを制作しています。型にはまったピースにほかのピースがはまらないようにしたいです。(複数のピースが1つの型にはまらないようにしたいです)
そこで、自分が動かしているピース以外のピースは座標を固定して動かしているピースと重ならないようにしたいです。
発生している問題・エラーメッセージ
Rigidbody2DのTypeをDynamicにした場合、ほかのピースとの衝突時に衝突したピースが動いてしまう。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Up : MonoBehaviour { 6 7 private int[] PosX = {-375, -125, 125, 375, 8 -375, -125, 125, 375, 9 -375, -125, 125, 375}; 10 private int[] PosY = {450, 450, 450, 450, 11 200, 200, 200, 200, 12 -50, -50, -50, -50}; 13 14 public void OnDrag(){ 15 this.transform.SetSiblingIndex(99); 16 Vector3 TapPos = Input.mousePosition; 17 TapPos.z = 10f; 18 transform.position = Camera.main.ScreenToWorldPoint(TapPos); 19 } 20 21 public void OnEndDrag() 22 { 23 int No = 0; 24 float objx = this.transform.localPosition.x; 25 float objy = this.transform.localPosition.y; 26 27 if(objx < -250){ 28 if(objy > 325){ 29 No = 0; 30 }else if(325 > objy && objy > 75){ 31 No = 4; 32 }else if(75 > objy){ 33 No = 8; 34 } 35 }else if(-250 < objx && objx < 0){ 36 if(objy > 325){ 37 No = 1; 38 }else if(325 > objy && objy > 75){ 39 No = 5; 40 }else if(75 > objy){ 41 No = 9; 42 } 43 }else if(0 < objx && objx < 250){ 44 if(objy > 325){ 45 No = 2; 46 }else if(325 > objy && objy > 75){ 47 No = 6; 48 }else if(75 > objy){ 49 No = 10; 50 } 51 }else if(250 < objx){ 52 if(objy > 325){ 53 No = 3; 54 }else if(325 > objy && objy > 75){ 55 No = 7; 56 }else if(75 > objy){ 57 No = 11; 58 } 59 } 60 61 float LeftX = PosX[No] - 60; 62 float RightX = PosX[No] + 60; 63 float DownY = PosY[No] - 60; 64 float UpY = PosY[No] + 60; 65 66 if(LeftX <= objx && objx <= RightX){ 67 if(DownY <= objy && objy <= UpY){ 68 this.transform.SetSiblingIndex(22); 69 this.transform.localPosition = new Vector3(PosX[No], PosY[No], 0); 70 } 71 } 72 } 73}
試したこと
Rigidbody2Dのtypeをkinematicにすると動かない代わりに重なってしまう
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。