找回密码
 立即注册
查看: 4846|回复: 87

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

[复制链接]
发表于 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轴不停的诡异旋转。。。。



角色身上有钢铁和碰撞器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

点评

感谢你的回答,我前些天已经发现此问题在Update里。deltatime 前一贞已过,后一贞未到,LookAt一直在对着目标。。。。导致这种情况的发生,我已经用状态机制避免了这种情况。上面的代码放Update里其实我是为了做个简  详情 回复 发表于 2014-12-15 00:54
 楼主| 发表于 2014-12-15 00:54 | 显示全部楼层
whqydcg2007 发表于 2014-12-14 21:28
你Update()里的脚本逻辑上有问题,如果按照你这样写,游戏对象会一直在run与idel之间运行,你可以打开 游 ...

感谢你的回答,我前些天已经发现此问题在Update里。deltatime 前一贞已过,后一贞未到,LookAt一直在对着目标。。。。导致这种情况的发生,我已经用状态机制避免了这种情况。上面的代码放Update里其实我是为了做个简单的测试的,谁知道弄出个问题来,不过正因为如此让我重新回顾了基础的东西。。。非常感谢你的回复。
发表于 2017-3-14 16:24 | 显示全部楼层
楼主是超人
发表于 2017-3-14 16:23 | 显示全部楼层
顶顶多好
发表于 2017-3-14 16:19 | 显示全部楼层
难得一见的好帖
发表于 2017-3-14 16:30 | 显示全部楼层
说的非常好
发表于 2017-3-14 16:49 | 显示全部楼层
LZ真是人才
发表于 2017-6-12 14:27 | 显示全部楼层
很不错
发表于 2017-6-12 15:04 | 显示全部楼层
楼主是超人
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 19:18 , Processed in 0.126690 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表