유니티로 간단한 차를 만들어 봤어요.
개요
지금 유니티를 공부하고 있습니다.
학습의 목적은 ET 로봇의 시뮬레이터를 만드는 것이다.
우선'지면'을 만들어 간단한'이동물'동작을
시작하기로 했어요.
유니티를 한 번도 건드리지 않았기 때문에 할 수 있는 곳부터 조금씩 시작한다.
※ 황금연휴(2019/04/27~5/1)를 이용해 약 5일 동안 공부한 기록.
학습 절차
처음에 간단한 물건을 이동하고 유니티로 시뮬레이션한 물건의
물리적 특성 등을 조사하고 싶지만, 알아차리면 간단한 차
됐어.
다음은 이번 학습의 절차입니다.
처음에 간단한 물건을 이동하고 유니티로 시뮬레이션한 물건의
물리적 특성 등을 조사하고 싶지만, 알아차리면 간단한 차
됐어.
다음은 이번 학습의 절차입니다.
참고 서적/문장
단계 1-2
단계 3
4단계
프레젠테이션
이번 성과는 뭐니 뭐니 해도 휠 접착기로 자동차를 만든 것이다.
아래의 구성이라면 30분 정도면 완성할 수 있다.
또한 튜토리얼대로 진행하면 가시화되지 않고,
나는 스스로 많은 문제를 해결했다.
다음은 실제 모의 상황이다.
공중에 떠 있는 물체(입방체)가 중력으로 차 위에 떨어지면
이렇게 차에 멈춰서 차를 움직이는 모습.
※ 바퀴도 이동 방향에 따라 가시화
C# 스크립트
이번에 만든 각본은 다음과 같다.
튜토리얼을 토대로 제작해 필요한 곳(제동기 등)을 추가했다.using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SimpleCarController : MonoBehaviour
{
public List<AxleInfo> axleInfos; // 個々の車軸の情報
public float maxMotorTorque; //ホイールに適用可能な最大トルク
public float maxSteeringAngle; // 適用可能な最大ハンドル角度
public float maxBrakeTorque;
// 対応する視覚的なホイールを見つけます
// Transform を正しく適用します
public void ApplyLocalPositionToVisuals(WheelCollider collider)
{
if (collider.transform.childCount == 0)
{
return;
}
Transform visualWheel = collider.transform.GetChild(0);
Vector3 position;
Quaternion rotation;
collider.GetWorldPose(out position, out rotation);
visualWheel.transform.position = position;
visualWheel.transform.rotation = rotation;
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void FixedUpdate()
{
float motor = maxMotorTorque * Input.GetAxis("Vertical");
float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
bool brake = Input.GetKey(KeyCode.Space);
foreach (AxleInfo axleInfo in axleInfos)
{
if (axleInfo.steering)
{
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor)
{
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
if (brake)
{
axleInfo.leftWheel.brakeTorque = maxBrakeTorque;
axleInfo.rightWheel.brakeTorque = maxBrakeTorque;
}
else
{
axleInfo.leftWheel.brakeTorque = 0;
axleInfo.rightWheel.brakeTorque = 0;
}
ApplyLocalPositionToVisuals(axleInfo.leftWheel);
ApplyLocalPositionToVisuals(axleInfo.rightWheel);
}
}
}
[System.Serializable]
public class AxleInfo
{
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor; //このホイールがエンジンにアタッチされているかどうか
public bool steering; // このホイールがハンドルの角度を反映しているかどうか
public bool brake;
}
도전하다
이번에는 여러 가지 조사를 통해 간단한 차를 만들었는데,
우리는 또 어떻게 바퀴 접착기의 물리적 운동 방정식을 세울 필요가 있다
좋을지 모르겠지만.
어렵게 간단하게 한 건 알지만,
나는 마침 이론상의 부분을 좀 더 깊이 파고들고 싶다.
Reference
이 문제에 관하여(유니티로 간단한 차를 만들어 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kanetugu2018/items/a6411ee86b2ed404031b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SimpleCarController : MonoBehaviour
{
public List<AxleInfo> axleInfos; // 個々の車軸の情報
public float maxMotorTorque; //ホイールに適用可能な最大トルク
public float maxSteeringAngle; // 適用可能な最大ハンドル角度
public float maxBrakeTorque;
// 対応する視覚的なホイールを見つけます
// Transform を正しく適用します
public void ApplyLocalPositionToVisuals(WheelCollider collider)
{
if (collider.transform.childCount == 0)
{
return;
}
Transform visualWheel = collider.transform.GetChild(0);
Vector3 position;
Quaternion rotation;
collider.GetWorldPose(out position, out rotation);
visualWheel.transform.position = position;
visualWheel.transform.rotation = rotation;
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void FixedUpdate()
{
float motor = maxMotorTorque * Input.GetAxis("Vertical");
float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
bool brake = Input.GetKey(KeyCode.Space);
foreach (AxleInfo axleInfo in axleInfos)
{
if (axleInfo.steering)
{
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor)
{
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
if (brake)
{
axleInfo.leftWheel.brakeTorque = maxBrakeTorque;
axleInfo.rightWheel.brakeTorque = maxBrakeTorque;
}
else
{
axleInfo.leftWheel.brakeTorque = 0;
axleInfo.rightWheel.brakeTorque = 0;
}
ApplyLocalPositionToVisuals(axleInfo.leftWheel);
ApplyLocalPositionToVisuals(axleInfo.rightWheel);
}
}
}
[System.Serializable]
public class AxleInfo
{
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor; //このホイールがエンジンにアタッチされているかどうか
public bool steering; // このホイールがハンドルの角度を反映しているかどうか
public bool brake;
}
이번에는 여러 가지 조사를 통해 간단한 차를 만들었는데,
우리는 또 어떻게 바퀴 접착기의 물리적 운동 방정식을 세울 필요가 있다
좋을지 모르겠지만.
어렵게 간단하게 한 건 알지만,
나는 마침 이론상의 부분을 좀 더 깊이 파고들고 싶다.
Reference
이 문제에 관하여(유니티로 간단한 차를 만들어 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kanetugu2018/items/a6411ee86b2ed404031b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)