인프런 커뮤니티 질문&답변

윤원준님의 프로필 이미지
윤원준

작성한 질문수

유니티 머신러닝 에이전트 완전정복 (기초편)

CS0246 DroneSetting 오류

해결된 질문

작성

·

277

0

안녕하세요, 강의 잘 수강하고 있습니다.
 
드론 에셋을 가져와서 스크립트를 작성하는 과정에 있는데, 아래와 같은 오류가 발생하여 질문드립니다.
 
CS0246: The type or namespace name 'DroneSetting' could not be found 에러가 발생했는데, 어떻게 해결할 수 있을까요?
Unity 버전은 2021.2.16f1 을 사용하고 있으며, ML Agents는 2.0.0-exp.1, ML Agents Extensions는 0.4.0-preview 버전입니다.
 
코드는 아래와 같습니다.
 
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using PA_DronePack;

public class DroneAgent : Agent
{
    public PA_DroneController dcoScript;

    public DroneSetting area;
    public GameObject goal;

    float preDist;

    private Transform agentTrans;
    private Transform goalTrans;
     
    private Rigidbody agent_Rigidbody;

    public override void Initialize()
    {
        base.Initialize();
        
        dcoScript = gameObject.Getcomponent<PA_DroneController>();

        agentTrans = gameObject.transform;
        goalTrans = goal.transform;

        agent_Rigidbody = gameObject.GetComponent<agent_Rigidbody>();

        Academy.Instance.AgentPreStep += WaitTimeInterference;

    }

    public override void CollectObservations(VectorSensor sensor)
    {
        //거리벡터
        sensor.AddObservation(agentTrans.position - goalTrans.position);

        //속도벡터
        sensor.AddObservation(agent_Rigidbody.velocity);

        //각속도벡터
        sensor.AddObservation(agent_Rigidbody.angularVelocity);

    }

    public override void OnActionReceived(ActionBuffers actionBuffers)
    {
        AddReward(-0.01f);

        var actions = actionBuffers.ContinuousActions;

        float moveX = Mathf.Clamp(actions[0], -1, 1f);
        float moveY = Mathf.Clamp(actions[1], -1, 1f);
        float moveZ = Mathf.Clamp(actions[2], -1, 1f);

        dcoScript.DriveInput(moveX);
        dcoScript.StrafeInput(moveY);
        dcoScript.LiftInput(moveZ);

        float distance = Vector3.Magnitude(goalTrans.position - agentTrans.position);

        if(distance <=0.5f)
        {
            SetReward(1f);
            EndEpisode();
        }
        else if(distance >10f)
        {
            SetReward(-1f);
            EndEpisode();

        }
        else
        {
            floar reward = preDist - distance;
            AddReward(reward);
            preDist = distance;
        }
        
    }
    public override void OnEpisodeBegin()
    {
        area.AreaSetting();
        preDist = Vector3.Magnitude(goalTrans.position - agentTrans.position);
    }

    public override void Heuristic(in ActionBuffers actionsOut)
    {
        var continuousActionsOut = actionsOut.ContinuousActions;

        continuousActionsOut[0] = Input.GetAxis("Vertical");
        continuousActionsOut[1] = Input.GetAxis("Horizontal");
        continuousActionsOut[2] = Input.GetAxis("Mouse ScrollWheel");
    }

    public float DecisionWaitingTime = 5f;
    float m_currentTime = 0f;

    public void WaitTimeInterference(int action)
    {
        if(Academy.Instance.IsCommunicatorOn)
        {
            RequestDecision();
        }
        else
        {
            if(m_currentTime >=DecisionWaitingTime)
            {
                m_currentTime = 0f;
                RequestDecision();
            }
            else
            {
                m_currentTime += m_currentTime.fixedDeltaTime;
            }
        }
    }

}

 

 
아울러, 드론 에셋 가져오기 & 오브젝트 추가 강의에서, PA_Drone Axis Input과 PA_Drone Controller도 체크를 할 수 없게 되면서, "The associated script can not be loaded. Please fix any compile erroes and open Prefab Mode and assign a valid script to the Prefab Asset" 이라는 문구가 나오는데, 이 문제는 어떻게 해결할 수 있을지 질문드립니다.
 
두 오류가 연관이 있을 수도 있겠습니다.
 
확인해 주시면 감사하겠습니다

답변 2

1

민규식님의 프로필 이미지
민규식
지식공유자

앗..! 해결하셨군요...! ㅜㅜㅜ 답변이 늦어서 죄송합니다 ㅜㅜ 혹시 어떻게 해결하셨는지 공유해주실 수 있으실까요?? 

윤원준님의 프로필 이미지
윤원준
질문자

아 제가 코드를 작성하던 부분에서 실수가 있었던 것 같습니다. 깃헙에 있는 코드를 그대로 복붙하니 오류가 해결되었습니다..!

민규식님의 프로필 이미지
민규식
지식공유자

다행이네요! :) 

1

윤원준님의 프로필 이미지
윤원준
질문자

아 해결했습니다!! 감사합니다

윤원준님의 프로필 이미지
윤원준

작성한 질문수

질문하기