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

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

新規登録して質問してみよう
ただいま回答率
85.36%
Unity

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

Q&A

解決済

1回答

645閲覧

Unityで、プレイヤーがある座標を超えたときに骸骨が下りてくるといったプログラムを作りたい。

night000910

総合スコア2

Unity

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

0グッド

0クリップ

投稿2020/08/06 19:27

前提・実現したいこと

プレイヤー(player_right3)のx座標が56.5を超えたときに骸骨(bone_big)が下りてくるといったプログラムを作りたいです。

プレイヤー player_right3
骸骨 bone_big
骸骨にアタッチされたスクリプト bone_bigController

イメージ説明

イメージ説明

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

プレイヤー(player_right3)のx座標が56.5を超えても骸骨(bone_big)が下りてきません。
また、下のようなエラーが発生しました。

//エラーメッセージ NullReferenceException: Object reference not set to an instance of an object bone_bigController.Update () (at Assets/bone_bigController.cs:50)

###該当のソースコード

//bone_bigController(骸骨にアタッチされたスクリプト) using System.Collections; using System.Collections.Generic; using UnityEngine; public class bone_bigController : MonoBehaviour { // Start is called before the first frame update GameObject bone; float bound1 = 1; float bound2 = -1; float HP = 100; GameObject lightPrefab; GameObject player; float start = 0; void Start() { bone = GameObject.Find("bone_big"); lightPrefab = transform.Find("lightPrefab").gameObject; player = GameObject.Find("player_right3"); } // Update is called once per frame void Update() { if (bone.transform.position.y <= -2.67f) { bound2 = 1; } if (bone.transform.position.y >= 2.67f) { bound2 = -1; } if (bone.transform.position.x >= 69.34f) { bound1 = -1; } if (bone.transform.position.x <= 55.63f) { bound1 = 1; } Vector3 bone_pos = transform.position; float player_pos = player.transform.position.x; //エラーが発生した行(50行目) if (start == 0) { if (player_pos >= 56.5f) { start = 1; } } if (start == 1) { transform.Translate(0, -0.05f, 0); if (bone_pos.y <= -1.5f) { start = 2; } } if (start == 2) { transform.Translate(0.07f * bound1, 0.07f * bound2, 0); } Vector2 p1 = transform.position; Vector2 p2 = lightPrefab.transform.position; Vector2 dir = p1 - p2; float d = dir.magnitude; float r1 = 0.58f; float r2 = 0.125f; if (d < r1 + r2) { HP -= 100; } if (HP <= 0) { Destroy(gameObject); } } }

補足情報

windows10
unity Version 2018.4.17f1 Personal

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のようにコードを修正して実行し、Console への出力と動作をよく観察すると何かわかると思います。

player = GameObject.Find("player_right3");

を以下のように変える:

player = GameObject.Find("player_right3"); if (!player) { Debug.LogError("player_right3 は見つからなかった"); }

float player_pos = player.transform.position.x; //エラーが発生した行(50行目)

を以下のように変える:

float player_pos; if (player) { player_pos = player.transform.position.x; } else { Debug.LogError("player が空(どれが player なのかわからない)"); }

投稿2020/08/06 22:24

bboydaisuke

総合スコア5306

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問