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

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

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

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

Unity

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

Q&A

解決済

3回答

3964閲覧

Unity:整数を0で掛けていないはずなのに

UDON3

総合スコア80

C#

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

Unity

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

0グッド

0クリップ

投稿2018/08/17 06:48

### 実現したいこと
タブを移動させるスクリプトを書いている途中にこのようなエラーが発生しました。

DivideByZeroException: Division by zero TabScript.TabTransform (Int32 TotalTabs) (at Assets/Scouse/TabScript.cs:18) Controller.Start () (at Assets/Scouse/Controller.cs:165)

整数を0出かけていることを示すエラーらしいのですが、ソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using DG.Tweening; 6 7public class TabScript : MonoBehaviour { 8 float TabWidth; 9 float OldTabWidth; 10 int tabcount; 11 int OldTotalTabs; 12 GameObject[] Toggles = new GameObject[7]; 13 int[] Presets = {800, 320, 160, 80, 32, 0, -23 }; 14 // Use this for initialization 15 public void TabTransform (int TotalTabs) { 16 int a = 0; 17 TabWidth = 1920 / TotalTabs; 18 OldTabWidth = 1920 / OldTotalTabs; 19 Toggles[a] = transform.Find("More").gameObject; 20 a++; 21 Toggles[a] = transform.Find("Play").gameObject; 22 a++; 23 Toggles[a] = transform.Find("Pause").gameObject; 24 if (Controller.play == true) 25 { 26 Toggles[a].SetActive(true); 27 a++; 28 } 29 else 30 { 31 Toggles[a].GetComponent<RectTransform>().localPosition = new Vector3(OldTabWidth * a + Presets[OldTotalTabs - 1], 0, 0); 32 //Toggles[a].SetActive(false); 33 } 34 Toggles[a] = transform.Find("Block").gameObject; 35 if (Controller.play == false) 36 { 37 Toggles[a].SetActive(true); 38 a++; 39 } 40 else 41 { 42 Toggles[a].GetComponent<RectTransform>().localPosition = new Vector3(OldTabWidth * a + Presets[OldTotalTabs - 1], 0, 0); 43 //Toggles[a].SetActive(false); 44 } 45 Toggles[a] = transform.Find("File").gameObject; 46 a++; 47 Toggles[a] = transform.Find("Dictionary").gameObject; 48 a++; 49 Toggles[a] = transform.Find("Example").gameObject; 50 for (int i = 0; i <= a; i++) 51 { 52 Toggles[i].GetComponent<RectTransform>().DOLocalMove(new Vector2(TabWidth * i + Presets[TotalTabs - 1], 0), 1f); 53 RectTransform TabBG = Toggles[i].transform.Find("Background").gameObject.GetComponent<RectTransform>(); 54 RectTransform SelectImage = Toggles[i].transform.Find("Background").gameObject.transform.Find("Image").gameObject.GetComponent<RectTransform>(); 55 TabBG.sizeDelta = new Vector2(TabWidth, 80); 56 SelectImage.sizeDelta = new Vector2(TabWidth, 80); 57 } 58 OldTotalTabs = TotalTabs; 59 } 60 61 // Update is called once per frame 62 void Update () { 63 if (Input.GetKeyDown("b")) 64 { 65 tabcount++; 66 TabTransform(tabcount); 67 } 68 if (Input.GetKeyDown("n")) 69 { 70 tabcount--; 71 TabTransform(tabcount); 72 } 73 } 74} 75

コードを見る限り、0でかけているところはありません、TabTransformも0で呼びだしている個所はありません。
###お願い
どうして0で掛けた扱いにあるのか教えてほしい。
割り算をしているはずなのに、なぜ掛け算扱いなのか知りたい(もしかしたらエラーの読み間違いかもしれませんが)

環境

Unity2018

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

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

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

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

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

papinianus

2018/08/17 09:11

Start()はどうなっているのでしょう?(Start()内でエラーですよね?)
UDON3

2018/08/17 14:10

すみません、文字数の制限で記入できませんでした。Controller.cs内で、Tabs.GetComponent<TabScript>().TabTransform(6);のようにして呼び出しています
guest

回答3

0

ベストアンサー

0でかけた時のエラーではなく、0で割った時のエラーです。
TotalTabsやOldTotalTabsの値を確認してください。

投稿2018/08/17 06:51

YAmaGNZ

総合スコア10242

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

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

UDON3

2018/08/17 14:16

さっそくDebugLogで確認してみます。
UDON3

2018/08/17 14:25

DebugLogで確認したところ、原因を知ることができました。 変数が初期状態のまま演算していたためエラーになり、更新ができない>初期状態のままということが繰り返されていました。確認したところ、このエラーにきずきました、ありがとうございます!
guest

0

TabTransformも0で呼びだしている個所はありません。

C#

1 2 if (Input.GetKeyDown("n")) 3 { 4 tabcount--; 5 TabTransform(tabcount); 6 }

n キーを連打すると、tabcountは0になりそーですね

投稿2018/08/17 07:02

y_waiwai

総合スコア87747

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

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

UDON3

2018/08/17 14:11

書いていなかったのですが、0になっていないときもエラーになってしまいます。 bキーを押していてもエラーが出ます。 まとめると、TabTransformを呼んだ時すべてでエラーが起きます。
UDON3

2018/08/17 14:23

変数が初期値のままで演算していたためエラーになり、下の代入処理まで進まず、一向にOldTotalTabsが更新されない問題が起きていました、お騒がせしました。
guest

0

OldTotalTabsが0で、それで割っているのでエラーです。

投稿2018/08/17 07:00

otn

総合スコア84499

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

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

UDON3

2018/08/17 14:12

なぜOldTotalTabsが0になるのでしょうか、TotalTabsが0になることはないのですが。
UDON3

2018/08/17 14:21

原因がわかりました、どうやら、変数作成する>その変数で演算をする(ここでエラーになり進まない)>変数に0以外の数を入れるという流れになっていました。エラーにならないように、変数作成時に1を入れると無事解決できました、お騒がせしてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問