C# AI汽车统一错误旋转

C# AI汽车统一错误旋转,c#,unity3d,C#,Unity3d,这是我的第一篇帖子,如果我做错了什么,请告诉我。我在Unity 5.5中做一个2D汽车游戏,具有自上而下的视图。对于游戏,我需要一些汽车有一个简单的AI脚本,只是为了遵循一条路径。因此,我在网上搜索了一些适合我需要的东西,并(在我看来)找到了一个非常好的实现。在这里,我让您在GitHub中查看项目,我想是由实现所有者上传的: 简单地说,我们用空的游戏对象和相应的碰撞器创建了一条路径,我们必须有一辆车(显然)和一个碰撞器和一个刚体2d,我们有三个“变魔术”的脚本。对于我的项目,我删除了计算圈数的部

这是我的第一篇帖子,如果我做错了什么,请告诉我。我在Unity 5.5中做一个2D汽车游戏,具有自上而下的视图。对于游戏,我需要一些汽车有一个简单的AI脚本,只是为了遵循一条路径。因此,我在网上搜索了一些适合我需要的东西,并(在我看来)找到了一个非常好的实现。在这里,我让您在GitHub中查看项目,我想是由实现所有者上传的:

简单地说,我们用空的游戏对象和相应的碰撞器创建了一条路径,我们必须有一辆车(显然)和一个碰撞器和一个刚体2d,我们有三个“变魔术”的脚本。对于我的项目,我删除了计算圈数的部分,因为我的游戏不是比赛。好吧,我设置好了,一切都很好!除了一件事:汽车的旋转

我认为这是因为教程游戏是一个自上而下的视图,但汽车从左到右,在我的游戏中也是自上而下的,但汽车从下到上。因此,我的项目中的汽车精灵处于自上而下视图并向上看,而github项目中的汽车精灵处于自上而下视图并向右看(我想上传图像,但由于我的声誉,我似乎不能这样做,对不起)

毫无疑问,人工智能工作得非常好,汽车在行驶过程中没有任何问题,但旋转错误,如下所示:

我试着在Aicharmovement脚本中改变与向量和角度相关的内容,但运气不佳,所以如果有人能帮我一把,我将不胜感激。如果有人想了解问题的更多细节,请告诉我。我试着上传更多的东西,比如图片或礼物来显示问题,但由于声誉问题,我不能这么做

这是我认为我必须更改的AiArmovement中的代码部分:

public class AICarMovement : MonoBehaviour {
public float acceleration = 0.5f;
public float braking = 0.3f;
public float steering = 4.0f;
private Rigidbody2D rigidb;

Vector3 target;

void Start() {
    rigidb = GetComponent<Rigidbody2D>();
}

public void OnNextTrigger(TrackLapTrigger next){
    target = Vector3.Lerp(next.transform.position - next.transform.right, next.transform.position + next.transform.right, Random.value);
}

void steerTowardsTarget() {
    Vector2 towarNextTrigger = target - transform.position;
    float targetRot = Vector2.Angle(Vector2.right, towarNextTrigger);
    if(towarNextTrigger.y < 0.0f) {
        targetRot = -targetRot;
    }
    float rot = Mathf.MoveTowardsAngle(transform.localEulerAngles.z, targetRot, steering);
    transform.eulerAngles = new Vector3(0.0f, 0.0f, rot);
}

void FixedUpdate(){
    steerTowardsTarget();
    float velocity = rigidb.velocity.magnitude;
    velocity += acceleration;
    rigidb.velocity = transform.right * velocity;
    rigidb.angularVelocity = 0.0f;
}
公共类AiArmovement:单一行为{
公众浮子加速度=0.5f;
公共浮动制动=0.3f;
公共浮动转向=4.0f;
私有Rigidbody2D rigidb;
矢量3靶;
void Start(){
rigidb=GetComponent();
}
public void OnNextTrigger(TrackLapTrigger next){
target=Vector3.Lerp(next.transform.position-next.transform.right,next.transform.position+next.transform.right,Random.value);
}
void SteedTowardStarGet(){
Vector2 towarNextTrigger=目标-transform.position;
float targetRot=Vector2.角度(Vector2.右侧,指向WARNEXTRIGGER);
如果(towarNextTrigger.y<0.0f){
targetRot=-targetRot;
}
float rot=Mathf.MoveTowardsAngle(transform.localeularangles.z、targetRot、转向);
transform.eulerAngles=新矢量3(0.0f,0.0f,rot);
}
void FixedUpdate(){
SteedTowardStarGet();
浮动速度=刚体B.velocity.magnitude;
速度+=加速度;
rigidb.velocity=transform.right*速度;
刚体B.angularVelocity=0.0f;
}
}

对不起,我的英语不是我的母语。

在SteedTowardStarGet()中,第二行:
尝试将Angle()的第一个参数从Vector2.right更改为Vector2.up。

旋转您的精灵和“繁殖”游戏对象。这样一来,您就不会有任何奇特的行为,而且看起来都是正确的。

请尝试在您的问题正文中包含相关代码-注意,我们不需要(甚至不需要)整个项目,只需要根据您的航路点处理移动/旋转汽车的代码。这个网站希望问题是独立的,这意味着解决问题的所有信息都应该在这篇文章中(即,不要依赖场外链接)。是的,你说得对,我在上传文章后意识到了这一点。我会编辑文章,包括相关代码。谢谢,你好!是的,我以前试过,但不起作用。汽车发疯了,你是不是只是想把你的雪碧转过来?还是像孩子一样,在你旋转的汽车上使用一个空的游戏对象?啊,等等。您是否将Vector2和transform.right更改为最后一行中的.up?还有两个变换。在OnNextTrigger()中正确。是的,如果我打开我的精灵,效果很好,但是当一辆车生成时,在场景中出现旋转,这看起来不那么优雅。哈哈,是的,我也尝试将“正确的事情”改为向上,但什么都没有。这辆车甚至都不是那样开的:(如果汽车没有正确的产卵方式,你可以从产卵游戏对象调整旋转。我不知道答案。谢谢!我不这么认为。我使用旋转精灵,但旋转游戏对象让正确的旋转,现在很好!最后它比我想的要简单。非常感谢!如果你想要最后的评论,请把它作为一个例子回答正确,因此我将其标记为正确答案。