Unity问题:在Update里面,往刚体加力,却不能弹起来。(代码有具体注释)急急急
答案:1 悬赏:30
解决时间 2021-02-16 15:11
- 提问者网友:喵星人荷西
- 2021-02-16 01:49
我是新学的unity,想做一个简单的来回弹动的球体,球体上已经加上了刚体了;
在Start里面的加力使可以弹起来的,但是运行到了Update里面的却不能。
具体是这样的,经过测试,确定是if(temp < preballyside){ }这个语句出问题,但是我并不觉得有什么逻辑错误。但是如果把这个if语句注释掉,球可以弹动,但是由于有几率会发生“一次过被加了好几个力”的问题,为了控制在上升过程中,只加一个力,所以就用了这个if(temp < preballyside){ }来判断是否在上升过程。
请各路神帮忙看看,到底是哪出了问题。
具体代码如下:
var oldballyside:float; //用于记录球的初始位置
var balldown:boolean; //用于判断球是否在下降
var preballyside:float; //用于记录球前一帧的位置
function Start () {
oldballyside = gameObject.Find("ball").transform.position.y;
gameObject.Find("ball").rigidbody.AddForce(Vector3(0,1,0)*500); //一开始加力
balldown = false; //球在上升
preballyside = oldballyside; //记录这一帧,球的位置
}
function Update () {
var temp:float = gameObject.Find("ball").transform.position.y; //临时变量
if(temp < preballyside){ //判断当前是否在下降
print("判断中.....temp < preballyside"+(temp < preballyside));
balldown=true; //是在下降。将balldown赋值为true
if(temp <= oldballyside ){ //判断是否回到了一开始的位置,就是是否着地
print("运行到加力这里了!");
balldown=false; //是!然后就将balldown赋值为false
gameObject.Find("ball").rigidbody.AddForce(Vector3(0,1,0)*500); //又往ball加力
}
}
preballyside = temp; //将当前帧位置记录下
}
最佳答案
- 二级知识专家网友:社会水太深
- 2021-02-16 03:11
来回弹动是吧,用OnTriggerEnter检测,当球体开始接触地面时加力
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯