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

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

詳細はこちら
C#

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

980閲覧

Unityでの再生成方法について

niwaka.exe

総合スコア16

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/11/05 06:36

問題点

オブジェクトに当たった際に上にテキストを表示するようにしたいのですが、表示できません。

https://gametukurikata.com/ui/damagepointuiこのサイトを参考にしたのですかがうまくいきません。

###画像
図のように黒が白にぶつかった際に、数値が表示されるようにしたいのですがうまくいきません

イメージ説明

図はエラーメッセージです

イメージ説明

###ソースコード

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}

C#

1using System.Collections; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class DamageUI : MonoBehaviour 6{ 7 private Text damageText; 8 // フェードアウトするスピード 9 private float fadeOutSpeed = 1f; 10 // 移動値 11 [SerializeField] 12 private float moveSpeed = 0.4f; 13 14 void Start() 15 { 16 damageText = GetComponentInChildren<Text>(); 17 } 18 19 void LateUpdate() 20 { 21 transform.rotation = Camera.main.transform.rotation; 22 transform.position += Vector3.up * moveSpeed * Time.deltaTime; 23 24 damageText.color = Color.Lerp(damageText.color, new Color(1f, 0f, 0f, 0f), fadeOutSpeed * Time.deltaTime); 25 26 if (damageText.color.a <= 0.1f) 27 { 28 Destroy(gameObject); 29 } 30 } 31}

C#

1using System.Collections; 2using UnityEngine; 3 4namespace DamagePointUI 5{ 6 public class Attack1 : MonoBehaviour 7 { 8 9 void OnTriggerEnter(Collider col) 10 { 11 12 col.transform.root.GetComponent<TakeDamage>().Damage(col); 13 14 } 15 } 16}

開発環境

Unity 2018.3.14f1

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

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

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

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

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

guest

回答2

0

ベストアンサー

private GameObject damageUI;
ここにセットしているオブジェクトは「シーン上にあるオブジェクト」ではないでしょうか?
この場合、シーン上にあるオブジェクトがDamageUIスクリプトによって削除され、削除されたオブジェクトを元にInstantiateしているのでこのエラーが発生します。

代わりにプロジェクトビュー内にあるプレハブオブジェクトをセットすればとりあえずエラーは消えると思います。

投稿2019/11/05 07:59

sakura_hana

総合スコア11427

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

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

0

既にやってたらすみません!
エディター上の「Inspector」の表示で、
TakeDamage」スプリクトファイルを設定しているオブジェクトを見ると
damageUI」という項目があると思います。
そこに作成した「DamageUI」プレハブをドラッグ&ドロップしてみてください。
多分上手く動くと思います。

Inspector表示の参考に
上記サイトの一番上の画像の赤枠部分みたいな感じで
damageUI」という項目があると思います。
内容は難しいので無視して画像だけ参考にしてみてください。

投稿2019/11/05 07:52

Youbun

総合スコア125

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

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

sakura_hana

2019/11/05 08:01

これが出来ていない場合に発生するのは(「Missing〜」ではなく)「NullReferenceException」なので今回は違うと思います。
Youbun

2019/11/05 08:36

本当ですね!すみません!! 僕の回答は間違ってますので 下の方の回答を参考にしてください!
niwaka.exe

2019/11/05 11:08

できました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問