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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1585閲覧

条件分岐が一回目だけ判定されない

sumikko6210

総合スコア138

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2018/10/30 06:09

編集2018/10/30 06:49

前提・実現したいこと

現在、カーリングゲームを作成しており、ストーンを一投投げるごとに距離を図るスクリプトを作成しています。
しかし、一投目だけ条件分岐の判定がされず、その原因がわかりません。

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

二投目からはしっかりと判定してくれますが、一投目だけ判定しません。

該当のソースコード

イメージ説明
手前の赤ストーンにStone.cs
奥の白い円にNearestScript.csが入ってます。
白い円からStoneまでの距離をとっています。

Stone.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Stone : MonoBehaviour { 6 public static Rigidbody rb; 7 public GameObject isi; 8 public static bool Ika = false; 9 // Use this for initialization 10 void Start () { 11 rb = GetComponent<Rigidbody>(); 12 } 13 14 // Update is called once per frame 15 void Update () { 16 if (Input.GetKey("up")) 17 { 18 Ika = true; 19 gameObject.GetComponent<Rigidbody>().velocity = transform.forward * 300f; 20 21 } 22 if (Input.GetKey("right")) 23 { 24 rb.AddForce(Vector3.right * 100f); 25 } 26 if (Input.GetKey("left")) 27 { 28 rb.AddForce(Vector3.left * 100f); 29 } 30 if (rb.IsSleeping() && Ika) 31 { 32 Vector3 pos = transform.position; 33 pos.x = 0; 34 pos.y = 0; 35 pos.z = -700; 36 Instantiate(isi, pos, transform.rotation); 37 Ika = false; 38 gameObject.GetComponent<Stone>().enabled = false; 39 40 } 41 } 42 43} 44

NearestScript.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class NearestScript : MonoBehaviour 6{ 7 GameObject nearestStone = null; 8 public GameObject[] stones; 9 10 // Use this for initialization 11 void Start() 12 { 13 14 } 15 16 // Update is called once per frame 17 void Update() 18 { 19 measure(); 20 21 } 22 23 void measure() 24 { 25     //ここが一回目を判定してくれない 26 if (Stone.rb.IsSleeping() && Stone.Ika)//投げた後かつStoneが止まったらtrue 27 { 28 29 GameObject[] stones = GameObject.FindGameObjectsWithTag("stone"); 30 31 float minDis = 100f; 32 foreach (GameObject stone in stones) 33 { 34 float dis = Vector3.Distance(transform.position, stone.transform.position); 35 if (dis < minDis) 36 { 37 Debug.Log(dis); 38 minDis = dis; 39 nearestStone = stone; 40 } 41 } 42 Debug.Log(nearestStone); 43 } 44 } 45 46} 47

試したこと

エラーメッセージは出ず、二投目からはしっかりと判定されます。
stones配列には赤と青のストーンオブジェクトを初期から入れています。

補足情報(FW/ツールのバージョンなど)

Unity 2017.4

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

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

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

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

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

guest

回答1

0

自己解決

Stone.csのUpdateをFixedUpdateの変えたら直りました!

投稿2018/10/30 06:33

編集2018/10/30 06:36
sumikko6210

総合スコア138

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問