首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity 3D -拖动和角度拖动不起作用

Unity 3D -拖动和角度拖动不起作用
EN

Stack Overflow用户
提问于 2016-01-04 11:07:17
回答 2查看 805关注 0票数 0

我在javascript中使用unity 3d的船脚本。它几乎完美地工作,只是船永远不会减速,除非你朝相反的方向按键,否则转弯会导致无限大的转弯。我尝试在检查器中为船对象本身调整质量、拖动和角度拖动,我甚至在脚本中为其添加了代码,但仍然没有效果。游戏中没有其他脚本,除了船上也有一个顺畅的跟随相机脚本。

代码语言:javascript
复制
 #pragma strict

 var speed : float = 1.0;

 var acceleration : float = 1.0;

 var maxspeed : float = 2.0;

 var minspeed : float = -0.25;

 var heading : float = 0.0;

 var rudder : float = 0.0;

 var rudderDelta : float = 2.0;

 var maxRudder : float = 6.0;

 var bob : float = 0.1;

 var bobFrequency : float = 0.2;

 var rb: Rigidbody;

 private var elapsed : float = 0.0;

 private var seaLevel : float = 0.0;

 private var rudderControl : GameObject;

 private var rudderAngle : float = 0.0;

  function signedSqrt( x : float){

     var r = Mathf.Sqrt(Mathf.Abs( x ));

     if( x < 0 ){

         return -r;

     } else {

          return r;

     }

 } 


 function Start () {
    rb = GetComponent.<Rigidbody>();
} 


 function Update () {

 rb.angularDrag = 0.8;
 rb.drag = 1;

 // Bobbing

 elapsed += Time.deltaTime;

 transform.position.y = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2));

 // Steering

 rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime;

 if( rudder > maxRudder ){

     rudder = maxRudder;

 } else if ( rudder < -maxRudder ){

     rudder = -maxRudder;
 }

 heading = (heading + rudder * Time.deltaTime * signedSqrt(speed)) % 360;

 // transform.Rotate(0, rudder * Time.deltaTime, 0);

 transform.eulerAngles.y = heading;

 transform.eulerAngles.z = -rudder;

 if( rudderControl ){

    rudderAngle = ((-60 * rudder)/maxRudder + heading) % 360;

    //rudderControl.transform.localEulerAngles.y = (70 * rudderAngle)     %     360;

        rudderControl.transform.eulerAngles = Vector3(0, rudderAngle, 0);
     }

     // Sail

     speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime;

     if( speed > maxspeed ){

             speed = maxspeed;

    }     else if ( speed < minspeed ){

        speed = minspeed;

     }

    transform.Translate(0, 0, speed * Time.deltaTime);

 }

 function Awake (){

     seaLevel = transform.position.y;

     rudderControl = GameObject.Find("rudderControl");

 }

我希望它是简单的东西。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2016-01-04 22:52:51

我觉得这个问题可能是由于使用

代码语言:javascript
复制
transform.Translate(0, 0, speed * Time.deltaTime);

根据我的经验,最好是在刚体上加力。

至于转向问题,您是否曾经将方向舵位置重新设置为默认位置?我似乎找不到你的代码中会发生这种情况的地方。

希望这能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2016-01-05 13:25:08

我能够通过直接降低速度变量的速度来解决这个问题。

代码语言:javascript
复制
    if (!Input.GetAxis("Vertical"))
    {

        if (speed > 0 )
            {
                speed -= 0.1f;
                if ( speed < 0 )
                    {
                        speed = 0;
                    }
            }


        if (speed < 0 )
            {
                speed += 0.1f;
                if ( speed > 0 )
                    {
                        speed = 0;
                    }
            }

    }

我对方向舵也做了同样的事情。

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

https://stackoverflow.com/questions/34584183

复制
相关文章

相似问题

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