शुभ दिवस

मैं अपने पहले एकता कार्यक्रमों में से एक लिख रहा हूं, और मुझे एक त्रुटि मिल रही है जो मुझे समझ में नहीं आती है। मेरे पास स्क्रीन पर एक चरित्र है जिसे खेल शुरू होने पर मैं एक यादृच्छिक दिशा में ले जाता हूं। चरित्र हमेशा एक ही दिशा में आगे बढ़ता प्रतीत होता है, हालांकि इस तथ्य के बावजूद कि मैं मूल्य को यादृच्छिक बना रहा हूं।

मैं एक सीमा तक पहुँचते ही बेतरतीब ढंग से दिशा बदलने का इरादा रखता हूँ, लेकिन यह भी काम नहीं करता है। दिशा कभी नहीं बदलती है, और मैं सोच रहा हूं कि क्या यह रन टाइम त्रुटि के कारण है जो मुझे प्राप्त हो रहा है।

त्रुटि मुझे बता रही है कि मेरी कक्षा के अंदर 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 चर) सेट है: यहां छवि विवरण दर्ज करें

यहां त्रुटि है जो मुझे मिल रही है:

UnassignedReferenceException: यूनिट के वेरिएबल आरबी को असाइन नहीं किया गया है। आपको शायद इंस्पेक्टर में यूनिट स्क्रिप्ट के आरबी वेरिएबल को असाइन करने की आवश्यकता है। UnityEngine.Rigidbody2D.set_velocity (Vector2 मान) (C:/buildslave/unity/build/artifacts/generated/common/modules/Physics2D/Physics2DBindings.gen.cs:2060 पर) Unit.randomDirection () (एसेट/स्क्रिप्ट/यूनिट पर) .cs:36) Unit.Start () (Assets/Scripts/Unit.cs:17 पर)

मुझे यकीन नहीं है कि मैं जाँच कर रहा हूँ कि क्या सीमा सही तरीके से पहुँची जा रही है। मैं इकाई को अपनी स्क्रीन की सीमा तक सीमित करने के लिए क्लैंप कमांड का उपयोग कर रहा हूं। मैंने अगर कथन में एक डीबग डाला है जो मेरी सीमा की जांच करता है, और ऐसा लगता है कि यह उस तक पहुंच गया है, लेकिन फिर भी कोई दिशा नहीं बदली है।

किसी भी सलाह की काफी सराहना की जाएगी। अग्रिम में धन्यवाद!

1
phunder 3 अक्टूबर 2018, 18:26

1 उत्तर

सबसे बढ़िया उत्तर

आपको यह त्रुटि तब मिलती है जब आपकी स्क्रिप्ट कई गेमऑब्जेक्ट या एक ही गेमऑब्जेक्ट से दो बार जुड़ी होती है और अन्य ऑब्जेक्ट में वेरिएबल असाइन नहीं किया जाता है।

आपके स्क्रीनशॉट के साथ, यह एक ही GameObject से दो बार जुड़ा हुआ है। पहले वाले में Rigidbody को rb वैरिएबल स्लॉट में प्लग किया गया है। दूसरा नहीं करता है। एक Unit स्क्रिप्ट को हटा दें जो Rigidbody घटक के ऊपर है क्योंकि वह वह है जिसमें rb वेरिएबल को कुछ भी असाइन नहीं किया गया है।

इसे हटाने का तरीका इस प्रकार है:

enter image description here

2
Programmer 3 अक्टूबर 2018, 18:33