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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity3D

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

Unity

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

Q&A

解決済

1回答

855閲覧

Unity2019 3.0f6でResource.Load()を用いたオブジェクトを出現させるということができない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/24 07:25

編集2020/07/24 11:12

前提・実現したいこと

Unityで3Dアクション系のゲームを作っています。
多段ジャンプする際、右足元に薄い板が出てくる(ワールドトリガーという漫画のグラスホッパー的なやつ)ような機能を実装中に以下のエラーメッセージが出ました。

参考 https://www.gamer.ne.jp/news/201508240002/image/13/ (これだと両足ですね^^;)

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

NullReferenceException: Object reference not set to an instance of an object UnityChan.UnityChanControlScriptWithRgidBody.FixedUpdate () (at Assets/unity-chan!/Unity-chan! Model/Scripts/UnityChanControlScriptWithRgidBody.cs:164)

該当のソースコード

C# UnityChanControlScriptWithRigidBody.cs ジャンプ中の処理の部分以外変えていないと思います。

public class UnityChanControlScriptWithRgidBody : MonoBehaviour { public float animSpeed = 1.5f; // アニメーション再生速度設定 public float lookSmoother = 3.0f; // a smoothing setting for camera motion public bool useCurves = true; // Mecanimでカーブ調整を使うか設定する // このスイッチが入っていないとカーブは使われない public float useCurvesHeight = 0.5f; // カーブ補正の有効高さ(地面をすり抜けやすい時には大きくする) // 以下キャラクターコントローラ用パラメタ // 前進速度 public float forwardSpeed = 7.0f; // 後退速度 public float backwardSpeed = 2.0f; // 旋回速度 public float rotateSpeed = 2.0f; // ジャンプ威力 public float jumpPower = 3.0f; // キャラクターコントローラ(カプセルコライダ)の参照 private CapsuleCollider col; private Rigidbody rb; // キャラクターコントローラ(カプセルコライダ)の移動量 private Vector3 velocity; // CapsuleColliderで設定されているコライダのHeiht、Centerの初期値を収める変数 private float orgColHight; private Vector3 orgVectColCenter; private Animator anim; // キャラにアタッチされるアニメーターへの参照 private AnimatorStateInfo currentBaseState; // base layerで使われる、アニメーターの現在の状態の参照 private GameObject cameraObject; // メインカメラへの参照 // アニメーター各ステートへの参照 static int idleState = Animator.StringToHash ("Base Layer.Idle"); static int locoState = Animator.StringToHash ("Base Layer.Locomotion"); static int jumpState = Animator.StringToHash ("Base Layer.Jump"); static int restState = Animator.StringToHash ("Base Layer.Rest"); //自分で加えたやつ Grasshopper grassHopper; /**************************中略***********************/ // JUMP中の処理 else if (currentBaseState.nameHash == jumpState) {      //cameraObject.SendMessage ("setCameraPositionJumpView"); // ジャンプ中のカメラに変更 if (!anim.IsInTransition (0)) { // 以下、カーブ調整をする場合の処理 if (useCurves) { // 以下JUMP00アニメーションについているカーブJumpHeightとGravityControl // JumpHeight:JUMP00でのジャンプの高さ(0〜1) // GravityControl:1⇒ジャンプ中(重力無効)、0⇒重力有効 float jumpHeight = anim.GetFloat ("JumpHeight"); float gravityControl = anim.GetFloat ("GravityControl"); if (gravityControl > 0) rb.useGravity = false; // レイキャストをキャラクターのセンターから落とす Ray ray = new Ray (transform.position + Vector3.up, -Vector3.up); RaycastHit hitInfo = new RaycastHit (); if (Physics.Raycast (ray, out hitInfo)) { if (hitInfo.distance > useCurvesHeight) { col.height = orgColHight - jumpHeight; float adjCenterY = orgVectColCenter.y + jumpHeight; col.center = new Vector3 (0, adjCenterY, 0); } else { // 閾値よりも低い時には初期値に戻す(念のため) resetCollider (); } } } anim.SetBool ("Jump", false); //自分で追加しました if (Input.GetButtonDown("Jump") && !anim.IsInTransition(0)) { anim.Play("Jump", 0,0); rb.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange); grassHopper.apper(true); //該当部分です } } }

Grasshopper.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Grasshopper : MonoBehaviour { GameObject GHCube; void Start() { GHCube = (GameObject)Resources.Load("GHCube"); } public void apper(bool enable) { if (enable) { Instantiate(GHCube, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity); } } }

GHCubeのパス
Assets/Resources/GHCube.prefab

試したこと

前にプレハブを使ってCubeを出現させるということをしていて、その時のプロジェクトで if(Input.GetKeyDown(KeyCode.Space)) と付け足して押したら出てくるというようにしたらでき、またファイルの名前などチェックしてあっていました。

unity公式のAPIリファレンスや、プレハブを用意して出現させるやり方を書いている サイト https://www.sejuku.net/blog/55260 で構文ややり方を確認しましたが、ほぼ間違いないです。

またエラー文からなにかがセットされてないのはわかったのですが、なにがセットされていないのかわかりません。ファイル間でのデータのやりとりがうまくいっていないのでしょうか?

補足情報(FW/ツールのバージョンなど)

前やっていたプロジェクトは 2019.2.11f1 Personal
今のは 2019.3.0f6 Personal
Visual Studio 2019 の最新版です

よろしければ足元に出現させる方法や出現させたものの消し方などわかりやすいサイトがありましたら、教えていただけると幸いです。

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

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

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

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

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

bboydaisuke

2020/07/24 07:45

とりあえず164行も数えたり、164行目はこの辺かな~とかスクロールして探すのとかほとんどの人はしないと思うので、エラー該当行に何が書かれているのか見ただけでわかるようにしてください。
bboydaisuke

2020/07/24 08:51 編集

grassHopper というオブジェクト変数が空っぽ (null) だから呼べません、というエラーですが、このオブジェクトはどこで何と宣言されていて、どこで値を代入していますか?質問に対して修正・追記してください。
guest

回答1

0

ベストアンサー

その grassHopper という変数は宣言されて中身が空っぽのまま呼び出されたので NullReferenceException になってます。Null を参照している例外ですね。

コンピュータには「どれを操作したらよいのか」を教えていないので、コンピュータはわからないと言っているわけです。

その辺のことは Unity の入門書にはどれにでも書いてあるので、そういうので勉強したらいいんじゃないかと思います。ググって出てきた断片的な知識をかき集めてもそれらは仕組みを理解した上での話なので、仕組みを理解するようにしましょう。

仕組みを理解するまで、実行中にオブジェクトを出現させたりしないようなゲームを作るのがよいでしょう。

投稿2020/07/24 14:54

bboydaisuke

総合スコア5291

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問