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

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

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

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

Unity3D

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

プログラミング言語

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

Unity

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

Q&A

0回答

442閲覧

マリオカートの部品選択プログラムの基盤ができたが、さらに増築させたい。

GReBan

総合スコア5

C#

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

Unity3D

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

プログラミング言語

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

Unity

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

0グッド

0クリップ

投稿2021/05/22 13:10

編集2021/05/24 19:10

###前提・実現したいこと
・Unity初心者
・ゲームジャンル:キメラ格闘ゲーム

マリオカートの部品選択画面のように、キメラの部位を選択させる。前回の質問で3部品選択にさせることができたが、今回は4部品にさせたい。参考にしたページも一緒にのせておきます。
前回の質問ページ
前々回の質問ページ
[参考にしたページ](https://www.kuroshum.com/entry/2018/09/14/Unity%E3%81%A7%E7%84%A1%E9%99%90%E3%83%AB%E3%83%BC%E3%83%97%E5%9E%8B%E3%81%AE%E6%AD%A6%E5%99%A8%E9%81%B8%E6%8A%9EUI%E3%82%92%E5%AE%9F%E8%A3%85(%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7)

###発生している問題・試したこと
部品を3個から4個にし、写真画像も4枚にさせ4通りから選べるようにしたいが、色々しらべてコードを変えてもできなかっため、教えてもらいたい。

・コードのprivateの数字部分を5から7に変更した。
・Unity上での白い四角の数を5から7に変更。
・コード内にある計算式の数字を変更したりした。
⇒これらのことを行ったが、できなかったため、変更する前のコードを記載。

###コード
![イメージ説明

このGif画像は実際に実装しているところです。下のコードはGifでいう左のスロットの真ん中を動かしているコードです。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Player1body : MonoBehaviour 7{ 8 //各部分のスプライト 9 [SerializeField] 10 private Sprite FlyPanSprite; 11 [SerializeField] 12 private Sprite TortoiseSprite; 13 [SerializeField] 14 private Sprite ScorpionSprite; 15 16 //スプライトを表示する用のゲームオブジェクト(UI->Image) 17 [SerializeField] 18 private GameObject[] Animaru = new GameObject[5]; 19 20 //表示する用のオブジェクト(UI->Image)のImageを設定する変数 21 private Image[] AnimaruImage = new Image[5]; 22 23 //表示する用のオブジェクト(UI->Image)の位置・スケールを設定する変数 24 //UIなので、RectTransformを使用 25 private RectTransform[] AnimaruRect = new RectTransform[5]; 26 27 //武器選択UIの真ん中に表示している動物画像の座標 28 private Vector2 Main = new Vector2(-176f, 61f); 29 30 //0 : 動物画像を透明にする基準座標 31 //1 : 動物画像を逆の端に移動する基準座標 32 private Vector2 Up0 = new Vector2(-176f, 0f); 33 private Vector2 Up1 = new Vector2(-176f, -101f); 34 private Vector2 Down0 = new Vector2(-176f, 142f); 35 private Vector2 Down1 = new Vector2(-176f, 223f); 36 37 //動物画像をスライド(変更)させた後の座標(目的地の座標) 38 private Vector2[] Target = new Vector2[5]; 39 40 //スライド(変更)する前の座標(現在の座標) 41 private Vector2[] AnimaruRectPos = new Vector2[5]; 42 43 //スライド(変更)をするかのフラグ 44 private bool SlideFlag; 45 46 //スライド(変更)する前の座標(現在の座標)を保存するためのフラグ 47 //現在の座標を保存するためには、スライドするためのループ処理の一回目だけ座標を保存する処理をする必要がある 48 private bool PosFlag = true; 49 50 //現在設定している動物の数 51 private int AnimaruLevel = 3; 52 53 /* 54 スライドする方向 55 0 : 左方向 56 1 : 右方向 57 */ 58 private int Dir = 0; 59 60 public int WeponType { private set; get; } 61 62 //AnimaruLevelが3の時の設定 63 public void SetLevelThree() 64 { 65 for (int i = 0; i < Animaru.Length; i++) 66 { 67 AnimaruImage[i] = Animaru[i].GetComponent<Image>(); 68 AnimaruRect[i] = Animaru[i].GetComponent<RectTransform>(); 69 70 //動物画像が初期状態からバラバラになっている可能性があるので、上から下に動物画像0~4を整列させる 71 AnimaruRect[i].localPosition = new Vector2(-176f, 169f - i * 54); 72 73 //真ん中以外の動物画像のサイズを 1/1.8 にする 74 if (i == 2) 75 { 76 AnimaruRect[i].localScale = new Vector3(2.0f, 2.0f, 1); 77 } 78 else 79 { 80 AnimaruRect[i].localScale = new Vector3(1 / 1.2f, 1 / 1.2f, 1 / 1.2f); 81 } 82 83 /* 84 * 真ん中の左隣にナイフ 85 * 真ん中にフライパン 86 * 真ん中の右隣りにハンドガン 87 * 左端には真ん中の右隣りの動物 88 * 右端には真ん中の左隣りの動物 89 */ 90 switch (i) 91 { 92 case 1: 93 AnimaruImage[i].sprite = TortoiseSprite; 94 break; 95 case 2: 96 AnimaruImage[i].sprite = FlyPanSprite; 97 break; 98 case 3: 99 AnimaruImage[i].sprite = ScorpionSprite; 100 break; 101 case 4: 102 AnimaruImage[0].sprite = AnimaruImage[3].sprite; 103 AnimaruImage[i].sprite = AnimaruImage[(i + 3) % 6].sprite; 104 break; 105 } 106 107 /* 108 * 両端の動物画像を透明、真ん中3つの画像はそのまま 109 */ 110 if (i == 0 || i == 4) AnimaruImage[i].color = new Color(255, 255, 255, 0); 111 else AnimaruImage[i].color = new Color(255, 255, 255, 255); 112 } 113 } 114 115 //動物画像を上、もしくは下にスライドさせる 116 public void SlideWepon() 117 { 118 if (SlideFlag) 119 { 120 121 //動物画像の数(5個)全てをスライドさせる 122 for (int i = 0; i < Animaru.Length; i++) 123 { 124 if (PosFlag) 125 { 126 AnimaruRectPos[i] = AnimaruRect[i].localPosition; 127 } 128 129 //上にスライドさせる場合 130 if (Dir == 0) 131 { 132 //スライド後(目的地)の座標を指定 133 Target[i] = new Vector2(AnimaruRectPos[i].x, AnimaruRectPos[i].y - 54f); 134 135 /* 136 * 動物画像を目的地に移動させる 137 * 移動座標がDown0を超えたら動物画像を透明から元に戻す 138 * 移動座標がUp0を超えたら動物画像を透明にする 139 * 移動座標がUp1(上)になったら下に瞬間移動させる 140 */ 141 AnimaruRect[i].localPosition = Vector2.MoveTowards(AnimaruRect[i].localPosition, Target[i], Time.deltaTime * 200); 142 if (AnimaruRect[i].localPosition.y <= Down0.y) 143 { 144 AnimaruImage[i].color = new Color(255, 255, 255, 255); 145 } 146 if (AnimaruRect[i].localPosition.y <= Up0.y) 147 { 148 AnimaruImage[i].color = new Color(255, 255, 255, 0); 149 } 150 if (AnimaruRect[i].localPosition.y == Up1.y) 151 { 152 AnimaruRect[i].localPosition = new Vector2(Down1.x, Down1.y - 54f); 153 } 154 } 155 else 156 { 157 /* 158 * スライド後(目的地)の座標を指定 159 */ 160 Target[i] = new Vector2(AnimaruRectPos[i].x, AnimaruRectPos[i].y + 54f); 161 /* 162 * 動物画像を目的地に移動させる 163 * 移動座標がUp0を超えたら武器画像を透明から元に戻す 164 * 移動座標がDown0を超えたら武器画像を透明にする 165 * 移動座標がDown1(下)になったら上端に瞬間移動させる 166 */ 167 AnimaruRect[i].localPosition = Vector2.MoveTowards(AnimaruRect[i].localPosition, Target[i], Time.deltaTime * 200); 168 if (AnimaruRect[i].localPosition.y >= Up0.y) 169 { 170 AnimaruImage[i].color = new Color(255, 255, 255, 255); 171 } 172 if (AnimaruRect[i].localPosition.y >= Down0.y) 173 { 174 AnimaruImage[i].color = new Color(255, 255, 255, 0); 175 } 176 177 if (AnimaruRect[i].localPosition.y == Down1.y) 178 { 179 AnimaruRect[i].localPosition = new Vector2(Up1.x, Up1.y + 54f); 180 } 181 } 182 183 //動物画像が目的地まで移動できたらスライドを終了する 184 if (AnimaruRect[i].localPosition.y == Target[i].y) 185 { 186 SlideFlag = false; 187 } 188 189 190 //武器画像のどれかが真ん中の座標に移動した場合 191 if (AnimaruRect[i].localPosition.y == Main.y) 192 { 193 /* 194 * カメ : WeponTypeを0にする 195 * サソリ : WeponTypeを1にする 196 * フライパン : WeponTypeを2にする 197 */ 198 if (AnimaruImage[i].sprite == TortoiseSprite) 199 { 200 WeponType = 0; 201 } 202 else if (AnimaruImage[i].sprite == ScorpionSprite) 203 { 204 WeponType = 1; 205 } 206 else 207 { 208 WeponType = 2; 209 } 210 /* 211 * 武器画像の大きさを1にする(他は1/1.8) 212 */ 213 AnimaruRect[i].localScale = new Vector3(2.0f, 2.0f, 1); 214 215 /* 216 * WeponLevel別に武器選択UIの配置を設定する 217 * WeponLevel 2 : 現在装備中(真ん中に配置している)の武器画像を両端に設定する 218 * WeponLevel 3 : 真ん中の右隣の武器画像を左端に設定する 219 * 真ん中の左隣の武器画像を右端に設定する 220 */ 221 if (AnimaruLevel == 2) 222 { 223 AnimaruImage[(i + 2) % 5].sprite = AnimaruImage[i].sprite; 224 AnimaruImage[(i + 3) % 5].sprite = AnimaruImage[i].sprite; 225 } 226 if (AnimaruLevel == 3) 227 { 228 AnimaruImage[(i + 2) % 5].sprite = AnimaruImage[(i + 4) % 5].sprite; 229 AnimaruImage[(i + 3) % 5].sprite = AnimaruImage[(i + 1) % 5].sprite; 230 } 231 /* 232 * 真ん中以外の武器画像のサイズを 1/1.8 にする 233 */ 234 } 235 else 236 { 237 AnimaruRect[i].localScale = new Vector3(1 / 1.2f, 1 / 1.2f, 1 / 1.2f); 238 } 239 } 240 PosFlag = false; 241 } 242 } 243 244 // Use this for initialization 245 void Start() 246 { 247 SetLevelThree(); 248 } 249 250 // Update is called once per frame 251 void Update() 252 { 253 if (Input.GetKeyDown(KeyCode.G) && !SlideFlag) 254 { 255 SlideFlag = true; 256 PosFlag = true; 257 Dir = 0; 258 } 259 if (Input.GetKeyDown(KeyCode.H) && !SlideFlag) 260 { 261 SlideFlag = true; 262 PosFlag = true; 263 Dir = 1; 264 } 265 266 SlideWepon(); 267 } 268} 269

###Unity ver

2019.4.14f1

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問