在场景中建立子弹,以及一个打击目标,目标具备一定的生命值(HP),当生命值将为0时,目标被击落并消失。

unity开启携程_unity开启携程

1.  新建一个球体Sphere当子弹,将其命名为Bullet。

unity开启携程_赋值_02

  调整其大小和材质(比如金色),并确保它具有碰撞体"Collider"属性,以及勾选“Is Trigger”属性。只有勾选了“Is Trigger”,Bullet.cs脚本中的OnTriggerEnter函数才会起作用。

 

unity开启携程_unity3d_03

 

unity开启携程_赋值_04

  2. 新建一个子弹的程序Bullet.cs。其中的OnTriggerEnter(Collider other)函数中,检测子弹打到的物体上是否挂载有BulletTarget脚本,如果有,才是子弹的目标,否则仅仅让子弹消失,不做任何动作处理。 

public class Bullet : MonoBehaviour
{//子弹脚本,挂在子弹身上
    public float moveSpeed=10; //子弹移动速度
    void Start()
    {
        Destroy(gameObject,5f);//不管有没有打到东西,子弹在场景5秒钟就消失
    }

    void Update()
    {//子弹一旦进入场景,就向着自己的前方飞
        transform.Translate(Vector3.forward*moveSpeed*Time.deltaTime,Space.Self);
    }

    private void OnTriggerEnter(Collider other)
    {//当子弹碰撞到其他物体
        Destroy(gameObject); //不管碰到什么,都让子弹消失
        var target = other.gameObject.GetComponent<BulletTarget>();
        //尝试载入被子弹打到的BulletTarget脚本,如果目标挂有这个脚本,就扣除目标的血量
        if (target == null)
            return;
        target.HP -= 10;
    }
}

3. 将第2步的Bullet程序拖拽到金色的Bullet模型上。

unity开启携程_unity3d_05

unity开启携程_unity开启携程_06

4. 将修改完成的子弹模型拖入Assets文件夹内,它就被保存为一个预制体(Prefab)。之后还需要删除场景中的子弹模型,使之不会出现在开场游戏界面中。 

unity开启携程_目标对象_07

5. 别忘了之前我们建立的第一人称控制器中,有一段关于子弹的代码被注释了,打开那段代码后,需要把上面存的"子弹预制体"拖到第一人称控制器的Inspector中,赋值给BulletTemplate变量。

unity开启携程_unity3d_08

6. BulletTarget.cs 脚本如下,将此脚本挂载在一切你希望成为子弹目标的对象上。值得注意的是,子弹的目标上还需要挂在Rigidbody组件。

public class BulletTarget : MonoBehaviour
{//子弹的目标
    public float HP;
    void Start()
    {
        HP = 100;
    }

    // Update is called once per frame
    void Update()
    {
        if (HP <= 0)
        {
        var rig = gameObject.transform.GetComponent<Rigidbody>();
        //获取目标上挂的Rigidbody组件
        rig.useGravity = true; //将重力设置为true
        Destroy(gameObject,1f);            
        }
    }
}

7. 在场景中,建立子弹目标对象,并加载BulletTarget.cs脚本。需要注意:

(1)子弹目标对象必须具备Collider(碰撞体),不然子弹检测不到;

(2)子弹目标对象必须添加Rigidbody(刚体)属性,并取消重力勾选(否则就没有掉落的效果了)。

unity开启携程_目标对象_09

 8. 在后文添加了UI界面、主角控制脚本之后,可以设置击落目标后给主角加分。之后再修改BulletTarget.cs,用于显示分数和目前的状态。

unity开启携程_ide_10