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

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

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

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

Unity

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

Q&A

解決済

2回答

1283閲覧

unityのC#で配列を使用したところ、正常に動きはしたのですがコンソールにエラーが出てしまいます。

zeyo

総合スコア1

C#

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

Unity

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

0グッド

0クリップ

投稿2023/03/11 06:11

実現したいこと

  • エラーメッセージが出ないようにしたい

前提

Unity2021.3.19f1で配列を用いた以下のコードを作成しました。
ゲームを実行すると正常に動いたのですがコンソールにエラーが出てしまいます。

エラーメッセージは「indexが配列の範囲外にアクセスしている」という意味だと思うのですが、インスペクター上で配列の要素を2個設定していますし、配列内のゲームオブジェクトは常にアクティブになっているのでなぜこのようなエラーが出るのかわかりません。

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

IndexOutOfRangeException: Index was outside the bounds of the array. CameraController.Start () (at Assets/MyUtageProject/CameraController.cs:12) CameraController.SetVcam (System.Int32 index) (at Assets/MyUtageProject/CameraController.cs:21) CameraController.IsVcam1 () (at Assets/MyUtageProject/CameraController.cs:26) CameraController.IsVcam2 () (at Assets/MyUtageProject/CameraController.cs:31)

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using Cinemachine; 5 6public class CameraController : MonoBehaviour 7{ 8 public CinemachineVirtualCamera[] cinemachineVirtualCameras; 9 10 private void Start() 11 { 12 SetVcam(0); 13 } 14 15 private void SetVcam(int index) 16 { 17 foreach (CinemachineVirtualCamera vcam in cinemachineVirtualCameras) 18 { 19 vcam.Priority = 0; 20 } 21 cinemachineVirtualCameras[index].Priority = 10; 22 } 23 24 public void IsVcam1() 25 { 26 SetVcam(0); 27 } 28 29 public void IsVcam2() 30 { 31 SetVcam(1); 32 } 33} 34

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

Unity2021.3.19f1使用

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

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

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

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

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

fiveHundred

2023/03/11 07:22

CameraControllerを使っている側のコードはどうなっていますか?
zeyo

2023/03/11 07:40

CameraControllerはアニメーションするゲームオブジェクトにアタッチしています。 このゲームオブジェクトで使用しているAnimator Controller内のAnimation Clipにイベントを仕込んでIsVcam1()やIsVcam2()を呼び出すことで、アニメーションに合わせてカメラを切り替えるということをしています。 ちなみにCamera Controllerをカラのオブジェクトにアタッチしても正常に動くものの、やはり同様のエラーが表示されてしまいます。
YAmaGNZ

2023/03/11 08:01

インスペクタ上で設定しているCameraControllerとは別にCameraControllerがアタッチされていたりしませんか? SetVcamでcinemachineVirtualCamerasの個数をログ出力するなどして2個設定してあるものだけなのか確認してみてはどうでしょう?
zeyo

2023/03/11 08:40

CameraControllerが2個アタッチされており片方をRemove Componentしたらエラーが無くなりました! ありがとうございました!! 最近Add Componentするとコンポーネントが2個追加されてしまうのですが、これはUnity2021.3.19f1のバグなのですかね、、
guest

回答2

0

自己解決

CameraControllerが2個アタッチされていたたため起きたエラーで、片方を削除したらエラーが無くなりました。
ご協力いただいた方々、ありがとうございました。

Unity2021.3.19f1にしてからAdd Componentするとたまにコンポーネントが2個追加されてしまうことがあるのですが、これはバグなのでしょうか、、

投稿2023/03/11 11:54

zeyo

総合スコア1

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

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

UnitySoldier

2023/03/13 05:08

3.19f1はそういうバグがあります。 3.20で修正されたバグなのでアップデートしたほうがいいです。
zeyo

2023/03/13 06:48

そうなんですね。ありがとうございます。
guest

0

public CinemachineVirtualCamera[] cinemachineVirtualCameras;

これだけでは、cinemachineVirtualCamerasという名前の配列オブジェクトを定義しているだけで、その配列のナカミはカラです
なので、

cinemachineVirtualCameras[index].Priority = 10;

ということはできません

ってことで、さきにナカミを作りましょう

投稿2023/03/11 06:28

y_waiwai

総合スコア87774

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

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

Zuishin

2023/03/11 06:32

> インスペクター上で配列の要素を2個設定していますし、配列内のゲームオブジェクトは常にアクティブになっているのでなぜこのようなエラーが出るのかわかりません。 これを踏まえて回答を書き直しましょう。
zeyo

2023/03/11 07:05

ご回答ありがとうございます。 インスペクター上で要素を設定しているのですがそれでもカラと判断されてしまうのは、Start関数の方が早く処理されるからということでしょうか。
fiveHundred

2023/03/11 07:19

たぶんこの回答者、Unity自体あまり触っておらず、「publicな変数はエディタから設定できる」ことすら分かっていないような気がします。
Zuishin

2023/03/11 07:23

Unity どころか、C# のことも C 言語の方言だと思っており、そうじゃないと何度注意しても学習しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問