🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity3D

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

Unity

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

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

Q&A

解決済

2回答

2813閲覧

Unity2018.3.14f1でNullReferenceException…というエラーメッセージが出る

niwaka.exe

総合スコア16

C#

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

Unity3D

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

Unity

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

Oculus Rift

Oculus Riftは、ゲームに特化した広視野角バーチャルリアリティヘッドマウントディスプレイ です。そのため、バーチャルリアリティ・ゲームで使用するのを第一目的として開発されています。

0グッド

0クリップ

投稿2019/11/28 17:43

問題点

エラーメッセージが解決できなくて悩んでいます。
環境は合わせていませんが、動いたスクリプトを別プロジェクトに移したのですがエラーメッセージが発生します。
「NullReferenceException: Object reference not set to an instance of an object
DamagePointUI.Attack1.OnTriggerEnter (UnityEngine.Collider col) (at Assets/Script/Attack1.cs:27)」

コードもhttps://gametukurikata.com/ui/damagepointui から引用しました

よろしくお願いします。

実装したいこと

トリガーがある黒にぶつかると数値が出現するということを表現したい
イメージ説明

ソースコード

c#

1 2using System.Collections; 3using UnityEngine; 4using UnityEngine.UI; 5 6namespace DamagePointUI 7{ 8 public class Attack1 : MonoBehaviour 9 { 10 public static int count = 0; 11 public static float timeOut; 12 13 private void Update() 14 { 15 timeOut += Time.deltaTime; 16 } 17 18 void OnTriggerEnter(Collider col) 19 { 20 21 if (timeOut > 0.6f) 22 { 23 count -= 1; 24 timeOut = 0.0f; 25 } 26 27 28 col.transform.root.GetComponent<TakeDamage>().Damage(col); 29 count++; 30 31 if (count > 30) 32 { 33 count = 1; 34 } 35 } 36 37 void OnTriggerExit(Collider col) 38 { 39 timeOut = 0.0f; 40 } 41 42 public static int Getcount() 43 { 44 return count; 45 } 46 } 47} 48

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TakeDamage : MonoBehaviour 6{ 7 // DamageUIプレハブ 8 [SerializeField] 9 private GameObject damageUI; 10 11 public void Damage(Collider col) 12 { 13 // DamageUIをインスタンス化。登場位置は接触したコライダの中心からカメラの方向に少し寄せた位置 14 var obj = Instantiate<GameObject>(damageUI, col.bounds.center - Camera.main.transform.forward * 0.2f, Quaternion.identity); 15 } 16} 17

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

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

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

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

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

guest

回答2

0

ベストアンサー

まずは公式リファレンスを参照しましょう。
Null Reference Exception - Unity マニュアル

そしてエラーメッセージに原因箇所もばっちり書いてあります。
DamagePointUI.Attack1.OnTriggerEnter (UnityEngine.Collider col) (at Assets/Script/Attack1.cs:27)
→「OnTriggerEnterの中、Assets/Script/Attack1.csの27行目」

なので原因は以下の部分。
col.transform.root.GetComponent<TakeDamage>().Damage(col);
恐らくcolのroot(一番上のTransfrom)にTakeDamageコンポーネントが付いていないのでしょう。
TakeDamageを付ける前のデータを移したとか、別の無関係なオブジェクトが衝突してるとか、そもそもスクリプトだけ移して他の対応はしていないとかじゃないでしょうか?

投稿2019/11/29 00:48

sakura_hana

総合スコア11427

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

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

niwaka.exe

2019/12/07 07:05

連絡遅れてすみません。 できました、ありがとうございます。
guest

0

null の変数を参照した、というエラーなので、そのエラーが出た行、及びその前の行あたりに使われてる変数のナカミを片っ端から確認、nullのものがないか調べてみることですね

投稿2019/11/28 22:55

y_waiwai

総合スコア88038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問