网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月24日漏签0天
unity3d吧 关注:116,812贴子:562,112
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 9回复贴,共1页
<<返回unity3d吧
>0< 加载中...

新手求教:我的AI赛车为什么跑不远

  • 只看楼主
  • 收藏

  • 回复
  • sky凌绫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • sky凌绫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@Mano丶Erina


2025-12-24 06:49:54
广告
不感兴趣
开通SVIP免广告
  • sky凌绫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求大神解答


  • sky凌绫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有没有做过赛车游戏的呢


  • Tanis_XBOX_PS
  • Scene
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
都不知道你的算法,怎么回答你。。。


  • sky凌绫
  • Collider
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
public class AICarControl : MonoBehaviour {
public WheelCollider FrontLeftWheel;
public WheelCollider FrontRightWheel;
public WheelCollider BackLeftWheel;
public WheelCollider BackRightWheel;
public float[] GearRatio;
public int CurrentGear=0;
public float EngineTorgue=600.0f;
public float MaxEngineRPM=3000.0f;
public float MinEngineRPM=1000.0f;
private float EngineRPM=0.0f;
public GameObject waypointContainer;
private ArrayList waypoints;
private int currentWaypoint=0;
private float inputSteer=0.0f;
private float inputTorque=0.0f;
// Use this for initialization
void Start () {
Vector3 centerOfMass=rigidbody.centerOfMass;
centerOfMass.y=-1.5f;
rigidbody.centerOfMass=centerOfMass;
GetWaypoints();
}
// Update is called once per frame
void Update () {
rigidbody.drag=rigidbody.velocity.magnitude/250;
NavigateTowardsWaypoint();
EngineRPM=(FrontLeftWheel.rpm+FrontRightWheel.rpm)/2*GearRatio[CurrentGear];
ShiftGears();
audio.pitch=Mathf.Abs(EngineRPM/MaxEngineRPM)+1.0f;
if(audio.pitch>2.0)
{
audio.pitch=2.0f;
}
BackLeftWheel.motorTorque=EngineTorgue/GearRatio[CurrentGear]*inputTorque;
BackRightWheel.motorTorque=EngineTorgue/GearRatio[CurrentGear]*inputTorque;
FrontLeftWheel.steerAngle=10*inputSteer;
FrontRightWheel.steerAngle=10*inputSteer;
}
void ShiftGears()
{
int AppropriateGear=CurrentGear;
if(EngineRPM>=MaxEngineRPM)
{
AppropriateGear=CurrentGear;
for(int i=0;i<GearRatio.Length;i++)
{
if(FrontLeftWheel.rpm*GearRatio[i]<MaxEngineRPM)
{
AppropriateGear=i;
break;
}
}
CurrentGear=AppropriateGear;
}
if(EngineRPM<=MaxEngineRPM)
{
AppropriateGear=CurrentGear;
for(int j=GearRatio.Length-1;j>=0;j--)
{
if(FrontLeftWheel.rpm*GearRatio[j]>MinEngineRPM)
{
AppropriateGear=j;
break;
}
}
CurrentGear=AppropriateGear;
}
}
void GetWaypoints()
{
Transform[] potentialWaypoints =waypointContainer.GetComponentsInChildren<Transform>();
waypoints= new ArrayList();
foreach(Transform potentialWaypoint in potentialWaypoints)
{
if(potentialWaypoint!=waypointContainer.transform)
{
waypoints.Add(potentialWaypoint);
}
}
}
void NavigateTowardsWaypoint()
{
Transform waypos=(Transform)waypoints[currentWaypoint];
Vector3 RelativeWaypointPosition=transform.InverseTransformPoint(waypos.position.x,
transform.position.y,
waypos.position.z);
inputSteer=RelativeWaypointPosition.x/RelativeWaypointPosition.magnitude;
if(Mathf.Abs(inputSteer)<0.5)
{
inputTorque=RelativeWaypointPosition.z/RelativeWaypointPosition.magnitude-Mathf.Abs(inputSteer);
}
else
{
inputTorque=0.0f;
}
if(RelativeWaypointPosition.magnitude<20)
{
currentWaypoint++;
if(currentWaypoint>=waypoints.Count)
{
currentWaypoint=0;
}
}
}
}


  • 虚拟世界
  • Scene
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额,我对AI还真没研究过。。


  • 1274669874
  • Animator
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你这个是最简单的AICAR的程序了,新手用这个就可以了。
脚本功能是寻坐标点,不断寻找下一个坐标点,但在实际运行的时候AICAR速度太快经常绕超过坐标点,比如刚刚在waypoint4的位置,因为转弯绕过了waypoint5,直接到了waypoint6的位置,这时候他会减速或掉头寻找waypoint5,单如果遇到碰撞什么的就会停下来。
我想你还会遇到车倒着走的情况吧。
如果要实现真实的AI,就需要AI会真正的计算路线和距离,会在特定的情况下漂移、刹车、减速等等。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回unity3d吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示