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

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

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

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

解決済

Unity で 「NullReferenceException: Object reference not set to an instance of an object」というメッセージが出る

sakiju
sakiju

総合スコア2

Unity3D

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

2回答

0リアクション

0クリップ

611閲覧

投稿2022/07/21 12:36

前提

スターターアセットのThirdPersonControllerでエラーが発生しました 昨日までエラーはなく正常に動きました
Unityで「NullReferenceException: Object reference not set to an instance of an object」というメッセージが出ます。

実現したいこと

エラーが出ないようにしたい

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

NullReferenceException: Object reference not set to an instance of an object StarterAssets.ThirdPersonController.Move () (at Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs:209) StarterAssets.ThirdPersonController.Update () (at Assets/StarterAssets/ThirdPersonController/Scripts/ThirdPersonController.cs:122)

該当のソースコード

unity

private void Start() { _hasAnimator = TryGetComponent(out _animator); _controller = GetComponent<CharacterController>(); _input = GetComponent<StarterAssetsInputs>(); AssignAnimationIDs(); // reset our timeouts on start _jumpTimeoutDelta = JumpTimeout; _fallTimeoutDelta = FallTimeout; } private void Update() { _hasAnimator = TryGetComponent(out _animator); JumpAndGravity(); GroundedCheck(); ここ Move(); } private void LateUpdate() { CameraRotation(); } private void AssignAnimationIDs() { _animIDSpeed = Animator.StringToHash("Speed"); _animIDGrounded = Animator.StringToHash("Grounded"); _animIDJump = Animator.StringToHash("Jump"); _animIDFreeFall = Animator.StringToHash("FreeFall"); _animIDMotionSpeed = Animator.StringToHash("MotionSpeed"); } private void GroundedCheck() { // set sphere position, with offset Vector3 spherePosition = new Vector3(transform.position.x, transform.position.y - GroundedOffset, transform.position.z); Grounded = Physics.CheckSphere(spherePosition, GroundedRadius, GroundLayers, QueryTriggerInteraction.Ignore); // update animator if using character if (_hasAnimator) { _animator.SetBool(_animIDGrounded, Grounded); } } private void CameraRotation() { // if there is an input and camera position is not fixed if (_input.look.sqrMagnitude >= _threshold && !LockCameraPosition) { _cinemachineTargetYaw += _input.look.x * Time.deltaTime; _cinemachineTargetPitch += _input.look.y * Time.deltaTime; } // clamp our rotations so our values are limited 360 degrees _cinemachineTargetYaw = ClampAngle(_cinemachineTargetYaw, float.MinValue, float.MaxValue); _cinemachineTargetPitch = ClampAngle(_cinemachineTargetPitch, BottomClamp, TopClamp); // Cinemachine will follow this target CinemachineCameraTarget.transform.rotation = Quaternion.Euler(_cinemachineTargetPitch + CameraAngleOverride, _cinemachineTargetYaw, 0.0f); } private void Move() { // set target speed based on move speed, sprint speed and if sprint is pressed float targetSpeed = _input.sprint ? SprintSpeed : MoveSpeed; // a simplistic acceleration and deceleration designed to be easy to remove, replace, or iterate upon // note: Vector2's == operator uses approximation so is not floating point error prone, and is cheaper than magnitude // if there is no input, set the target speed to 0 if (_input.move == Vector2.zero) targetSpeed = 0.0f; // a reference to the players current horizontal velocity float currentHorizontalSpeed = new Vector3(_controller.velocity.x, 0.0f, _controller.velocity.z).magnitude; float speedOffset = 0.1f; float inputMagnitude = _input.analogMovement ? _input.move.magnitude : 1f; // accelerate or decelerate to target speed if (currentHorizontalSpeed < targetSpeed - speedOffset || currentHorizontalSpeed > targetSpeed + speedOffset) { // creates curved result rather than a linear one giving a more organic speed change // note T in Lerp is clamped, so we don't need to clamp our speed _speed = Mathf.Lerp(currentHorizontalSpeed, targetSpeed * inputMagnitude, Time.deltaTime * SpeedChangeRate); // round speed to 3 decimal places _speed = Mathf.Round(_speed * 1000f) / 1000f; } else { _speed = targetSpeed; } _animationBlend = Mathf.Lerp(_animationBlend, targetSpeed, Time.deltaTime * SpeedChangeRate); // normalise input direction Vector3 inputDirection = new Vector3(_input.move.x, 0.0f, _input.move.y).normalized; // note: Vector2's != operator uses approximation so is not floating point error prone, and is cheaper than magnitude // if there is a move input rotate player when the player is moving if (_input.move != Vector2.zero) { ここ _targetRotation = Mathf.Atan2(inputDirection.x, inputDirection.z) * Mathf.Rad2Deg + _mainCamera.transform.eulerAngles.y; float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, _targetRotation, ref _rotationVelocity, RotationSmoothTime); // rotate to face input direction relative to camera position transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f); } Vector3 targetDirection = Quaternion.Euler(0.0f, _targetRotation, 0.0f) * Vector3.forward; // move the player _controller.Move(targetDirection.normalized * (_speed * Time.deltaTime) + new Vector3(0.0f, _verticalVelocity, 0.0f) * Time.deltaTime); // update animator if using character if (_hasAnimator) { _animator.SetFloat(_animIDSpeed, _animationBlend); _animator.SetFloat(_animIDMotionSpeed, inputMagnitude); } }

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

ここと書いているのが該当箇所です
unity 2020 3.25 f1 personal です

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Unity3D

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