Post

앵커는 UI가 Canvas 내에서 기준이 되는 위치를 설정하는 것이다.

예를 들어 중앙으로 잡고 싶다면 Rect Transform Anchor를 middle, center 로 설정한다.

그러면 캔버스 중앙이 0, 0 위치를 가지게 된다. 


 


왼쪽 상단을 0, 0으로 잡고 싶다면 Top, Left로 설정하면 된다.

 


또 앵커는 앵커 위치와 UI의 위치를 고정시킬 수 있다.

만약 왼쪽 상단에 앵커가 있을 때, 화면 해상도가 바뀌더라도 앵커와 UI의 간격은 변하지 않는다.

앵커로 고정하지 않았기 때문이다.

만약 앵커가 없었다면 화면 해상도에 따라 UI의 위치가 바뀐다.



Post

Animation

set as Layer Default State : 처음 시작하는 애니메이션 동작으로 설정

MakeTransition : 이 동작다음에 어떤 동작을 할 것인지 화살표로 설정가능.

Animator 창옆에 변수를 만들고 화살표를 클릭해서 그 변수를 제어할 수도 있다.


2D 충돌 체크

1.Circle Collider 2D 컴포넌트를 스프라이트에 추가

2.스프라이트 스크립트를 만들어서 함수 OnMouseDown 함수를 추가

3.해당 스프라이트를 클릭하면 OnMouseDown 함수 호출


코루틴이란?

유사 쓰레드.

유니티에서 쓰레드를 사용하면 일렬의 흐름(Physic->Input->Update->Render->Physic)을 깨므로 코루틴 사용

ex ) 리턴값을 IEnumerator로 수정, yield return new WaitForSeconds (2.5f);


Invoke란?

특정함수를 몇초 뒤에, 몇초동안 반복하게 만드는 함수



Tag : 인덱싱

Layer: 그림그리는 것을 구분

레이캐스트 : 어떤 곳을 선택했는지 알 수 있다.


Orthographic

앵커 : 기준이 되는 위치를 ui로 정한다.

화면해상도가 바뀌어도 그 자리에 위치한다.


RichText

리치텍스트 체크하면 웹 태그 처럼 가능함.(**외부에서 스크립트로 넣어도 발현됨!!)

<b>Score</b><size=80><color=#ff0000ff>: 9999</color></size>



Post

배경만들기

Sprite 사용하는 법 > 그냥 이미지일 경우 Texture Type이 Defualt -> Sprite 로 바꿔준다.

2d스프라이트 자체를 Hierachy에 넣음(2d 오브젝트 밑에 넣을 필요 없음. 그냥 배경이라..)

Inspector에서 Sprite Editor 를 클릭. 초록색 선을 맞춰줌.

=> 스프라이트 늘릴 시 누꺼워지는 현상 방지

=> 또 Draw모드를 Tiled로 하면 자른 스프라이트를 반복적으로 그려진다.


SpriteMode

Single

Multiple : 같은스프라이트를 여러개 붙여놓은 것

Polygon : 본애니 방식


묶을 스프라이트들 SpriteMode 아래 Packing Tag를 하나로 통일한 후

메뉴 Window-Packing Tag 누르고 Pack클릭. 스프라이트들이 하나가 된 것을 확인할 수 있다.


스프라이트 Animation 추가

Animator Component 추가

그리고 Window-WindowAnimator클릭Animation클릭

스프라이트애니메이션 OBJ누르면 Animation창에 Create 버튼이 뜸.클릭해서 생성

생성 후 스프라이트들을 알맞은 시간대에 넣고 플레이 누르면 스프라이트가 움직인다.

(스프라이트 시 스프라이트 패킹할 것!!)

=> 정리


1. 빈 오브젝트를 만든다.

2. 빈 오브젝트에 Animator Component를 추가한다.

3. 그 아래 스프라이트 이미지를 Prepab에서 끌어온다.

4. Window-Animation 창을 보면 Create 란 버튼이 생긴다. 여기서 애니메이션을 만든다.

5. 만든 애니메이션은 Animator Inspector에 Controller에 넣는다.

6. 그리고 스프라이트를 알맞은 시간대에 넣어주면 된다

(Add Property로 위치, 투명도 조절이 가능하다)



화면은

Scale With Screen Size

1920x1050


이미지 폰트 사용하는 법

그냥 Sprite의 Text의 Font 옆에 동그라미를 누르면 폰트를 선택할 수 있다.

이미지 폰트도 선택할 수 있다.



public 대신 [SerializeField] 

=> 에디터에서만 보이고 외부에서는 사용할 수 없음.


LateUpdate란?

유니티 동작 순서

awake->start

physics->imput->update->rander->physics


그런데 Update가 세가지로 나눠진다.

FixedUpdate : 내부적으로 지정된 시간마다 들어옴.

Update : 매 프레임마다 들어옴

LateUpdate : 딴 update보다 나중에 들어옴. ui나 겨로가 보여줄 때 씀.(모든 연산이 다 끝난다음 보여주기 위해)



Post

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


//public class NewBehaviourScript : MonoBehaviour {


    public class MoveScript : MonoBehaviour

    {

        public float moveSpeed = 2.0f;


        public float rotSpeed = 2.0f;


        Vector3 posTarget;




        void Awake()


        {


            //moveSpeed = 10.0f;


            posTarget = new Vector3();


        }




        // Use this for initialization


        void Start()


        {


            posTarget = transform.position;


        }




        // Update is called once per frame


        void Update()


        {


            // 느린컴퓨터는 Update에 느리게 들어오고 빠른컴퓨터는 빠르다...속도를 동일하게 하기위해


            // 시간계념이 필요함 (deltaTime)




            bool trans = false;


            if (trans)


            {


                float mx = Input.GetAxis("Horizontal"); // -1 ~ 1;


                transform.Rotate(Vector3.up * mx * Time.deltaTime * rotSpeed);


            }


            else


            {




                float mz = Input.GetAxis("Vertical"); // -1 ~ 1;


                float mx = Input.GetAxis("Horizontal"); // -1 ~ 1;




                Vector3 v = new Vector3(mx, 0, mz);


                v.Normalize(); // 원본 변경


                //v.Normalized(); // 원본 변경x


                transform.Translate(v * Time.deltaTime * moveSpeed);




                transform.Rotate(Vector3.up * mx * Time.deltaTime * rotSpeed);


                //transform.Translate(Vector3.forward * mz * Time.deltaTime * moveSpeed);


                //transform.Translate(Vector3.right * mx * Time.deltaTime * moveSpeed);




                // 마우스로 좌표찍어서 이동


                if (Input.GetButtonDown("Fire1"))


                {


                    Ray r = Camera.main.ScreenPointToRay(Input.mousePosition);


                    RaycastHit hit;


                    if (Physics.Raycast(r, out hit))


                    {


                        posTarget = hit.point;


                        Debug.Log(hit.transform.gameObject);


                        // 방향을 돌린다


                        //transform.LookAt (new Vector3(posTarget.x, 0, 0));


                        //transform.LookAt (posTarget);


                    }


                }




            }


            // 선형보간 이동


            //transform.position = Vector3.Lerp (transform.position, posTarget, Time.deltaTime * moveSpeed);


            // 정규속도로 가기


            if (Vector3.Distance(transform.position, posTarget) >= 0.1f)


            {


                Vector3 dir = posTarget - transform.position;


                // 부드럽게 방향 돌림


                // 나의 앞 방향과 목표 방향과 normallize해서 어느정도 이동해야하는지 결과값이 나옴


                Vector3 look = Vector3.Slerp(transform.forward, dir.normalized, Time.deltaTime * rotSpeed);


                // up y축 회전


                transform.rotation = Quaternion.LookRotation(look, Vector3.up);


                transform.position = Vector3.MoveTowards(transform.position, posTarget, Time.deltaTime * moveSpeed);

            }


        }




        void OnGUI()

        {


            // 방향키 앞뒤 누를 시 -1 ~ 1의 을 출력


            GUI.Label(new Rect(0, 0, 150, 40), Input.GetAxis("Vertical").ToString());


        }


    }

//}



'이전게시판 > Unity' 카테고리의 다른 글

유니티 2D충돌체크, 코루틴  (0) 2018.04.29
유니티 스프라이트2D  (0) 2018.04.28
유니티 네비게이션, 파티클  (0) 2018.04.22
총알 만들고 쏘기(Prepfeb)  (0) 2018.04.21
Unity 기초 정리  (0) 2018.04.14
유니티 C# Scene 변경  (0) 2018.04.14
UGUI 캔버스, UI 정리  (0) 2017.10.11
유니티 UGUI 버튼 예제  (0) 2017.10.08
▲ top