with-RL
로봇 / ROS2024년 2월 13일

URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (2)

이번 포스팅은 URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (1) 과정을 통해서 만들어진 로봇을 Unity 로봇을 C# 코드를 이용해서 직접 운전해 보는 기능을 만들어 보는 과정입니다.

이 포스트는 다음 과정을 완료한 후에 참고하시길 바랍니다.

1. Camera Controller Script 추가하기

using UnityEngine;

public class CameraController : MonoBehaviour
{

    [SerializeField] private Vector3 offset;
    [SerializeField] private Transform target;
    [SerializeField] private float translateSpeed;
    [SerializeField] private float rotationSpeed;

    private void FixedUpdate()
    {
        HandleTranslation();
        HandleRotation();
    }

    private void HandleTranslation()
    {
        var targetPosition = target.TransformPoint(offset);
        transform.position = Vector3.Lerp(transform.position, targetPosition, translateSpeed * Time.deltaTime);
    }

    private void HandleRotation()
    {
        var direction = target.position - transform.position;
        var rotation = Quaternion.LookRotation(direction, Vector3.up);
        transform.rotation = Quaternion.Lerp(transform.rotation, rotation, rotationSpeed * Time.deltaTime);
    }

}

2. Car Controller Script 추가하기

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

public class CarController : MonoBehaviour
{

    private const string HORIZONTAL = "Horizontal";
    private const string VERTICAL = "Vertical";

    private float horizontalInput;
    private float verticalInput;

    [SerializeField] private float motorForce;
    [SerializeField] private float horizontalRate;

    [SerializeField] private WheelCollider leftWheelCollider;
    [SerializeField] private WheelCollider rightWheelCollider;

    private void FixedUpdate()
    {
        GetInput();
        HandleMotor();
    }

    private void GetInput()
    {
        horizontalInput = Input.GetAxis(HORIZONTAL);
        verticalInput = Input.GetAxis(VERTICAL);
    }

    private void HandleMotor()
    {
        leftWheelCollider.motorTorque = (verticalInput + horizontalInput * horizontalRate) * motorForce;
        rightWheelCollider.motorTorque = (verticalInput - horizontalInput * horizontalRate) * motorForce;
    }

}