728x90
728x90
사슬, 대롱대롱 매달려 있는 추, 또는 상부에 연결된 로프 등을 물리적으로 자연스럽게 구현하기 위해 고민하다가 유니티에서 제공하는 Hinge Joint 컴포넌트를 발견했다. Hinge는 '경첩'을 의미하는 단어로 문을 열고 닫을 때 벽과 연결되어 축을 기준으로 회전할 수 있게 하는 고정핀 같은걸 의미한다. 힌지 조인트(Hinge Joint)는 두개의 Rigidbody를 묶어서 힌지에 연결된 것 같이 움직이도록 제약을 두는 기능이다. 다시 말해 A 오브젝트가 B 오브젝트에 종속적으로 연결되어 B 오브젝트가 물리적으로 영향을 받을 때 A와 B가 연결된 축(Axis)을 기준으로 A 오브젝트가 영향을 받게 된다. Hinge Joint 컴포넌트를 추가하면 다음과 같은 프로퍼티를 확인할 수 있다. 가장 핵심적인 기..
스마트폰 환경에서 AR 나무쌓기 게임을 만들었다. AR 개발을 위해 기본적으로 유니티 세팅을 해주면 된다. 패키지 매니저 - 유니티 레지스트리에서 AR Foundation을 설치해주고, 프로젝트 세팅에서 XR Plug -in Management - ARCore을 설치해준다. 프로젝트 세팅 - Player의 Grapics APIs에서 Vulkan을 삭제, Minimum API Level에서 Android 7.0으로 변경해 준다. 그리고 2019년 구글 정책의 변경으로 64비트 앱만 호환가능하기 때문에 Configuration의 Scripting Backend를 IL2CPP로 변경, ARM64를 체크해주면 된다. 마지막으로 빌드 세팅에서 Andoroid로 Switch Platform해준다. 프로젝트 개발 순..
2D 화면 상 배경 이미지 스크롤 방법 2D 게임을 진행하다보면 배경이 무한 스크롤되는 것을 종종 확인할 수 있다. 유니티에서는 다음 방법으로 배경 스크롤을 간단하게 구현할 수 있다. 배경으로 쓸 2D 소스들을 임포트해주었다. 총 7개의 배경이 간격을 두고 겹쳐보이게 한 후 한쪽 방향으로 흐르게 만들 것이다. Material을 7개 생성하고 Shader는 Unlit/Transparent로 변경 후 임포트한 배경 Texture을 매핑해주었다. 그리고 씬 뷰에서 Quad를 7개 만들고 Materials에 각각 연결해 준 뒤 하늘 - 구름 - 산 - 돌 순으로 위치를 조정(Z값 이동)해주어 게임 뷰에서는 겹쳐보이도록 만들었다. 그리고 BGScroller라는 빈 오브젝트를 생성 후 7개의 배경을 자식화한 뒤 B..
마찰력을 활용한 게임 요소 구현 using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoxState : MonoBehaviour { public PhysicsMaterial2D slopeMaterial; private Rigidbody2D boxRigidbody2D; private float boxMass = 0f; private float gravity = 0f; private float friction = 0f; private float angle = 0f; void Start() { boxRigidbody2D = GetComponent(); boxMass = boxRigidbody2D.m..
등가속도 운동 개념 등가속도 공식을 활용한 오브젝트 이동 shotAngle = 45 가정 using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallController : MonoBehaviour { public float shotVelocity; public float shotAngle; private Rigidbody2D ballRB2D; private bool isGround = true; private bool isCenter = false; private float totalTime = 0f; void Start() { ballRB2D = GetComponent(); } void Up..
Addforce를 활용한 게임 요소 구현하기 충격력(Force) : 질량 * 거리 / 시간^2 충격량(Impulse) : 질량 * 거리 / 시간 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ForceController : MonoBehaviour { private Rigidbody boxRigidbody; private float movePower = 5f; void Start() { boxRigidbody = GetComponent(); } private void FixedUpdate() { //Impulse는 1초동안 가해진 힘의 합 //FixedUpdate의 경우 0.02초동안 스..