我在javascript中使用unity 3d的船脚本。它几乎完美地工作,只是船永远不会减速,除非你朝相反的方向按键,否则转弯会导致无限大的转弯。我尝试在检查器中为船对象本身调整质量、拖动和角度拖动,我甚至在脚本中为其添加了代码,但仍然没有效果。游戏中没有其他脚本,除了船上也有一个顺畅的跟随相机脚本。
#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");
}我希望它是简单的东西。任何帮助都是非常感谢的。
发布于 2016-01-04 22:52:51
我觉得这个问题可能是由于使用
transform.Translate(0, 0, speed * Time.deltaTime);根据我的经验,最好是在刚体上加力。
至于转向问题,您是否曾经将方向舵位置重新设置为默认位置?我似乎找不到你的代码中会发生这种情况的地方。
希望这能有所帮助
发布于 2016-01-05 13:25:08
我能够通过直接降低速度变量的速度来解决这个问题。
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;
}
}
}我对方向舵也做了同样的事情。
https://stackoverflow.com/questions/34584183
复制相似问题