|
Projectile.cs
- using UnityEngine;
- using System.Collections;
- public class Projectile : MonoBehaviour {
- public LayerMask collisionMask;
- float speed = 10;
- float damage = 1;
- float lifetime = 3;
- float skinWidth = 0.1f;
- void Start()
- {
- Destroy(gameObject, lifetime);
- Collider[] initialCollisions = Physics.OverlapSphere
- (transform.position, 0.1f, collisionMask);
- // 발사체와 겹쳐있는 모든 충돌체들의 배열
- if (initialCollisions.Length > 0)
- //무엇 하나라도 충돌하였다면 충돌한 녀석에게 데미지를 가하고 파괴
- {
- OnHitObject(initialCollisions[0]);
- }
- }
- public void SetSpeed(float newSpeed)
- {
- speed = newSpeed;
- }
- void Update () {
- float moveDistance = speed * Time.deltaTime;
- CheckCollisioins(moveDistance);
- transform.Translate(Vector3.forward * Time.deltaTime * speed);
- //레이의 이동할 거리와 충돌에 대한 거리를 가져와라
- }
- void CheckCollisioins(float moveDistance)
- {
- Ray ray = new Ray(transform.position, transform.forward);
- RaycastHit hit;
- if(Physics.Raycast(ray, out hit, moveDistance+skinWidth,
- collisionMask, QueryTriggerInteraction.Collide))
- {
- OnHitObject(hit);
- }
- }
- void OnHitObject(RaycastHit Hit)
- {
- IDamageable damageableObject = Hit.collider.GetComponent
- <IDamageable>();
- if (damageableObject != null)
- {
- damageableObject.TakeHit(damage, Hit);
- }
- GameObject.Destroy(gameObject);
- }
- void OnHitObject(Collider c)
- {
- IDamageable damageableObject = c.GetComponent<IDamageable>();
- if (damageableObject != null)
- {
- damageableObject.TakeDamage(damage);
- GameObject.Destroy(gameObject);
- }
- }
- }
반응형
'응용프로그램 > 유니티(Unity)' 카테고리의 다른 글
Unity - Fisher Yates 소스 (0) | 2016.11.30 |
---|---|
Unity - Editor 개념 및 사용 (0) | 2016.11.19 |
Unity - 적 공격으로 Player에게 데미지 입히기 (0) | 2016.11.17 |
unity - 대칭함수을 활용한 공격 (0) | 2016.11.16 |
Unity - 스폰 시스템 만들기 (0) | 2016.11.14 |