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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

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

Unity

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

Q&A

解決済

1回答

235閲覧

UnityのScript順番について

isosiso

総合スコア11

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2018/05/07 17:38

Unity、C#どちらも初心者です。

unity(3D)でC#を用いて、テーブルの上で二つの3Dオブジェクトを1Pと2Pで順番に動かし、テーブルから落としたら勝ちというゲームを作成しています。

3Dオブジェクトを動かすScriptは作成したのですが、ターン制のように1Pが一度動かしたら次は2Pが動かす様にするにはどのようにすればいいですか?

漠然とオブジェクトを動かすScriptを制御する新たなScriptを作成するのかと思い調べてみましたが、わかりませんでした。
あとScript Execution Orderも試してみようと思ったのですが使い方がいまいちわかりませんでした。

どのようにすればターン制にできますか?

こちらがオブジェクトを動かすScriptです。

C#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class ShootScript : MonoBehaviour { 7 8 9 Vector3 startPos; 10 11 float speedX = 0; 12 float speedZ = 0; 13 14 void Start() 15 { 16 17 } 18 19 void Update() 20 { 21 Swipe(); 22 } 23 24 25 void Swipe() 26 { 27 if (Input.GetMouseButtonDown(0)) 28 { 29 this.startPos = Input.mousePosition; 30 31 } 32 else if (Input.GetMouseButtonUp(0)) 33 { 34 Vector3 endPos = Input.mousePosition; 35 36 Vector3 worldPos = endPos - startPos; 37 38 float swipeLengthX = worldPos.x; 39 float swipeLengthZ = worldPos.y; 40 41 this.speedX = swipeLengthX / 500; 42 this.speedZ = swipeLengthZ / 500; 43 } 44 45 transform.Translate(this.speedX, 0, this.speedZ, Space.World); 46 this.speedX *= 0.90f; 47 this.speedZ *= 0.90f; 48 } 49 50} 51

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

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

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

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

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

guest

回答1

0

ベストアンサー

1Pと2Pを交互に動かすということなら、bool型の変数を使って、移動終了のタイミングで変数の値を反転させてやればよいと思います。

参考コード(質問者さんのコードとは別の物です)

C#

1using UnityEngine; 2 3public class TurnChangeController : MonoBehaviour 4{ 5 // インスペクターから設定 6 [SerializeField] GameObject player1; 7 [SerializeField] GameObject player2; 8 9 bool player1IsActive = true; // true なら Player1 を動かせる。false なら Player2 を動かせる 10 11 private void Update () 12 { 13 // bool変数の値に応じて、どちらか一方のみを動かせる 14 if ( player1IsActive ) 15 { 16 MovePlayer1 (); 17 } 18 else 19 { 20 MovePlayer2 (); 21 } 22 } 23 24 // Player1 は Aキーで左に、Dキーで右に動く。動いたらターンエンド(bool変数を反転) 25 private void MovePlayer1 () 26 { 27 if ( Input.GetKeyDown ( KeyCode.A ) ) 28 { 29 player1.transform.Translate ( -Vector3.right ); 30 player1IsActive = !player1IsActive; 31 } 32 else if ( Input.GetKeyDown ( KeyCode.D ) ) 33 { 34 player1.transform.Translate ( Vector3.right ); 35 player1IsActive = !player1IsActive; 36 } 37 } 38 39 // Player2 は ←キーで左に、→キーで右に動く。動いたらターンエンド(bool変数を反転) 40 private void MovePlayer2 () 41 { 42 if ( Input.GetKeyDown ( KeyCode.LeftArrow ) ) 43 { 44 player2.transform.Translate ( -Vector3.right ); 45 player1IsActive = !player1IsActive; 46 } 47 else if ( Input.GetKeyDown ( KeyCode.RightArrow ) ) 48 { 49 player2.transform.Translate ( Vector3.right ); 50 player1IsActive = !player1IsActive; 51 } 52 } 53}

投稿2018/05/07 18:56

negitama

総合スコア943

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

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

isosiso

2018/05/09 09:18

ありがとうございます、解決しました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問