티스토리 뷰

* 플레이어가 점수를 얻을 수 있는 Coin과 진행을 방해하는 장애물을 배치했다. 

코인은x축의 -1.5, 0, 1.5 의 위치에서 랜덤하게 생성되어야한다. 

하지만 최소 5개 이상은 생성되어야 한다. 만약 모든 Coin이 각각 다른 x에 생성이 된다면 진행에 방해가 될것 같았다.

Coin을 배치하는 방법을 두가지 생각해봤다.

 

1. 지면프리팹으로 생성되어있는 Area의 랜덤한 x의 위치에 z축으로 1f의 간격을 두고 생성하기.

 

2. 지면프리팹의 자식 오브잭트로 Coin과 장애물을 미리 배치하기.

 

* 첫번째 방법으로 생성한다면 큰 문제점이 생긴다. 랜덤으로 생성되는 Coin의 위치로 인해 제어가 불가능함으로

스테이지 증가에 따른 난이도조절에 어려움이 생길 것 같았다. 

두번째 방법인 지면프리팹에 자식오브잭트로 Coin과 장애물을 미리 배치하는 방식으로 맵을 제작했다.

 

* 플레이어와 Coin이 충돌하면 파티클연출이 나올 수 있도록 Coin 스크립트를 작성하고 

파티클의 재생시간이 끝나면 Coin은 파괴하도록 제어했다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
    [SerializeField]
    private GameObject coinEffectPrefabs;
    private float rotateSpeed;

    private System.Random random;

    private void Awake()
    {
        random = new System.Random();
        this.rotateSpeed = random.Next(0, 360);
    }

    void Update()
    {
        this.transform.Rotate(Vector3.right * this.rotateSpeed * Time.deltaTime);
    }

    private void OnTriggerEnter(Collider other)
    {
        GameObject clone = Instantiate(coinEffectPrefabs);
        clone.transform.position = this.transform.position;
        Destroy(gameObject);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParticleAutoDestroyer : MonoBehaviour
{
    private ParticleSystem particle;
    private void Awake()
    {
        this.particle = GetComponent<ParticleSystem>();
    }

    /// <summary>
    /// 만약 여러개의 파티클을 하나의 그룹으로 묶어서 사용할떄는?
    /// 시간이 가장 긴 파티클의 재생 여부를 판단할수도 있음
    /// </summary>
    void Update()
    {
        //파티클이 재생중이 아니면 삭제
        //플레이어가 오브잭트와 충돌한 후 파티클 재생이 끝나면 오브잭트 삭제
        if (this.particle.isPlaying == false)
        {
            Destroy(gameObject);
        }
    }
}

#Test

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함