赞
踩
最近在学习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了解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。