본문 바로가기
유니티

유니티 7일차

by 육지상어 2021. 1. 10.
728x90
반응형

01 10

저번 주 수업 한번 빼먹었다.
다음에 복습하자.

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

public class cUI : MonoBehaviour
{
public Text UI_Text;
public Image UI_Image;
public InputField UI_Input;

public void BtnClick()
{
    UI_Text.text = "텍스트 변경";
    UI_Image.fillAmount = 0.5f;
    Debug.Log("버튼클릭!");
}

public void InputChang()
{
    UI_Text.text = UI_Input.text;
}
public void InputEnd()
{
    UI_Text.text = UI_Input.text + "완료";
}

}
이 소스로 스크립트를 만든다.

일단 하이라이키에서 ui 만들기 -> ui

메인 카메라와 별도로 보이는게 캔버스고, 그 안에 버튼이 있으면 버튼
이 보인다.
다시 캔버스 안에 텍스트를 만들자.

텍스트 높이랑 크기를 조정하면 되고
호리즌탈 오버플로, 버티칼 오버플로를 조절하면 글자가 늘어나도 글자가 짤리진 않는다.

버튼에 스크립트를 넣을땐, 외부에서 퍼블릭을 넣어줘야한다.

인풋필드에 들어간 후, 온 벨류 채인지, 스트링이 있는데 거기서 cui를 끌고와서 온첸지를 하고, 온엔드에는 그걸 넣는다.

그렇게하면 인풋창에 키를 입력할때마다 텍스트에 입력되고,
이미지를 클릭하면 이미지 엥커 프리셋이 있는데, 이미지의 왼쪽 하단과의 거리를 유지하게끔 하는게 있다.

유아이가 잘 안되면, 하이라이키에 ui-> 이벤트 시스템을 하나 새로 만들어 할 수 있다. 하나만 있으면 충분함으로 동시에 여러개 ㄴㄴ

유아이들이 겹칠때 우선순위는 하이라이키에 넣은 역순이다.

다음은 역순으로 보이는것.

UI - > 스크롤 뷰-> 그리고 보통 게임에서 스크롤 바를 안쓰니깐 스크롤 뷰 요소에서 지워준다. 뷰포트 - > 컨텐츠 -> UI 이미지- > 이미지를 넣는다. 이미지를 컨트롤 D를 눌러 복제한다.

컨텐츠 -> 에드 컴퍼넌트 -> 그리드 레이아웃 그룹
그리드 레이아웃 그룹을 하면 안에 있는것을 정렬해줌

그리드에서 패딩은 가장자리 여백이고, 셀 사이즈를 선택하면 정렬됨

컨텐츠 -> 에드 컴퍼넌트 -> 컨텐츠 사이즈 픽터-> 민으로 하고
이미지 뷰포트 사이즈를 조절해준다. ( 잘 안보인다면)

스케일을 키워서 글자를 키우지말고 폰트 사이즈를 이용해라. 안그럼 깨진다텍스트에 에드 컴퍼넌트로 글자 외각에 아웃라인을 추가할수있다.

현재 사용하는 아리알이란 폰트는 상업용으로 사용하면 안되지만, 네이버에 눈누를 들어가서 폰트를 다운받자.

폰트 라이센스를 확인하자(범위가 다르다) 하고 사용하면 된다.
폰트 다운로드 후, 에셋에 넣고 (ttf)변경하면 된다.

유아이 요소들은 이벤트 시스템이란게 있어야 정상적으로 작동한다.
UI -> image, Inputfield 를 새로 생성한다.

유아이 요소들을 유아이 스크립트에 넣는다.

사용할 이미지를 프로잭트로 집어넣고, 이미지의 타입을 스프라이프 투디엔 유아이로 바꾸고, 이미지 하이라이키에 집어넣어주고, 이미지 타잎을 필드로 바꿔준다. (어플리를 누른다) 필 어몬트를 조절해서 이미지를 좀 가릴 수 있고, 필 메트후드로 안보이는 비율을 조절한다.

버튼을 누르면 btn 클릭이란 함수를 발동한다. 하이라이키 버튼에서, 온 클릭누르고 +를 누르면 cUI가 들어간 오브젝트를 cui에 넣어준다.
넣어주고 런타임 옆 창을 클릭해 cUI이에 온클릭을 선택해준다.


다음은 네비게이션을 만들 차례이다. 뉴 씬 만들고
플랜을 하나 생성해주고. 위치를 초기화한다.

윈도우 -> AI -> 네비게이션 클릭 -> 베이크 -> 아무것도 안일어남

플랜 -> 스태틱 옆에 화살표 -> 네비게이션 스테틱 -> 네비 -> 베이크

큐브 만들고, 위치 정해주고, 큐브도 네비게이션 스테틱 한 후에 -> 플랜 -> 네비 베이크로 만들면 다시 네비가 생김

캡슐(캐릭)을 만들고, 좌표 점점점 -> 리셋 -> 캡슐의 에드 컴퍼넌트 ->
네브 매시 아젠트를 집어넣는다.

캡슐에다가 cNavigation을 넣는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
//NavMeshAgent 컴포넌트 사용시 입력해주어야함

public class cNavigation : MonoBehaviour
{
NavMeshAgent navAgent;
//NavMesh 데이터를 기반으로 목적지까지
//최단거리를 계산하는 역할을 하는 컴포넌트

Ray ray;//레이 선언
RaycastHit hitInfo;//레이와 충돌한 오브젝트의 정보를 얻기 위해
                   //RaycastHit 변수 선언

void Start()
{
    navAgent = GetComponent<NavMeshAgent>();
    //스크립트가 들어간 오브젝트의
    //NavMeshAgent 컴포넌트를 navAgent 변수에 대입
}

void Update()
{
    Vector3 pos = Input.mousePosition;
    //마우스의 위치를 pos에 대입

    if (Input.GetMouseButtonDown(0))
    //만약에 마우스를 클릭 했다면
    {
        ray = Camera.main.ScreenPointToRay(pos);
        //레이 생성(마우스의 위치로)

        if (Physics.Raycast(ray, out hitInfo))
        //만약 광선이 콜리더에 닿았다면
        //닿은 물체에 대한 정보를 hitInfo에 저장
        {
            navAgent.SetDestination(hitInfo.point);
            //콜리더 충돌 지점으로 이동
            //SetDestination : 해당좌표로 이동시켜줌
            //hitInfo.point : 콜리더와 충돌지점
        }
    }
}

}

컨트롤 시프트 F를 누르면 내가 보고 있는 씬이 카메라로 보인다.

플렌 1을 더 넣고, 네비게이션 스테틱을 넣고, 오프 메시 링크 제네레이션을 넣는다.

그리고 네비게이션으로 들어가 점프 디스턴스를 2로 설정한다.
첫번째 플랜도 오프 메시 링크 제네레이션을 한다.

메인 카메라를 캡슐이 따라다니게 하려면, 캡슐 아넹 메인카메라를 넣는다.

메인 카메라를 캡슐 안에 안넣고 따라다니게 하려면, 안에 소스코드를 넣어야한다. 캡슐은 회전하는데 카메라는 회전을 주고싶지 않을때...

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

public class cCameraMove : MonoBehaviour
{
public Transform target;
public float OffsetX, OffsetY, OffsetZ;

Vector3 CameraPos;

// Update is called once per frame
void LateUpdate()
{
    CameraPos.x = target.transform.position.x + OffsetX;
    CameraPos.y = target.transform.position.y + OffsetY;
    CameraPos.z = target.transform.position.z + OffsetZ;

    //그냥 이동
    //transform.position = CameraPos;

    //선형보간으로 부드러운 이동
    transform.position = Vector3.Lerp(transform.position, CameraPos, 5 * Time.deltaTime);
}

}

씨 카메라 무브를 만들고, 특정 캐릭터를 따라다니게끔 조정하낟.

다음은 소리이다. 사운트 스크립트를 만든다. 그다음 음악 파일을 받아서. 프젝트에 넣어준다.

일단 배경음악을 먼저 해보면, -> 메인 카메라 -> 오디오 리스너가 보인다. 이건 듣는거다.
메인 카메라에 에드 컴퍼넌트. 오디오 클립에 오디오 소스를 넣는다.
아웃풋엔 오디오 믹서가 있는데 크게 신경을 쓰지 말자

그리고, 빈 오브젝트를 넣어 씨 싸운드를 넣는다.

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

public class cSound : MonoBehaviour
{
AudioSource hsAudio;
public AudioClip DamageSound;
public AudioClip AttackSound;

// Use this for initialization
void Start()
{
    hsAudio = gameObject.AddComponent<AudioSource>();
    //AudioSource 컴포넌트를 추가

    hsAudio.loop = false; //반복하지 않음
}

// Update is called once per frame
void Update()
{
    if (Input.GetKeyDown(KeyCode.Q))
    {
        hsAudio.clip = DamageSound;
        hsAudio.Play(); //재생
    }
    else if (Input.GetKeyDown(KeyCode.W))
    {
        hsAudio.clip = AttackSound;
        hsAudio.Play(); //재생
    }
    else if (Input.GetKeyDown(KeyCode.E))
    {
        hsAudio.Stop(); //정지
    }
    else if (Input.GetKeyDown(KeyCode.R))
    {
        hsAudio.Pause(); //일시정지
    }

}

}
그 다음 재생을 누르면 동작한다는데 잘 안된다.
나중에 zoom 해결하면 해보자.

mp3, ogg,wav, aiff 가 있다.
mp3 ogg는 압축 사운드 - 주로 배경음악 사용
wav,aiff 는 비압축 사운드 - 주로 효과음에 사용

공짜싸운드는 유투브 -> 유튜브 스투디오, 오디오 보관함
저작자 표시 필요없음을 선택하여 다운받는다.

숙제----
1.다음은 그림을 누르면 수달 이미지가 보이고 안보이고,
2.점수를 누르면 점수가 하나씩 늘어나게끔
(정수형 변수는 텍스트에 넣을때, toString() 변환 필요)
ex num;
text.text=num.ToString 이런식으로..

그리고 setAtive로 활성 비활성화를 조절하는게 더 좋다고한다.
public GameObject imageObj
imageObj.SetAtive(false)
check= false;
로 할수도있고

imageObj.ativeSelf == ture 면 굳이 불형 변수를 사용할 필요가 없다.

유니티 사이트 -> 롤어 어 볼 이라는 게임을 하나 만들어보자

반응형

'유니티' 카테고리의 다른 글

유니티 9일차  (0) 2021.01.24
유니티 8일차  (0) 2021.01.17
유니티 5일차  (0) 2020.12.31
유니티 4일차  (0) 2020.12.20
유니티 수업 3일차  (0) 2020.12.13

댓글