当前位置:   article > 正文

Unity3D学习笔记--roll a ball无法移动_unity3d施加力小球不动

unity3d施加力小球不动

   最近在学习Unity的官网上的教程roll a ball教程的时候发现问题:写了脚本后,小球无法移动。

   然后莫名其秒的又可以移动了。很是不解。猜测原因可能是我点击了 Game视图中的 Maximize on Play 的按钮(让游戏运行时Game视图最大化),然后点击播放按钮测试就可以移动球了。

  在网上查到的答案很久了,而且很多不对,所以附上自己的脚本,可作为参考

  我的Unity版本为:5.4.3f1 Personal

   我的控制脚本如下:

using UnityEngine;
using System.Collections;


public class PlayerController : MonoBehaviour {
    public float speed;                                                      //我的speed设置为5
private Rigidbody rb;
void Start () {
 rb=GetComponent<Rigidbody>();
}



void FixedUpdate () {
float moveHorizontal=Input.GetAxis("Horizontal");
float moveVertical=Input.GetAxis("Vertical");
Vector3 movement=new Vector3 (moveHorizontal,0,moveVertical);
rb.AddForce(movement*speed);
}
}


网上部分答案纠正:

有人建议修改 rb.AddForce(movement*speed)  为: rb.AddForce(movement*speed*Time.deltaTime);

其实这要看你使用的是Update()还是FixedUpdate();Update()是会在每一帧都执行一次,而FixedUpdate()是在固定的时间间隔执行一次;Update()的每一帧时间是和设备有关的,这个帧时间是指显示屏每次刷新屏幕画面的时间间隔,显然一个每秒刷新60次的屏幕和一个每秒刷新30次的屏幕刷新每一画面的时间间隔不同。

所以一般运动的物体的位置的更新应该在FixedUpdate()中执行(因为在Update()中执行会导致物体的移动速度和运行设备有关)

当然也可使用Update()执行,因为有个Time.deltaTime,这个值可以随着帧时间的变化而变化,可自己查看Unity Manual了解。






声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/89722
推荐阅读
相关标签
  

闽ICP备14008679号