Unity Engine/Unity 3D.

InputSystem을 이용해 WASD값 생성 Player.cs public PlayerInput Input; private Rigidbody Rigidbody ; flaot speed = 5f private void Awake //초기화 { Input = GetComponent(); Rigidbody = GetComponent(); } public Vector2 MovementInputInputSystem; //생성한 이름 PlayerInput.cs public PlayerInputActions InputActions { get; private set; } public PlayerInputActions.PlayerActions PlayerActions { get; private set; } 여기서 Pl..
Rigidbody의 Gravity가 수평 이동 속도를 따라잡지 못해 내리막길에서 튕겨지는 현상 Capsule Collider로 인한 턱 있는 경사로 진입 불가 경사면을 해결하기 위한 방법 경사면을 해결하기 위한 방법 Floating Capsule and Normal "Floating Capsule" 플로팅 캡슐은 플레이어에게 어떠한 방식으로 힘을 줘서, 캡슐이 지속적으로 떠 있게 하는 방식입니다. 즉, 캡슐의 중심이 지면에서 일정 거리를 유지하는 것입니다. 이를 크기 조정이 가능한 Capsule Collider와 혼합하여 플레이어가 특정 높이까지 계단을 오를 수 있도록 할 수 있습니다. "Normal" 플레이어 아래에 있는 지면의 법선을 가져오고, 해당 법선을 기준으로 플레이어 방향을 설정하는 작업입니다..
임의로 넣은 랜덤 값으로 적이 멈추고, 순찰하고, 추적하며 공격할수있도록 만들어보겠습니다. 상태패턴을 작용할것이라 Enemy.cs 그리고 내가 원하는 상태 enum { IDLE, MOVE, ATTACK, DEATH} 등을 적고 원하는 패턴에 대한 스크립트를 만들어서 작성을하는데... IDLE.cs, MOVE.cs, ATTACK.cs 등... 근데 여러 스크립트를 짜기엔 대형 프로젝트는 아닌지라 한 스크립트에 작성을 했습니다. 제가원하는 몬스터의 패턴은 다음과 같습니다 public enum State { IDLE, //멈춤 PATROL, //순찰 CHASE, //추적 ATTACK, //공격 EVADE, //회피 DEATH //사망 } //현 상태를 알수있도록 public State currentState ..
Monster의 기본적인 패턴의 변화 구상 IDLE(대기) : 멈추는 상태 Patrol(정찰) : 순찰하며 가볍게 걷는 상태, 감지 되는 거리에 오게되면 Chase상태로 전환 Chase(추적) : 추격하는 상태로 빠르게 걷는 상태, 플레이어를 추격 Attack(공격) : Chase상태에서 공격범위 내에 들어오면 공격을 실행한다. Evade(회피) : 필수는 아니지만, 몬스터가 쉽게 죽을수없도록 회피 기능도 구현했다. Death(죽음) : 체력이 0이되면 몬스터는 사망하며 삭제 이정도로 구성해봤다. using UnityEngine; public class EnemyController : MonoBehaviour { public enum State { IDLE, CHASE, PATROL, ATTACK, EV..
https://diding0222.tistory.com/38 일정한 간격으로 오브젝트 생성 private IEnumerator 코루틴이름() { //15개 생성할거니까 15, 간격은 2정도 CreateMagicPosWithInterval(15, 2f) } private void CreateMagicPosWithInterval(int count, float interval) { //플레이어 위치에서 살짝 떨어진 y값 4와 z값 - diding0222.tistory.com 지난번에 광선을 발사할 rayStartPos를 생성했다. 이번엔 광선이 도착할 rayEndPos를 만들것. //마법진과 물방울 생성 프리팹 public GameObject magicCircle; public Transform megidoT..
private IEnumerator 코루틴이름() { //15개 생성할거니까 15, 간격은 2정도 CreateMagicPosWithInterval(15, 2f) } private void CreateMagicPosWithInterval(int count, float interval) { //플레이어 위치에서 살짝 떨어진 y값 4와 z값 -1 Vector3 centerPos = playerController.transform.position + new Vector3(0f , 4f, -1f); List positions = new List(); for (int i = 0; i < 6; i++) { positions.Add(centerPos + new Vector3((i - 2.5f) * interval, 0..
Mesh Trail.cs를 만들어 Mesh를 갖고있는 캐릭터에 붙여준다, using System.Collections; using UnityEngine; public class MeshTrailTut : MonoBehaviour { public float activeTime = 2f; private bool isTrailActive; //메쉬 지연 public float meshRefreshRate = 0.1f; //캐릭터가 얼마나 많은 스킨과 메쉬 렌더링을 갖고있는가 private SkinnedMeshRenderer[] skinnedMeshRenderers; void Update() { if (Input.GetKeyDown(KeyCode.Space) && !isTrailActive) { isTrailA..
using System.Collections; using UnityEngine; public class ButtonsUI : MonoBehaviour { private PlayerController _playerController; private bool isPointerDown; private float clickInterval = 0.2f; private void Awake() { _playerController = GameObject.FindGameObjectWithTag("Player").GetComponent(); } public void ClickButtonAttack() { _playerController.OnClick(); } public void OnPointerDown() { isPoi..
저번 글에선 팩토리패턴을 이용하여 특정 위치에 도달하면 몬스터를 소환하는데 까지 성공했습니다. 이번엔 몬스터가 플레이어를 추적하게 만드려고합니다! (몬스터가 지나갈 바닥은 이미 Navigation Bake 해주었습니다) 몬스터를 나타내는 Lizard 클래스에 몬스터 AI를 구현하기위해 AI로직을 별도의 컴포넌트로 분리해 재사용성을 높여봤습니다.ㅇ using UnityEngine; using UnityEngine.AI; public class MonsterAI : MonoBehaviour { public Transform target;//추적할 타겟 private NavmeshAgent agent;//NavmeshAgent private void Start() { agent = GetComponent();..
플레이어가 이동해서 빈오브젝트에 있는 콜라이더에 충돌한다면, Enemy를 소환하려고합니다. 그리고 Enemy는 리자드와 오크라는 두가지 종류가 있고, 리자드에는 보스 리자드와 일반 리자드가 존재하며, 오크에는 보스 오크와 일반 오크가 존재합니다. 이 몬스터들을 소환하기 위해선 팩토리패턴을 사용할 것이기 때문에, 먼저 스크립트를 생성해보겠습니다. 먼저 IMonsterFactory라는 인터페이스를 만들어 다양한 팩토리가 구현되게 할 것 입니다. public interface IMonsterFactory { Monster CreateMonster(); } 그후 MonsterFactory라는 :MonoBehaviour를 상속받는 구체적인 팩토리 클래스를 만들어 실제 몬스터 생성 로직을 구현할 것입니다. 이후 인..
Muru
'Unity Engine/Unity 3D.' 카테고리의 글 목록