Я новичок в C # и Unity и не могу понять эти ошибки в моем скрипте после нескольких часов поиска - PullRequest
0 голосов
/ 11 октября 2019

Я работал со своей группой весь день, чтобы выяснить некоторые ошибки в нашем сценарии, которые мы написали, чтобы не только перемещать корабль из стороны в сторону, но и наклонять его по мере движения. К сожалению, после многочасовой работы и, казалось бы, приближения к работе нашего скрипта, мы не можем понять, почему появляются эти ошибки и чего нам не хватает. Мы с благодарностью примем любую помощь.

using System.Collections.Generic;
using UnityEngine;

public class PlayerControllerV2 : MonoBehaviour
{
  Rigidbody rb;
  [Range(0,20)] public float speed = 2.0f;
  public float constant = 1f;
  float moveHorizontal = Input.GetAxis("Horizontal");
  float moveVertical = Input.GetAxis("Vertical");

  void Start()
  {
    var smooth = 2.0;
    var tiltAngle = 30.0;
    rb = GetComponent<Rigidbody>();
    rb.freezeRotation = false;
  }

  void Update()
  {
    var tiltAroundZ;
    var tiltAroundX;

    tiltAroundZ = Input.GetAxis("Horizontal") * tiltAngle * constant;
    tiltAroundX = Input.GetAxis("Vertical") * tiltAngle * constant;
    if(Input.GetKey(Keycode.A)||Input.GetKey(Keycode.D))
    {
      while(Input.GetKey(Keycode.A)||Input.GetKey(Keycode.D))
      {
        if(constant <= 10f)
        {
          constant *= 1.1f;
          float moveHorizontal = Input.GetAxis("Horizontal");
          tiltAroundZ = Input.GetAxis("Horizontal") * tiltAngle * constant;
          tiltAroundX = Input.GetAxis("Vertical") * tiltAngle * constant;
          Rigidbody.AddForce(new Vector3(moveHorizontal, 0.0f, moveVertical) * speed);
          var target = Quaternion.Euler (tiltAroundX, 0, tiltAroundZ);
        }
        else if(constant >= 10.1f)
        {
          continue;
        }
      }
      while(Input.GetKey(KeyCode.W)||Input.GetKey(KeyCode.S))
      {
        if(constant <= 10f)
        {
          constant *= 1.1f;
          tiltAroundX = Input.GetAxis("Vertical") * tiltAngle * constant;
          tiltAroundZ = Input.GetAxis("Horizontal") * tiltAngle * constant;
          tiltAroundX = Input.GetAxis("Vertical") * tiltAngle * constant;
          Rigidbody.AddForce(new Vector3(moveHorizontal, 0.0f, moveVertical) * speed);
          var target = Quaternion.Euler (tiltAroundX, 0, tiltAroundZ);
        }
        else if(constant >= 10.1f)
        {
          continue;
        }
      }
    }
  }
}

Это наша консоль: Ошибки консоли Unity

1 Ответ

2 голосов
/ 11 октября 2019

Во-первых, вы вообще никогда не должны публиковать здесь ИЗОБРАЖЕНИЯ кода или ошибок!
Скорее скопируйте и вставьте необработанный текст в ваш вопрос и отформатируйте его соответствующим образом. *

Вы не можете использовать

var tiltAroundZ;

без предварительной инициализации. В основном именно то, что ошибки говорят вам. Просто измените его на

float tiltAroundZ = 0f;

Вы объявили tiltAngle как локальную переменную в Start

private void Start()
{
    ...
    var tiltAngle = 30.0;
    ...
}

, чтобы она не была доступна для другихметод. Скорее сделайте это полем в классе. Вероятнее всего, вы также захотите, чтобы это было float, а не double

private float tiltAngle = 30.0f;

Keycode - это опечатка: это капитал C in KeyCode

Ваш экземпляр Rigidbody хранится в поле с именем rb, поэтому оно должно быть

rb.AddForce(new Vector3(moveHorizontal, 0.0f, moveVertical) * speed);

Еще кое-что

Обе инициализации

float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");

не имеют смысла на этом этапе. В любом случае они всегда будут 0, так как при запуске приложения вход еще не обрабатывается.

еще одна огромная проблема в вашем коде, а именно эта строка

while(Input.GetKey(Keycode.A)||Input.GetKey(Keycode.D))

Вы почти никогда не хотите никакой цикл while в Unity - особенно нетв методе Update!

Это просто остановит ваше приложение / весь редактор Unity до тех пор, пока не будет выполнено условие continue, поскольку Input.GetKey никогда не изменит свое значение в одном кадре!

Я не совсем понимаю, какова ваша цель с этим, но вместо того, чтобы продолжать звонить AddForce несколько раз, вы должны вместо этого вызывать его только один раз с правильным количеством силы вместо этого.

Вы также никогда не сбрасываете constant поэтому после достижения >= 10 вы игнорируете любой пользовательский ввод ...


Ошибки от CameraTitle не могут быть исправлены здесь без показа этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...