72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Com.LuisPedroFonseca.ProCamera2D.TopDownShooter
|
|
{
|
|
public class Bullet : MonoBehaviour
|
|
{
|
|
public float BulletDuration = 1f;
|
|
public float BulletSpeed = 50f;
|
|
public float SkinWidth = .1f;
|
|
|
|
public LayerMask CollisionMask;
|
|
|
|
public float BulletDamage = 10f;
|
|
|
|
Transform _transform;
|
|
|
|
RaycastHit _raycastHit;
|
|
Vector2 _collisionPoint;
|
|
|
|
float _startTime;
|
|
bool _exploding;
|
|
Vector3 _lastPos;
|
|
|
|
void Awake()
|
|
{
|
|
_transform = this.transform;
|
|
}
|
|
|
|
void OnEnable()
|
|
{
|
|
_exploding = false;
|
|
_startTime = Time.time;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (_exploding)
|
|
return;
|
|
|
|
_lastPos = _transform.position;
|
|
_transform.Translate(Vector3.right * BulletSpeed * Time.deltaTime);
|
|
|
|
if(Physics.Raycast(_lastPos, _transform.position - _lastPos, out _raycastHit, (_lastPos - _transform.position).magnitude + SkinWidth, CollisionMask))
|
|
{
|
|
_collisionPoint = _raycastHit.point;
|
|
|
|
_transform.up = _raycastHit.normal;
|
|
|
|
Collide();
|
|
}
|
|
|
|
if (Time.time - _startTime > BulletDuration)
|
|
Disable();
|
|
}
|
|
|
|
void Collide()
|
|
{
|
|
_exploding = true;
|
|
_transform.position = _collisionPoint;
|
|
|
|
_raycastHit.collider.SendMessageUpwards("Hit", BulletDamage, SendMessageOptions.DontRequireReceiver);
|
|
|
|
Disable();
|
|
}
|
|
|
|
void Disable()
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
} |