[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[] 등의 가변길이로 받을 수 있는것이다.
'2025유니티수업' 카테고리의 다른 글
| 0509 유니티 애니메이션 (0) | 2025.05.09 |
|---|---|
| 0508 휴머노이드 애니메이션(애니메이션 정상 작동 시키기 포함) , C# 클래스 상속 (0) | 2025.05.08 |
| 0502 시네머신, 마우스 클릭한 위치로 움직이기, C# (0) | 2025.05.02 |
| 0501 UI만들기, 유니티 애니메이션 (0) | 2025.05.01 |
| 0430 3DMax, 2D게임 만들기 (0) | 2025.04.30 |