티스토리 뷰
: 상태와 전이를 통해 제어 상태(State)
- Ani State : 갑자기 특정 애니메이션 플레이 할때
- Exit : 위 애니메이션 나갈때
- Entry : 애니메이션의 시작부분
각각의 상태는 Animation Clip or Blend Tree로 정의됨 상태 옵션
Motion : 애니메이션 클립
Speed : 재생속도
Transition : 현재 상태와 연결된 전이 정보
--- Transform (화살표부분) : 현재상태를 다른상태로 변화하도록 조건 설정
Has Exit Time : 즉각변화 여부
Transition Duration(s) : 상태 변화딜레이
Conditions : 상태전이 설정 상태값설정
float Greater/Less
int Greater/Less
bool True / False
Trigger 한번 ★ 그래프 기준점 맞쳐 주면 자연스러운 움직임 디테일!!
--- + Has Exit Time UnCheck - 즉시 변환 ( 반복 애님에서 넘어갈때 사용 )
Has Exit Time Check - 종료시점 지정 ( 현재 상태를 탈출하여 다음 상태로 넘어가는 시점 )
- 전이 조건을 만족해도 종료시점이 와야 전이가 된다.
Transition Duration - 클립을 섞어 부드럽게 이어주는 역할 ( 체크 언체크 다사용 ) ( 3D )
// 플레이 중인 애니메이션 찾기
Animator.GetCurrentAnimatorStateInfo(0).IsName("Walk");
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
//목적지를 향해 이동하고싶은데
//길찾기 기능을 이용하고싶다.
//-속력 -길찾기기능 : 네브메쉬에이전트 - 목적지
//애니메이션을 변경하고 싶다.
//-애니메이터
//fsm을 이용해서 상태를 제어하고싶다.
//대기,이동,공격
public class Enemy : MonoBehaviour
{
public enum State
{
Idle,
Walk,
Attack
}
public State state;
public float speed = 3.5f;
NavMeshAgent agent;
Transform target;
public Animator anim;
// Start is called before the first frame update
void Start()
{
agent = gameObject.GetComponent<NavMeshAgent>();
agent.speed = speed;
state = State.Idle;
agent.isStopped = true; //신발벗음
}
// Update is called once per frame
void Update()
{
//살아가면서 상태에 맞는 행동을 하고싶다.
switch (state)
{
case State.Idle:
UpdateIdle();
break;
case State.Walk:
UpdateWalk();
break;
case State.Attack:
UpdateAttack();
break;
}
//if (state == State.Idle)
//{
// UpdateIdle();
//}
//else if (state == State.Walk)
//{
// UpdateWalk();
//}
//else if (state == State.Attack)
//{
// UpdateAttack();
//}
//agent에게 목적지를 target의 위치로 하라고 계속 알려주고싶다.
//agent.SetDestination(target.position);
}
private void UpdateAttack()
{
agent.destination = target.position;
}
private void UpdateWalk()
{
//플레이어를 계속 쫒아다니고싶다
agent.destination = target.position;
//만약내가 목적지에 도착했다면
//남은거리 float 내위치와 타겟위치의 차이 거리
float 남은거리 = Vector3.Distance(transform.position, target.position);
if(agent.stoppingDistance >= 남은거리)
{
//공격하고싶다
state = State.Attack;
agent.isStopped = false;// 신발신어
anim.SetTrigger("Attack");
}
}
private void UpdateIdle()
{
//타겟을 검색해서 있으면
target = GameObject.Find("Player").transform;
//목적지를 agent에게 알려주고
agent.destination = target.position;
//이동상태로 전이하고싶다.
state = State.Walk;
//이동한다
agent.isStopped = false;// 신발신어
anim.SetTrigger("Walk");
}
}
https://wergia.tistory.com/212
unity setinteger
int
float
trigger
로 조절하기
'Unity' 카테고리의 다른 글
Unity_ postprocessing &fog (0) | 2023.01.16 |
---|---|
VR_unity _ setting _ oculus quest2 (0) | 2023.01.16 |
Unity _ Shader : hololens 2 MRTK UI (1) | 2022.12.09 |
Unity_ TD_ osc 통신_VFXgraph:scrip (0) | 2022.11.14 |
unity_ 타임라인 영상 기록 추출 (0) | 2022.11.11 |
- Total
- Today
- Yesterday
- Python
- emotive eeg
- opencv
- docker
- CNC
- Java
- VR
- colab
- houdini
- three.js
- AI
- ardity
- sequelize
- Arduino
- 후디니
- 유니티
- RNN
- Unity
- motor controll
- DeepLeaning
- 라즈베리파이
- unity 360
- TouchDesigner
- MQTT
- node.js
- Express
- 유니티플러그인
- oculuspro
- JacobianMatrices
- StableDiffusion
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |