728x90

필요한 신

1. 타이틀 신 

1.1 인트로

1.2캐릭터선택창

1.3 튜토리얼

2. 메인 신 

2.1 인벤토리

2.2 강화

2.3 퀘스트 및 업적

3. 인게임 신

3.1 캐릭터 구현 

3.2 스킬 구현

3.3 몬스터 구현

3.4 몬스터 패턴

3.5 아이템 드랍

 

오늘은 일단 클릭시 카메라 무빙해주는 코드를 짜려고한다.

 

public class PickCharacter : MonoBehaviour
{

public static PickCharacter instance;
    private void Awake()
    {
        if (instance == null) instance = this;
        else if (instance != null) return;

    }
    public Character character;
    Animator _myAnim;
    public PickCharacter[] chars;
    public List<GameObject> CamPos=new List<GameObject>();
    public Transform MyCamPos;
    private Transform _myCam;
    private Transform chartr;

    private void Start()
    {
        _myAnim = GetComponent<Animator>();
       
       
    }
   
    private void OnMouseUpAsButton()
    {
        DataManger.instance.curCharcter = character;
        
            OnSelect();

      
     
        
    }
    public void NotSelect()
    {
        
            _myAnim.SetTrigger("Not");
        _myAnim.SetBool("IsPickState", false);

    }

    public void OnSelect()
    {
        if (_myAnim.GetBool("IsPickState") == false)
        {
            _myAnim.SetTrigger("Pick");
            _myAnim.SetBool("IsPickState", true);
          StartCoroutine( Click(DataManger.instance.curCharcter));
        }
           
        
    }
    IEnumerator Click(Character character)
    {
        switch(character)
        {
            case Character.Archer:
                chartr = CamPos[0].transform;
                break;
            case Character.Fighter:
                chartr = CamPos[1].transform;
                break;
            
            case Character.Paladin:
                chartr = CamPos[2].transform;
                break;
            case Character.Warrior:
                chartr = CamPos[3].transform;
                break;


        }
        while(Vector3.Distance(MyCamPos.position,chartr.position)>0.1f)
        {
            MyCamPos.position = Vector3.Lerp(MyCamPos.position,chartr.position,Time.deltaTime*2.3f);
            MyCamPos.rotation = Quaternion.Lerp(MyCamPos.rotation, chartr.rotation, Time.deltaTime * 2.3f);
            yield return null;
        }

 ExitButton.SetActive(true);
    }

 public IEnumerator BackBtnClick()
    {
        ExitButton.SetActive(false);
        while (Vector3.Distance(MyCamPos.position, StartCampos.position)>0.1f)
        {
            MyCamPos.position = Vector3.Lerp(MyCamPos.position, StartCampos.position, Time.deltaTime * 2.3f);
            MyCamPos.rotation = Quaternion.Lerp(MyCamPos.rotation, StartCampos.rotation, Time.deltaTime * 2.3f);

            yield return null;
        }
        
        NotSelect();
    }

 

저번에 했던것에 추가본이고 

public void OnSelect() 이부분에서 start 코루틴을 추가해 카메라 무빙을 넣어주는것이다 .

 

Character를 전달받아 switch로 판단하여 포지션값을 넣어주고

 

distance를 이용하여 둘의차이가 0.1 f 보다 작아질때까지 이동하게 만들었고 Lerp 를 이용하여 카메라 이동을 줬다.

 

실험을 위해서 back 버튼 추가를위해 마지막 BackBtnClick() 추가해줬고 public 으로 한이유는 UI 버튼클릭 스크립트를 따로만들어서 관리하기위해  해줬다.

 

public class UiBtnClick : MonoBehaviour
{
    public void BackButtonClick()
    {
        StartCoroutine(PickCharacter.instance.BackBtnClick());
    }
}

UI를 관리해줄 빈오브젝트 생성후 스크립트 추가후 버튼에 온클릭리더에 연결시켜줍니다.

 

뒤로가는 버튼은 클래스 선택이라고 생성해주었고 평소에는 필요없고 클릭을 입력받고 카메라가 이동이 끝나고난다음 필요하기때문에 게임오브젝트 연결후 보였다가 사라지게 설정해놨다.

 

  public void openpanel(Character character)
    {
        switch (character)
        {
            case Character.Archer:
                CharacterPanel[0].SetActive(true);
                break;
            case Character.Fighter:
                CharacterPanel[1].SetActive(true);
                break;

            case Character.Paladin:
                CharacterPanel[2].SetActive(true);
                break;
            case Character.Warrior:
                CharacterPanel[3].SetActive(true);
                break;


        }
    }
    public void closepanel()
    {
        for(int i = 0; i<CharacterPanel.Count;i++)
        {
            CharacterPanel[i].SetActive(false);
        }
    }

이 문장을 추가해서 캐릭터 선택시 캐릭터 클래스 및 여러 정보들 보이게 끔 설정했습니다.

 

그리고 화면이 좀 밋밋해서 배경음악 및 버튼클릭음을 넣어주었고 

버튼 클릭음은 빈오브젝트 생성, 새로운 스크립트생성 둘다 soundManger 라고 이름 바꾼후 빈오브젝트에 스크립트추가해주고

스크립트 내용은

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

public class SoundManger : MonoBehaviour
{
    public static SoundManger instance;
    private void Awake()
    {
        if (instance == null) instance = this;
        else if (instance != null) return;

    }

    public void SFXPlay(string sfxName , AudioClip clip)
    {
        GameObject Sound = new GameObject(sfxName+"Sound");
        AudioSource audiosource = Sound.AddComponent<AudioSource>();
        audiosource.clip = clip;
        audiosource.Play();

        Destroy(Sound, clip.length);
    }
}

 

Ui 버튼에서 인스턴스 하여 

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

public class UiBtnClick : MonoBehaviour
{
    public AudioClip clip;
    public void BackButtonClick()
    {
       
        SoundManger.instance.SFXPlay("ButtonClick", clip);
        StartCoroutine(PickCharacter.instance.BackBtnClick());
      
    }
}

 

이렇게 추가해주면 버튼 클릭시 소리가 재생된다.

 

배경음악 출저

 

{{Attribution|Alexander Nakarada}}

 

PlayerPrefab을 이용하여 닉네임생성및 저장을 할예정이다.

서비스할 게임이 아니기때문에 굳이 서버까지 사용 할 필요가 없을거같다. 

 

심심해서 만들어본 인트로신

 

 

타이틀 매니저 오브젝트 생성 스크립트 생성후 추가

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

public class TitleManger : MonoBehaviour
{
    public GameObject menupanel;
    public GameObject intropanel;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(DelayTime(4f));
    }

    IEnumerator DelayTime(float time)
    {

        yield return new WaitForSeconds(time);
        intropanel.SetActive(false);
        menupanel.SetActive(true);
    }
}

 

검이 들어가는 애니메이션은 직접 이미지를 구해 애니메이션을 만든거다.

검은화면에 메인메뉴가 나올예정

반응형