这是我的第一篇文章,所以如果我做错了,请告诉我。我在Unity 5.5中做了一个2D汽车游戏,有一个自上而下的视图。对于游戏,我需要一些汽车有一个简单的AI脚本,只是为了遵循一条路。所以,我在网上搜索了符合我需求的东西,并发现(在我看来)一个非常好的实现。在这里,我告诉你GitHub中的项目,由我认为的实现的所有者上传:https://github.com/mindcandy/lu-racer
所以简单地说,我们创建一个带有空GameObjects和相应碰撞器的Path,我们必须有一辆汽车(显然)并设置了一个collider和一个rigidbody2d,我们有三个脚本“做魔术” ”。对于我的项目,我删除计算圈数的部分,因为我的游戏不是比赛。好吧,我设置了一切,一切正常!除了一件事:汽车的旋转。
我认为这是因为教程游戏是一个自上而下的视图,但汽车从左到右,在我的游戏中也是自上而下,但汽车从下到上。因此,我的项目中的汽车精灵处于自上而下的视野中并且向上看,并且汽车的github项目的精灵是向上看的右上角(我想要上传图像但看起来我因为我的名声而无法做到这一点,抱歉)
当然,AI工作得非常好,汽车跟随路径没有问题,但轮换错误,如下所示:aicar_rotation
我尝试在AICarMovement脚本中更改与向量和角度相关的内容,但没有运气,所以如果有人能看到并帮助我,我将不胜感激。如果有人想了解更多细节以了解问题,请告诉我。我尝试上传更多的东西,如图片或GIF来显示问题,但我不能因为声誉而这样做。
这是AICarMovement中代码的一部分,我认为我必须改变:
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;
}
}
抱歉我的英语,不是我的母语。
答案 0 :(得分:0)
在steerTowardsTarget()中,第2行: 尝试将Angle()的第一个参数从Vector2.right更改为Vector2.up。
答案 1 :(得分:0)
转动你的精灵以及产卵游戏对象。这样你就没有花哨的行为,而且看起来都很正确。