触发器的使用,角色到达炮塔的攻击范围,炮塔攻击,委托的使用

炮塔的攻击范围

为炮塔创建脚本TowerModel 和 球形碰撞器SphereCollider并设置半径,并勾选Is Trigger触发器

炮塔勾选触发器,角色身上必须添加刚体,刚体不受力的作用,因为只是用来发生碰撞

碰撞和触发的区别

物体发生碰撞的必要条件:两个物体都必须带有碰撞器(Collider),其中运动的物体还必须带有Rigidbody刚体。

Unity3d中的碰撞器和触发器的区别:

碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性

当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。

1. 发起碰撞物体有:Rigodbody , CharacterController .

2. 接收碰撞物体由:所有的Collider .

炮塔的攻击

using UnityEngine;
//炮塔
public class TowerModel : MonoBehaviour {private GameObject target;//炮塔触发到的对象public GameObject fireFB;//火球预制物private GameObject fire;//生成的火球void Start () {		}	void Update () {		}private void OnTriggerEnter(Collider other){target = other.gameObject;//炮塔触发到的对象Attack();//攻击}//攻击private void Attack(){//创建火球fire = Instantiate(fireFB,transform.position + new Vector3(0,5.6f,0),Quaternion.identity);//设置火球的目标fire.GetComponent().target = this.target;fire.GetComponent().TouchCallback += OnTouchCallback;}//火球碰到后的回调方法private void OnTouchCallback(GameObject obj){print("火球碰到了角色");}
}
using UnityEngine;
//火球
public class FireBallMove : MonoBehaviour {internal GameObject target;//攻击目标//Action这个变量是一个方法,并且这个方法是具有一个参数GameObject类型。//委托public System.Action TouchCallback;//碰到时的回调方法void Start () {}void Update () {//朝向目标transform.LookAt(target.transform.position);//移动火球transform.Translate(transform.forward * 0.25f);//参数:前方 * 速度//碰撞检测if(Vector3.Distance(transform.position,target.transform.position) < 0.3f){//如果火球和攻击目标的距离小于0.3print("碰到了");Destroy(gameObject);//销毁火球TouchCallback(target);//相当于调用TowerModel.OnTouchCallback}}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部