https://assetstore.unity.com/packages/2d/characters/monsters-creatures-fantasy-167949
Monsters_Creatures_Fantasy | 2D 캐릭터 | Unity Asset Store
Elevate your workflow with the Monsters_Creatures_Fantasy asset from Luiz Melo. Find this & more 캐릭터 on the Unity Asset Store.
assetstore.unity.com
몬스터로 사용할만한 2d 이미지를 가져왔다.
그리고 플레이어 캐릭터를 만들다 시피 필요한 소스만 빼왔다,
가져온 이미지의 가운데 피봇을 좀 수정하였다.
정 중앙보다 살짝 아래쪽으로 모든 이미지를 수정하였다.
또한 픽셀 수치도 수정 하였다.
더보기
몬스터 스크립 추가
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Monster : MonoBehaviour
{
public Transform targetTr; //타겟 : 플레이어
Animator animator;
SpriteRenderer spriteRenderer;
Rigidbody2D rigidbody; //HIT 시 넉백을 구현하고자 넣어보았다.
enum Monster_State //몬스터 상태
{
Idle,
Move,
Attack
}
[SerializeField] Monster_State monster_State = Monster_State.Idle;
[SerializeField] float attakcDis = 2.0f; //공격 사거리
float speed = 1.0f; //이동 속도
Vector3 targetToThis = Vector3.zero; //타겟과의 거리를 구하기 위해
private void Awake()
{
//초기화
animator = GetComponent<Animator>();
spriteRenderer = GetComponent<SpriteRenderer>();
rigidbody = GetComponent<Rigidbody2D>();
}
private void FixedUpdate()
{
if(monster_State.Equals(Monster_State.Move)) //이동 관련
{
if (!animator.GetCurrentAnimatorStateInfo(0).IsName("Run")) return; //이동 애니메이션일때만 이동가능하게 하기 위해
rigidbody.velocity = Vector2.zero; //속도값은 필요가없기때문에
Vector3 dir = targetToThis.normalized; //방향값
transform.position += dir * Time.fixedDeltaTime * speed; //이동
}
}
private void Update()
{
targetToThis = targetTr.position - transform.position; //타겟과의 거리관계
float dis = targetToThis.sqrMagnitude; //거리 길이 변환
//길이에 따른 상태 변환
if (dis > attakcDis)
MonsterState_Update(Monster_State.Move);
else if (dis <= attakcDis)
MonsterState_Update(Monster_State.Attack);
Flip_Update();//이미지 좌우변환
}
void MonsterState_Update(Monster_State newStatue) //몬스터의 상태 변화에 따른 애니메이터 변환해주기
{
if (monster_State.Equals(newStatue)) return; //이전과 같은 상태면 리턴
//새로운 상태 적용
monster_State = newStatue;
switch (monster_State)
{
case Monster_State.Idle:
animator.SetBool("Move", false);
break;
case Monster_State.Move:
animator.SetBool("Move", true);
break;
case Monster_State.Attack:
{
animator.SetBool("Move", false);
animator.SetTrigger("Attack");
}
break;
default:
break;
}
}
void Flip_Update() //이미지 좌우 변환
{
if (targetToThis.x < 0)
spriteRenderer.flipX = true;
else if (targetToThis.x > 0)
spriteRenderer.flipX = false;
}
void TakeDamage(int value = 10) //데미지를 받는 함수
{
//애니메이션 실행 .,.. 이미 애니메이션 실행중이면
if (!animator.GetCurrentAnimatorStateInfo(0).IsName("Hit"))
animator.SetTrigger("Hit");
//넉백 타겟과의 반대 방향으로
rigidbody.AddForce(targetToThis.normalized * -1 * 10.0f);
}
}
애니메이터도 추가로 생성
'유니티 2D 게임 만들어보기' 카테고리의 다른 글
몬스터 공격 추가하기, 캐릭터 체력바 추가 + 이동방식 변경 (0) | 2022.07.14 |
---|---|
오브젝트 풀링 용 스크립 만들어보기 (0) | 2022.07.13 |
타일 맵 추가, 몬스터 데미지 텍스트 이펙트 추가 (0) | 2022.07.12 |
캐릭터 조이스틱 이동 구현 (0) | 2022.07.08 |
2D 게임 만들기위해 리소스 구해보기 (0) | 2022.07.07 |