摞你命3000 发表于 2014-12-8 16:36

如何能让角色到达指定地点后停下来?

本帖最后由 摞你命3000 于 2014-12-8 16:38 编辑

我碰到一个问题,就是当我的角色残血低于50会自动跑向加血点,跑到加血点后,加血成功,然后它一直在那不停转圈圈。。。。。


有没有人大神帮忙解决一下,这什么问题?

代码如下:

using UnityEngine;
using System.Collections;

public class pz : MonoBehaviour {
      public Transform target;//加血点坐标
public GameObject boomFire;//定义一个boomFIRE的变量 场景中物体 也可以是预制物体,我这里定义的是我预制物体里的一个炸弹爆炸的效果
      public Transform target_start;//初始点坐标

      void Start ()
      {
                //动画为循环播放

                this.animation.wrapMode = WrapMode.Loop;
      }


      void Update ()
      {


                if (GetComponentInChildren<xueliang> ().dangqianHP <= 500) { //低于500生命值的时候自动跑去加血点
                                                gameObject.animation.Play ("run");
                                                this.transform.LookAt (target.transform);//朝向加血点
                                                transform.Translate (Vector3.forward * Time.deltaTime * 5);
                                                if (Vector3.Distance (this.transform.position, target.transform.position) <= 5) {      到达加血点距离小于5
                                                                gameObject.animation.Play ("idle"); //播放动画站立
                                                }
                              

                              }

      


                              
      }//update结束符号





      


      protected void OnCollisionEnter(Collision collision){//碰撞检测函数
               
                if (collision.collider.tag == "paodan") {//当检测到碰撞物体的tag(标签)是paodan的时候,这个标签要在预制物体或者场景里的物体的标签先定义一下。
                        
               
                                                if (GetComponentInChildren<xueliang> ().dangqianHP > 0) {


                                                                //(获取父物体对象下的所有子对象的脚本或组件,这里我要找到xueliang脚本中的变量dangqianHP),如果获取到的当前血量的值大于0时,

                                                                GetComponentInChildren<xueliang> ().dangqianHP -= 100;//那么就减去100的血量,碰撞一次减100的血量的意思。

                                                }


                        
                                                if (GetComponentInChildren<xueliang> ().dangqianHP <= 0) {//如果小于零或者等于零

                                                                Instantiate (boomFire, this.transform.position, this.transform.rotation); //那么就执行爆炸效果在碰撞的当前位置
                        
                                                                Destroy (gameObject);
                                                }
                        
                              }

      
                              

}
}


=======================截图



就是好像它没有到达指定的地点那样 。。。。原地倒下然后沿着x 或者Y轴不停的诡异旋转。。。。



角色身上有钢铁和碰撞器

whqydcg2007 发表于 2014-12-14 21:28

你Update()里的脚本逻辑上有问题,如果按照你这样写,游戏对象会一直在run与idel之间运行,你可以打开 游戏对象的 Animator Controller进行查看;
游戏对象虽然到达了加血地点,但从你的脚本中看不出游戏对象的血量增加了,也就是说游戏对象的血量仍然满足<500;

摞你命3000 发表于 2014-12-15 00:54

whqydcg2007 发表于 2014-12-14 21:28 static/image/common/back.gif
你Update()里的脚本逻辑上有问题,如果按照你这样写,游戏对象会一直在run与idel之间运行,你可以打开 游 ...

感谢你的回答,我前些天已经发现此问题在Update里。deltatime 前一贞已过,后一贞未到,LookAt一直在对着目标。。。。导致这种情况的发生,我已经用状态机制避免了这种情况。上面的代码放Update里其实我是为了做个简单的测试的,谁知道弄出个问题来,不过正因为如此让我重新回顾了基础的东西。。。非常感谢你的回复。

完整星空 发表于 2017-3-14 16:24

楼主是超人

yejiaobo 发表于 2017-3-14 16:23

顶顶多好

Lkssonic 发表于 2017-3-14 16:19

难得一见的好帖

Lkssonic 发表于 2017-3-14 16:30

说的非常好

copy_h 发表于 2017-3-14 16:49

LZ真是人才

xulei520abcde 发表于 2017-6-12 14:27

很不错

mastertea 发表于 2017-6-12 15:04

楼主是超人
页: [1]
查看完整版本: 如何能让角色到达指定地点后停下来?