前提・実現したいこと
プレイヤー(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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。