首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unity3D赛车游戏加速场,c#

unity3D赛车游戏加速场,c#
EN

Stack Overflow用户
提问于 2017-06-07 11:04:26
回答 2查看 515关注 0票数 0

对于摩托车赛车游戏,我想要一些部分的赛道,以提高摩托车的速度。

我有一个用于速度的公共浮标,它显示了检查员的速度。

我添加了一架带有对撞机的飞机,它是一个触发器,上面有“快速场”标签,现在我想,一些简单的代码,附在下面的摩托车记录上,就可以做到了:

代码语言:javascript
复制
void OnTriggerEnter(Collider other)
{

    if (other.gameObject.CompareTag ("speedfield")) {
        Speed = Speed + 50;
    }
}

但什么都没发生。我想我漏掉了一些显而易见的东西。希望你能帮忙!德国的问候:)

代码语言:javascript
复制
void FixedUpdate (){

    Inputs();
    Engine();
}

void Inputs (){

    Speed = rigid.velocity.magnitude * 3.6f;

    //Freezing rotation by Z axis.
    transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0);

    //If crashed...
    if(!crashed){
        if(!changingGear)
            motorInput = Input.GetAxis("Vertical");
        else
            motorInput = Mathf.Clamp(Input.GetAxis("Vertical"), -1, 0);
        steerInput = Input.GetAxis("Horizontal");
    }else{
        motorInput = 0;
        steerInput = 0;
    }

    //Reverse bool
    if(motorInput < 0  && transform.InverseTransformDirection(rigid.velocity).z < 0) 
        reversing = true;
    else
        reversing = false;

}

void Engine (){

    //Steer Limit.
    SteerAngle = Mathf.Lerp(defsteerAngle, highSpeedSteerAngle, (Speed / highSpeedSteerAngleAtSpeed));
    FrontWheelCollider.steerAngle = SteerAngle * steerInput;

    //Engine RPM.
    EngineRPM = Mathf.Clamp((((Mathf.Abs((FrontWheelCollider.rpm + RearWheelCollider.rpm)) * gearShiftRate) + MinEngineRPM)) / (currentGear + 1), MinEngineRPM, MaxEngineRPM);


    // Applying Motor Torque.
    if(Speed > maxSpeed){
        RearWheelCollider.motorTorque = 0;
    }else if(!reversing && !changingGear){
        RearWheelCollider.motorTorque = EngineTorque  * Mathf.Clamp(motorInput, 0f, 1f) * engineTorqueCurve[currentGear].Evaluate(Speed);
    }

    if(reversing){
        if(Speed < 10){
            RearWheelCollider.motorTorque = (EngineTorque  * motorInput) / 5f;
        }else{
            RearWheelCollider.motorTorque = 0;
        }
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-07 13:22:58

覆盖速度变量:

代码语言:javascript
复制
void FixedUpdate (){

    Inputs();
    Engine();
}

void Inputs (){

    Speed = rigid.velocity.magnitude * 3.6f;
...
}

改为:

代码语言:javascript
复制
[SerializeField] float speedMultiplier = 3.6f;
[SerializeField] float speedMultiplierChange = 2;

void Inputs (){

        Speed = rigid.velocity.magnitude * speedMultiplier;
    ...
    }

代码语言:javascript
复制
void OnTriggerEnter(Collider other)
{

    if (other.gameObject.CompareTag ("speedfield")) {
        speedMultiplier += speedMultiplierChange; 
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-06-07 12:01:58

确保本清单中的所有项目都得到满足:

  • 摩托车有一个Rigidbody组件。
  • 这架飞机没有Rigidbody组件(这是没用的,它可以减慢速度)。
  • 这架飞机的Mesh ColliderConvexisTrigger设置为true
  • OnTriggerEnter方法在摩托车脚本中。
  • 飞机触发器的厚度足够宽:如果摩托车速度太高,它可以通过飞机,而物理引擎无法登记触发器。
  • 如果是这样的话,尝试将摩托车RigidbodyRigidbody设置为Continuous和/或在时间项目设置中稍微减少Fixed Timestep

最可能的问题是由于最后两个要点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44410891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档