using UnityEngine;
using System.Collections;
using System;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class BulletDestoryEvent : UnityEvent<Projectile> { }
public class Projectile : MonoBehaviour {
public LayerMask collisionMask;
float speed = 10;
public BulletDestoryEvent onBulletDestory = new BulletDestoryEvent();
public float damage;
//可以切换武器:切换射击速度
public void SetSpeed(float newSpeed) {
speed = newSpeed;
}
void Update () {
float moveDistance = speed * Time.deltaTime;
CheckCollision(moveDistance);
transform.Translate (Vector3.forward *moveDistance);
//让子弹向前飞行:方向向量*时间*速度
}
//检查是否碰撞
private void CheckCollision(float moveDistance)
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
//射线检测
if(Physics.Raycast(ray,out hit,moveDistance,collisionMask,QueryTriggerInteraction.Collide))
{
onHit(hit);
//如果射线检测碰撞,那么出发onhit()
}
}
private void onHit(RaycastHit target)
{
IDamage damageObject = target.collider.GetComponent<IDamage>();
if(damageObject!=null)
{
damageObject.GetDamage(damage,target.point,transform.forward);
}
onBulletDestory.Invoke(this); //入池
}
}
U3D-对象池-FPR子弹管理
最新推荐文章于 2024-03-21 16:46:01 发布