Unity中的运行时错误可能会破坏随机方向变化

时间:2018-10-03 15:26:56

标签: c# unity3d

美好的一天

我正在编写我的第一个统一程序,但遇到一个对我来说没有道理的错误。游戏开始时,我在屏幕上有一个随机移动的角色。尽管我正在随机分配值,但角色似乎总是朝着同一方向移动。

我打算在达到极限后立即随机改变方向,但这似乎也不起作用。方向似乎从未改变,我想知道这是否是由于我收到的运行时错误所致。

该错误告诉我未设置类中的RigidBody变量。我知道我已经设置好了,而且角色移动的事实告诉我正在找到刚体组件。

我的代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Unit : MonoBehaviour {

    // Use this for initialization
    int direction;
    public Rigidbody2D rb;
    int speed = 5;
    int maxX = 6;
    int minX = -6;
    int maxY = 4;
    int minY = -4;
    void Start () {
        randomDirection();
    }

    void randomDirection()
    {
        System.Random rand = new System.Random(Guid.NewGuid().GetHashCode());

        int temp = -1;

        while(temp != direction)
        {
            temp = rand.Next(0, 4);
        }

        direction = temp;

        switch (direction)
        {
            case 0:
                rb.velocity = new Vector2(-speed, 0);
                break;
            case 1:
                rb.velocity = new Vector2(speed, 0);
                break;
            case 2:
                rb.velocity = new Vector2(0, -speed);
                break;
            case 3:
                rb.velocity = new Vector2(0, speed);
                break;
        }
    }

    // Update is called once per frame
    void Update () {        

        if (transform.position.x >= maxX || transform.position.y >= maxY || transform.position.y <= minX || transform.position.y <= minY)
        {
            randomDirection();           
        }

        Vector2 pos = transform.position;
        pos.x = Mathf.Clamp(pos.x, -maxX, maxX);
        pos.y = Mathf.Clamp(pos.y, -maxY, maxY);
        transform.position = pos;
    }
}

这是我的检查器的屏幕快照,显示设置了rb(我的RigidBody变量): enter image description here

这是我收到的错误:

  

UnassignedReferenceException:单位的变量rb尚未被使用   已分配。您可能需要分配Unit的rb变量   检查器中的脚本。 UnityEngine.Rigidbody2D.set_velocity(Vector2   值)(在   C:/buildslave/unity/build/artifacts/generated/common/modules/Physics2D/Physics2DBindings.gen.cs:2060)   Unit.randomDirection()(在Assets / Scripts / Unit.cs:36处)Unit.Start()   (位于Assets / Scripts / Unit.cs:17)

我不确定是否正在检查是否已正确达到限制。我正在使用钳位命令将单位限制为屏幕的限制。我在if语句中放入了一个调试命令,该命令检查了我的限制,并且似乎已经达到了限制,但是方向仍然没有改变。

任何建议将不胜感激。预先感谢!

1 个答案:

答案 0 :(得分:2)

当您的脚本很可能两次附加到多个GameObject或相同的GameObject并且附加了未在另一个对象中分配的变量时,会出现此错误。

使用您的屏幕快照,将其两次附加到相同的GameObject。第一个将Rigidbody插入rb可变插槽中。第二个没有。删除Unit组件上方的一个Rigidbody脚本,因为该脚本没有为rb变量分配任何内容。

这是删除方法:

enter image description here