-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
CS0246 DroneSetting 오류
22.03.26 23:05 작성 조회수 213
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