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

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

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

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

Unity

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

Q&A

解決済

1回答

2027閲覧

UnityのInvalidCastExceptionエラー

SH172

総合スコア21

C#

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

Unity

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

0グッド

0クリップ

投稿2022/06/08 07:30

Unityでシューティングゲームを作っています。
敵キャラクターが弾を打つ際に角度を指定して弾を動かしたいと思っています。

敵キャラクターを動かすスクリプトと弾を動かすスクリプトに分けて記述をしていますが
引数を渡す際にInvalidCastExceptionのエラーが発生しています。

スクリプトは以下の二つです。

弾を動かすもの↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy003BulletController : MonoBehaviour
{
float dx;
float dy;

public void shot(float angle,float speed){ dx = Mathf.Cos(angle) * speed; dy = Mathf.Sin(angle) * speed; } void Update(){ transform.position += new Vector3(dx, dy, 0) * Time.deltaTime; if (transform.position.x < -3 || transform.position.x > 3|| transform.position.y < -3 || transform.position.y > 3) { Destroy(gameObject); } }

}

敵を動かすもの↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy003Controller : MonoBehaviour
{
public Enemy003BulletController Enemy003bulletPrefab;

public void Start () { Shot(0.01f,0.01f); //ここでエラー } void Shot(float angle, float speed){ Enemy003BulletController bullet = Instantiate(Enemy003bulletPrefab, transform.position, transform.rotation); bullet.shot(angle,speed); //ここでエラー }

}

以上でコンパイルは通りますが実行時にエラーが出ています。
InvalidCastException: Specified cast is not valid.
(wrapper castclass) System.Object.__castclass_with_cache(object,intptr,intptr)
UnityEngine.Object.Instantiate[T] (T original, UnityEngine.Vector3 position, UnityEngine.Quaternion rotation) (at <f1212ad1dec44ce7b7147976b91869c3>:0)
Enemy003Controller.Shot (System.Single angle, System.Single speed) (at Assets/Scripts/Enemy003Controller.cs:18)
Enemy003Controller.Start () (at Assets/Scripts/Enemy003Controller.cs:13)

かたのキャストができていないようで、Gettypeなどで確認したのですが、取得できる変数の型はすべてSingleとなっており、float型の変数で動かしていることについては問題が無いように思います。

なにか記述に間違いがあるのでしょうか。解決策があればご教示いただければ幸いです。

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

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

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

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

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

bboydaisuke

2022/06/08 09:30

コードを ``` で囲うことで書式を設定できますが、囲っている範囲が変ですね。質問を読み直して適宜修正してください。
bboydaisuke

2022/06/08 09:36

あと「ここでエラー」と書いてますが間違ってますよ。 エラーを見れば Instantiate がエラーになってることはわかりますよね。 "Enemy003bulletPrefab" という変数に Inspector からプレハブを指定するつもりでコードを書いているのかと思いますが、そこにアサインされているのがプレハブではなくスクリプトアセットなんだろうと思います。
y_waiwai

2022/06/08 09:37

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

自己解決

>プレハブではなくスクリプトアセットなんだろうと思います。
ここで勘違いしていたようです。
解決しました。ありがとうございます

投稿2022/06/08 12:18

SH172

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問