如何能让角色到达指定地点后停下来?
本帖最后由 摞你命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轴不停的诡异旋转。。。。
角色身上有钢铁和碰撞器
你Update()里的脚本逻辑上有问题,如果按照你这样写,游戏对象会一直在run与idel之间运行,你可以打开 游戏对象的 Animator Controller进行查看;
游戏对象虽然到达了加血地点,但从你的脚本中看不出游戏对象的血量增加了,也就是说游戏对象的血量仍然满足<500; whqydcg2007 发表于 2014-12-14 21:28 static/image/common/back.gif
你Update()里的脚本逻辑上有问题,如果按照你这样写,游戏对象会一直在run与idel之间运行,你可以打开 游 ...
感谢你的回答,我前些天已经发现此问题在Update里。deltatime 前一贞已过,后一贞未到,LookAt一直在对着目标。。。。导致这种情况的发生,我已经用状态机制避免了这种情况。上面的代码放Update里其实我是为了做个简单的测试的,谁知道弄出个问题来,不过正因为如此让我重新回顾了基础的东西。。。非常感谢你的回复。 楼主是超人 顶顶多好 难得一见的好帖 说的非常好 LZ真是人才 很不错 楼主是超人
页:
[1]