반응형
[13회차 수업 내용]
1.핀볼게임
2.애니메이션
3.기타
1.1 Sprite란
Unity에서 2D 이미지를 게임 오브젝트로 만들기 위해 사용하는 형식
일반적으로 .png, .jpg 등의 이미지 파일을 Sprite 타입으로 임포트해서 사용
1.2 회전
public class PinballManager : MonoBehaviour
{
public Rigidbody2D leftStickRb;
public Rigidbody2D rightStickRb;
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
leftStickRb.AddTorque(30f);
else
leftStickRb.AddTorque(-25f);
if (Input.GetKey(KeyCode.RightArrow))
rightStickRb.AddTorque(-30f);
else
rightStickRb.AddTorque(25f);
}
}
* Rigidbody2D ->양수면 반시계 방향, 음수면 시계 방향 (Z축 기준 회전)
* 3D일 때는? 원하는 축 기준 회전 (Vector3.right, Vector3.up, Vector3.forward 등)
rb.AddTorque(Vector3.up * 50f);
1.2.1 회전에 대한 추가 학습
AddTorque는 회전하는 힘을 주기 때문에 회전 가속도를 높인다.
* 왜 기본 위치 이상으로 넘어가진 않는가?
: 힘이 반대방향으로 아주 강하게 주면 넘어가지만, 적당한 힘이면 원래 위치로 돌아간다.
- Rigidbody2D에 angularDrag(회전 감속 저항) 이 기본값으로 잡혀 있어서 외부 힘(토크)을 주지 않으면 회전하지 않음
1.2.2 HingeJoint2D
: 2D 물체를 고정된 축을 중심으로 회전시키는 조인트로, 플리퍼, 문, 레버 같은 회전 오브젝트에 아주 적합
Use Motor | 체크하면 모터 기능 사용 (자동 회전) |
Motor Speed | 회전 속도 (음수면 반대 방향) |
Max Motor Torque | 최대 회전 힘 (회전 강도) |
Use Limits | 회전 각도 제한 사용 여부 |
Angle Limits (Min/Max) | 회전 가능한 최소/최대 각도 |
= 각도 제한 가능한 관절
1.3. 충돌 & 점수 집계
public class Pinball : MonoBehaviour
{
public PinballManager pinballManager;
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Untagged") == false)
{
switch (other.gameObject.tag)
{
case "POINT10":
pinballManager.SetScore(10);
break;
case "POINT50":
pinballManager.SetScore(50);
break;
case "POINT100":
pinballManager.SetScore(100);
break;
case "DROP":
pinballManager.GetScore();
break;
}
}
}
}
public class PinballManager : MonoBehaviour
{
public Rigidbody2D leftStickRb;
public Rigidbody2D rightStickRb;
private int scorePoint = 0;
void Update()
{
if (Input.GetKey(KeyCode.LeftArrow))
leftStickRb.AddTorque(30f);
else
leftStickRb.AddTorque(-25f);
if (Input.GetKey(KeyCode.RightArrow))
rightStickRb.AddTorque(-30f);
else
rightStickRb.AddTorque(25f);
}
public void SetScore(int point)
{
scorePoint += point;
Debug.Log($"{point} 포인트 획득!!");
}
public void GetScore()
{
Debug.Log($"게임 종료 : 획득 포인트 {scorePoint}");
Time.timeScale = 0f;
}
}
1.3.1 Unity에서 충돌 객체 other
- other 는 보통 Collision2D 또는 Collider2D 타입 변수명으로 사용
- 예시
other.gameObject | 부딪힌 상대 오브젝트 |
other.collider | 충돌한 상대의 Collider |
other.contacts | 접촉 지점 정보들 |
other.relativeVelocity | 충돌 시 상대 속도 |
other.rigidbody | 충돌한 상대의 Rigidbody2D (있다면) |
1.3.2. 색깔 바꾸기 코드 예시
using UnityEngine;
public class ChangeColorOnCollision : MonoBehaviour
{
private SpriteRenderer sr;
public Color hitColor = Color.red;
void Start()
{
sr = GetComponent<SpriteRenderer>();
}
void OnCollisionEnter2D(Collision2D other)
{
if (sr != null)
{
sr.color = hitColor;
}
}
}
2. 애니메이션
2.1 Unity에서 Pivot(축) 바꾸는 법 & Prefab 수정
- Empty GameObject를 생성해서 원하는 위치에 배치
- 움직일 오브젝트를 Empty의 자식으로 설정 : 축(pivot) 역할을 Empty가 대신함 → 회전/스케일 기준이 변경됨
- Prefab을 수정하려면→ 원본 연결 해제 (깨짐) : 오브젝트 우클릭 → Prefab → Unpack Completely
- 수정 후 다시 드래그해서 Prefab으로 저장 가능
2.2 애니메이션 파일 생성
- Project 창에서 애니메이션 파일 생성 (Create → Animation)
- 해당 오브젝트 선택 → Animation 창 열기
- 자동으로 Animator 컴포넌트가 생성됨
- 녹화 버튼 클릭
- 시작 프레임/끝 프레임 기준으로 동작 생성 (시작 상태는 생략 가능하지만 있으면 명확)
- 애니메이션 파일 선택 후 Inspector 창 → Loop Time 체크 해제
2.3 Trigger로 문 열고 닫기 (애니메이터 + 스크립트 연동)
- 애니메이터에 Trigger 파라미터 만들기
- 문 오브젝트에 Animator 컴포넌트가 있어야 함
- Animator 창에서 상태(State) 연결
- 문 오브젝트에 콜라이더 설정
- Box Collider (Is Trigger 체크)
- C# 스크립트 적용 (DoorEvent.cs)
public class DoorEvent : MonoBehaviour
{
public Animator doorAnim;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
doorAnim.SetTrigger("Open"); // 트리거 실행 → 애니메이션 전이
}
}
void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
doorAnim.SetTrigger("Close"); // 트리거 실행 → 닫힘 애니메이션
}
}
}
- Animator.SetTrigger("Open") → 애니메이터의 Open 트리거를 실행
- OnTriggerEnter() / OnTriggerExit() 은 Unity가 자동으로 실행하는 콜백 함수
3.1 2D 환경에서 캐릭터가 돌아간다면 Rigidbody2D의 Z축 회전을 잠가서 고정
3.2 .활성화 상태 유지하면서 보이지 않게 하는 법 — SpriteRenderer 끄기
반응형
'프로그래밍 > 유니티 부트캠프' 카테고리의 다른 글
유니티_(Animation / 사운드 적용 / UI / 인트로 화면) 멋쟁이사자처럼 유니티 부트캠프 15회차 추가학습 (2) | 2025.06.10 |
---|---|
유니티 (Door 애니메이션과 Sprite 애니메이션)멋쟁이사자처럼 유니티 부트캠프 14회차 추가학습 (0) | 2025.06.09 |
멋쟁이사자처럼 유니티 부트캠프 12회차 추가학습 (Collider & Rigidbody / Physics Material / 고양이 점프와 파이프 생성) (3) | 2025.06.08 |
멋쟁이사자처럼 유니티 부트캠프 11회차 추가학습 (배경 횡스크롤과 Material) (0) | 2025.05.27 |
W3Schools C# 개인학습 (Array->Multidimensional Arrays) (0) | 2025.05.26 |