我从学习部分开始研究滚球项目。我最近添加了一个" Speed"文本字段,我注意到,当我第一次开始播放时,如果按W或S,则速度不会超过3.8(或低于-3.8)。如果我向左或向右走一根头发,这将解决问题,我可以像往常一样用W和S移动。如果我把球撞到墙上,也会发生同样的修复。如果我在编辑器中将(.0000001,.5,0)的球开出而不是(0,.5,0),则也不会出现毛刺。只是因为我以某种方式搞砸了代码,我将它粘贴在下面。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float moveSpeed;
public float accelSpeed;
private int pickupCount;
public Text countText;
public Text winText;
public Text speedGage;
void Start(){
pickupCount = 0;
setCountText();
winText.text = "";
speedGage.text = "0";
}
void FixedUpdate(){
updateMovement();
}
void updateMovement(){
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal,0,moveVertical);
rigidbody.AddForce(movement * moveSpeed * Time.deltaTime);
speedGage.text = rigidbody.velocity.ToString();
}
void OnTriggerEnter(Collider other){
if(other.gameObject.tag == "PickUp"){
other.gameObject.SetActive(false);
pickupCount += 1;
setCountText();
}
}
void setCountText(){
countText.text = "Count: " + pickupCount.ToString();
if(pickupCount == 16){
winText.text = "You Win!";
}
}
}
答案 0 :(得分:0)
这个问题已经存在了一段时间没有发布回答,所以如果您还没有找到解决方案,或者其他人可能会发现自己正在寻找答案......
在rigidbody.AddForce调用中,移动向量乘以movespeed和Time.deltaTime,这使得值非常小。尝试将其更改为以下内容:
rigidbody.AddForce(movement * movespeed, Forcemode.Force);
或者如果你想忽略突然改变方向的球的质量,请使用Forcemode.VelocityChange。
时间已被考虑到rigidbody.AddForce中,因为只要球没有卡在障碍物上,结果将由于对速度的影响而展开到以下物理步骤中。