-
유니티 - 플레이어에게 총을 쏘는 적쾌락없는 책임 (공부)/Unity 2021. 1. 15. 22:56반응형
소스코드
- 총을 쏘는 오브젝트
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemyshooting : MonoBehaviour { public GameObject bullet; void Start(){ StartCoroutine(Bullet()); } IEnumerator Bullet(){ Instantiate(bullet, transform.position, transform.rotation); yield return new WaitForSeconds(3.0f); StartCoroutine(Bullet()); } }
- 총알의 스크립트
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyBullet : MonoBehaviour { Transform playerPos; Vector2 dir; // 총알이 닿으면 없어질 레이어 public LayerMask layer; void Start() { playerPos = GameObject.Find("Poong").GetComponent<Transform>(); dir = playerPos.position - transform.position; GetComponent<Rigidbody2D>().AddForce(dir * Time.deltaTime * 10000); } void Update(){ RaycastHit2D ray = Physics2D.Raycast(transform.position, transform.right, 0, layer); if (ray.collider != null) { Destroy(gameObject); if (ray.collider.tag == "Player") { PlayerMove player = ray.collider.GetComponent<PlayerMove>(); player.playerDamaged(transform.position); } } } }
간단 설명
- 플레이어에게는 'Enemy'태그와 접촉하면 데미지를 입는 playerDamaged함수가 있고 이 함수는 적의 위치를 인자로 받아온다.
- 적의 스크립트는 별거 없이 코루틴을 이용해 일정 시간마다 프리팹을 생성할 뿐이다
- 총알 스크립트는 Transform으로 플레이어의 위치를 받아온다
- 위 스크립트는 캐릭터명으로 되어있지만 앞으로 게임을 만든다면 플레이어블 캐릭터를 전부 같은 이름으로 정의하면 한 스크립트로 모두 처리할 수 있다.\
- 지금의 문제는 [ dir = 플레이어 포지션 - 몬스터 포지션 ] 이라서 거리에 따라 속도가 달라진다
- 이 부분은 dir이 양수/음수 인지에 따라 값을 일정하게 정해두면 될 것 같다.
- 총알이 레이어에 닿으면 파괴되게 Ray를 사용했다.
- 일반적으로 스크립트를 짜면 오브젝트가 바로 파괴되어 플레이어의 playerDamaged 함수가 발동이 안된다
- 그래서 오브젝트를 파괴한 뒤 playerDamaged 함수를 부르게 코드를 짜야 한다
- playerDamaged함수는 인자로 닿은 물체의 포지션을 받아와야 해서 인자로 총알의 포지션을 넘겨줬다.
개선점
위 설명에서 말한대로 dir 부분을 변경해야 할 필요가 있다.
if (dir > 0 ) 어떠한 양수값 else 어떠한 음수값
이런식으로 코드를 변경해야 될 것 같다. dir이 완전한 0이 되는 경우는 어떻게 해야하나 싶은데 dir이 완벽한 0이 되는 경우가 있을지는 모르겠다.
또 플레이어의 bullet랑 적의 총알이 만나면 어떻게 되는가?
반응형'쾌락없는 책임 (공부) > Unity' 카테고리의 다른 글
유니티 2D 시네머신 사용기 - 맵 이동시, 카메라 전환, confiner change (2) 2021.03.13 [유니티 2D 스터디] 캐릭터 이동, 벽 충돌처리 (0) 2021.03.11 유니티 - 플레이어 슬라이딩 구현 (0) 2021.01.04 유니티 - 보스몬스터 패턴 1 : 플레이어 감지 후 공격 (0) 2021.01.03 유니티 UI에 변수 표시 (0) 2020.12.28