2025유니티수업

0507 마우스 클릭해서 이동하기_2(더블클릭 구현), 메카님 방식 애니메이터, C#

버스창문 2025. 5. 7. 17:53

 

 

    [Header("마우스 더블클릭 관련 변수")]
    public float M_doubleClickSecond = 0.25f;
    public bool isOnClick = false;
    public double m_Timer = 0;

 

 

처음 만들때는 다 public으로 뚫어서 헤더 달고 해놓는게 알아보기 좋다

 

 

 

 

_______________________________________________________

 

프리팹 수정해야 할때 Unpack

 

 

humanoid상태

select 클릭해서 원본쪽에 있는 Optimize클릭

하이어라키에 노출시킬 부분만 체크 후 apply

R_Hand만 있음

 

 

 

검색도 지원함

 

애니메이터 컨트롤러 생성

 

 

레이어를 여러개 만들어서 얼굴 애니메이션 따로 몸 애니메이션 따로 같은 식으로 만들 수 있다.

매개변수(조건)

 

 

트리거 일단 만들어놓고

트랜지션 양방향으로 만들어 놓고

 

 

 

idle에서 attack으로 가는 트랜지션은 Exit time(시간 지나면 자동으로 다음거로 이동)

체크 해제

attack -> idle은 그대로 냅두기

public class WizardMechanim : MonoBehaviour
{
    public Animator animator;


    void Start()
    {
        this.animator = GetComponent<Animator>();
    }


    void Update()
    {
        if (Input.GetMouseButtonDown(0)) // legacy때는 button해놓고 꾹 눌러야 재생됐지만 휴머노이드
                                         // 방식은 buttonDown으로도 가능
        {

        }
    }
}

trigger : 동작을 다 해야 끝남

bool : 중간에 끊기 가능

 

 

 

 

blend tree

만들어진거 더블클릭

 

저 수치가 달라지는거에 따라서 모션이 블랜드됨

    public string attack = "Attack";
    public string skill = "IsSkill";
    public string idleAndMove = "IdleAndMove";

update 내에 쌍따옴표 있으면 new로 생성되기때문에 미리 생성해놓고 할당해야함

            if(agent.remainingDistance <= 0.5f)
            {
                agent.isStopped = true;
                animator.SetFloat(idleAndMove, 0, 0.2f, Time.deltaTime);
            }

0.5남았을때 멈추는거

서서히 멈춰야 되기때문에 setFloat 값을 서서히 바뀌도록 설정 가능

//더블클릭 구현 코드

if(isOnClick&&Time.time - m_Timer > M_doubleClickSecond)
        {
            Debug.Log("1딸깍");
            isOnClick = false;
        }
        if (!isOnClick)
        {
            m_Timer = Time.time;

            isOnClick = true;
        }
        else if (isOnClick && Time.time - m_Timer < M_doubleClickSecond)
        {
            Debug.Log("2딸깍");

            isOnClick = false;
        }

auto braking 체크하면 실제 움직임엔 큰 차이 없고 오히려 애니메이션을 부드럽게 해주는 효과가 있다.

 

humanoid는 rigidbody안넣고 character Controller를 넣는다

 

 

 

________________________________________________________

 

 

 

 

 

 

 

 

 

 

라벨 만든다음 셋팅

 

text box

 

 

 

버튼 더블클릭 후 구현

 

 

 

__________________________________________________

 

객체지향 프로그래밍 3대 특성(OOP)

은닉성(private) : 사용하는데에 필요한 기능만 public

*protected : 상속인 경우 부모클래스 에서 protected라고 선언 한 경우 자식 클래스에서 public처럼 사용가능, 그 외 사용 불가능

 

상속성 : 

다형성

 

 

 

1. break  와 continue 각각 설명하세요

break : 반복문 전체 탈출
continue : 반복문 이번 반복만 탈출


2. 유니티에 어떤 객체가  마우스가 클릭 하는 곳으로 이동 하려면
   어떻게 해야 하는 지 설명 하세요

1. ray와 raycastHit 선언
2. camera.Main.screenpointToRay(mouse.position)을 ray에 저장
3.physhics.raycast(ray, out hit, infinity, 1 << 8)
             광선,  맞은곳을 반환하는 반환용 매개변수, 광선의 길이, 몇번 레이어로 검사할건지

를 if에 넣고, 만약 광선이 어디에 닿았으면 hit의 point를 캐릭터에 부착되어있는 navMeshAgent.destination쪽에 넣는다.



3. 기본 데이터 형식과 복합데이터 형식 
   값형식  스텍형식  heap형식 참조형식에 대해 설명 하세요

어떤 값을 선언했을때, 그 값과 그 값이 들어있는 주소가 따로있다.
값 형식 : 이때 그 값
참조 형식 : 이때 그 주소
스택 형식 : 함수 안에 선언되어있는 변수, 함수 진행하면서 위로 하나씩 쌓이고, 함수가 끝날떄 위에서 부터 사라짐
               값 형식이 저장됨
heap 형식 : 참조형식, new로 생성한 메모리가 저장됨



4. 가변길이 메서드를 만들어서
    어떤 인자든지 다받아서 합계를 구할 수 있게
    메서드를 만들어 보세요


int total = 0;
total = Sum(1,2);
Console.WriteLine(total);
total = Sum(1,2,3,4,5,6);
Console.WriteLine(total);


        private static int Sum(params int[] nums)
        {
            int total = 0;
            foreach (int x in nums) 
            {
                total += x;
            }
            return total;
        }



5.메소드 오버로딩은 위의 가변길이 개수 메서드를 쓰면 필요 있는 지 없는 지 설명하고
  메소드오버로딩과 가변길이 인수를 받는 메서드를 뭐가 다른지 설명 하세요

필요하다.
한가지 변수만 저렇게 받는게 아니라, 여러 종류의 변수를 받는 함수일 수 있기 때문이다.
당장 오늘 배운 Animator의 SetFloat 함수만 살펴봐도 string(어떤 수를), float(몇으로) 만 받고도 실행이 되지만,
오버로드로 만들어둔 string(어떤 수를), float(몇으로) , float(몇초동안) , float(deltatime 적용용 매개변수)라는
형태로도 실행이 된다.

메소드 오버로딩은 동일한 이름의 함수를 매개변수 내용만 다르게 해서 여러개 만들어두는거고
가변길이 인수를 받는 메서드는 한개의 함수가 매개변수만 int[] 등의 가변길이로 받을 수 있는것이다.