분류 전체보기
-
충돌판정 오류유니티/오류&문제점 2024. 3. 5. 16:00
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerControl : MonoBehaviour { private Rigidbody rigidbody; public float speed = 8f; void Start() { rigidbody = GetComponent(); } void Update() { float x = Input.GetAxis("Horizontal"); float z = Input.GetAxis("Vertical"); float xspeed = x * speed; float zspeed = z * speed; Vector3 newvelo = new Vector3(x..
-
충돌판정유니티/유니티 메인 2024. 3. 4. 22:27
물리엔진을 위한 충돌판정 조건은 2가지가 있는데 1. 둘중 하나는 리지드바디 컴포넌트가 있어야한다 2. 두 객체 모두 콜라이더가 있어야한다. 두 조건이 만족할시 충돌판정이 이루어진다 충돌에는 두가지의 종류가 있다 1. OnCollision 일반 충돌 -일반적인 콜라이더를 가진 두 게임 오브젝트가 충돌할때 자동실행. -충돌한 콜라이더는 서로 통과하지 않고 밀어냄 OnCollisionEnter (Collosion collision) : 충돌한 순간 OnCollisionStay (Collosion collision) : 충돌하는 동안 OnCollisionExit (Collosion collision) : 충돌한뒤 분리되는 순간 2. OnTrigger 트리거 충돌 -두 오브젝트의 콜라이더 중 최소 하나가 트리거..
-
닷지 게임 제작실습/닷지 2024. 3. 4. 18:09
우선 가볍게 스테이지부터 만들어준다. 여기서 주의할건 중심이 되는 Plane은 가급적 위치를 (0,0,0)으로 잡아주자 Player가 될 Capsule 모양 오브젝트. 색을 입히고 싶다면 Material을 만들어준뒤 적용시켜주자 후에 있을 충돌판정을 위해 Tag를 Player로 선택해주고, Rigidbody 콜라이더를 입혀준뒤, 충돌시 오브젝트가 쓰러지는것을 방지하기 위해 Constraints에서 각각 고정시켜줄 축을 고정시켜준다 이제 PlayerControl 스크립트를 만들어 방향키나 WASD의 입력을 받아 이동하는것을 구현해보자 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Playe..
-
가까운 적 찾기유니티/유니티 메인 2024. 2. 28. 00:51
오늘은 키보드 버튼에 따라 3D 오브젝트를 이동시키는 스크립트 사정거리 안에 들어오면 적을 감지하는 스크립트 여러 적이 있을때 가장 가까이 있는 적을 출력하는 스크립트 크게 총 3가지의 중요 스크립트를 구현해보겠다 우선 각각 Player와 Monster의 이름으로 빈공간에 각각 맞는 프리펩을 넣어준다 이번에는 상속을 이용하기보다는 여러개의 컴포넌트를 용도에 따라 분류하여 사용하도록 미리 만들어주었다 우선 키보드를 눌렀을때 인식해줄 CInput 스크립트에 코드를 넣어주자 using System.Collections; using System.Collections.Generic; using UnityEngine; public class CInput : MonoBehaviour { public Vector3 d..
-
홀로그램 응용유니티/게임그래픽 2024. 2. 24. 16:44
1. 홀로그램을 깜빡이게 해보자 깜빡이는 주기는 _speed라는 이름으로 입력받은 range로 조절할 수 있다 void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); o.Emission = _Color.rgb; //rim float ndot = saturate(dot(o.Normal, IN.viewDir)); float rim = pow(1- ndot, _RimPow); o.Alpha = rim * sin(_Time.y * _Speed); } 윗부분은 사실 다 아는 내용이니까 넘어가고 출력파트만 보겠다 o.Alpha = rim * sin(_Time.y); 이게 핵심이다. 우선은 깜빡이게 하기 위해서는 ..
-
홀로그램유니티/게임그래픽 2024. 2. 24. 16:38
이번엔 Rim 라이트를 알파에 집어넣어 우리가 흔히 알고 있는 홀로그램의 기본형을 만들어보자 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; struct Input { float2 uv_MainTex; float3 viewDir; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); o.Albedo ..
-
Fresnel(프레넬) & Rim 라이트유니티/게임그래픽 2024. 2. 22. 15:38
Rim 라이트 : 역광이 있을때 털이나 반투명 재질을 가진 물체들이 반사율에 따라 반사가 나타나는것 몸 윤곽선에 보이는 얇은 하얀색 부분을 Rim 라이트라고 이해하면 쉽다 유니티에 물리기반 쉐이더는 BRDF라는 함수를 이용해 구현되어 있다. 현실에서 그렇듯 유니티에서도 물질의 재질에 따라 반사율이 달라진다. 그리고 이러한 반사공식을 Fresnel이라고 한다 원래 Fresnel은 빛 방향과 연관되어 만들수 있겠지만 주로 게임안에서는 캐릭터의 분리와 강조를 위한 수단으로 사용한다 이제 Rim 라이트와 Fresnel에 대해서 알아봤으니 먼저 Fresnel 공식부터 구현해보자 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D..
-
Half-Lambert유니티/게임그래픽 2024. 2. 22. 11:40
Half-Lambert란 갑자기 음영이 검게 떨어지는 단점을 보완하게 위해 벨브에서 발표한 Lambert라이팅의 수정공식으로, 물리적으로는 옳지 않으나 가볍고 게임속 음영을 보기편하게 하는 공식이다 딱봐도 게임할땐 오른쪽이 더 보기 편해보인다 float4 Lighting_MyLambert(SurfaceOutput s, float3 lightDir, float atten) { float ndot = dot(s.Normal, lightDir) * 0.5 + 0.5; float4 final = saturate(ndot) + 0.5; return final; } 적용하는 방법은 매우 간단하다. ndot에 들어가는 값에 (* 0.5 + 0.5) 만 넣어주면 된다 전후 차이이다. 확실히 더 자연스럽고 보기좋게 바뀐..