유 니 티 게임 디자인 모델 의 상태 모델 실현
5970 단어 유 니 티 학습
예전 에 1 인칭 사격 게임 을 한 적 이 있 습 니 다. 그 때 는 괴물 의 유연 한 운동 을 어떻게 통제 하 는 지 몰 랐 고 상태 간 의 전환 도 몰 랐 습 니 다. 그리고 코드 를 강제로 쌓 았 습 니 다. 생각 만 해도 무 서 웠 습 니 다.
그 후에 포럼 을 오래 돌아 다 니 면서 디자인 모델 에 대해 알 게 되 었 습 니 다. 23 에서 디자인 모델 은 각각 우열 이 있 습 니 다. 결국은 하나의 사상 일 뿐 이 고 프로젝트 에 진정 으로 활용 하려 면 자신 이 머리 를 써 서 묘사 해 야 합 니 다.
유한 상태 기의 실현 에는 두 가지 선택 방식 이 있다.
1. 매 거 진 enum 과 switch 문 구 를 결합 하여 상태 간 의 선택 과 전환 2. 다 형 과 가상 함수, 즉 대상 을 추상 적 인 유형 에 밀봉 한 다음 에 다시 쓰 는 방법 으로 모든 상 태 를 실현 하고 필요 할 때 직접 호출 하 는 것 을 실현 한다.
다음은 구체 적 인 조작 입 니 다.
우선 기능 추상 류 가 있어 요.
//-------------------------------------------------------------------------------------
// ,
//-------------------------------------------------------------------------------------
using UnityEngine;
using System.Collections;
public abstract class BaseState
{
public abstract void AIState(ZombieTest state);
}
대외 적 인 인터페이스 가 필요 합 니 다.
///
///
///
public class ZombieTest : MonoBehaviour
{
public BaseState currentState;
///
///
///
///
public void SetState(BaseState state)
{
currentState = state;
}
///
///
///
public void Update()
{
currentState.AIState(this);
}
///
///
///
///
public float distance()
{
Vector3 playerVector3 = Player.transform.position;
Vector3 zombieVector3 = zombieTransform.position;
float distanceVector3 = Vector3.Distance(playerVector3, zombieVector3);
return distanceVector3;
}
}
여기 서 제 가 거 리 를 두 었 어 요. 사실 다른 상황 을 모 의 하려 고 해도 돼 요.
다음은 컨디션 의 실현.
///
///
///
public class NormalState : BaseState
{
public ZombieTest zombieTest;
public override void AIState(ZombieTest state)
{
Debug.Log(" , !");
}
}
///
///
///
public class ChasingState : BaseState
{
private ZombieTest zombieTest;
public override void AIState(ZombieTest state)
{
state.SetState(new AttackState());
Debug.Log(" ");
}
}
구체 적 으로 어떤 조작 을 하고 싶 은 지 Zombie Test 인터페이스 에서 기능 을 실현 한 다음 에 구체 적 인 상태 클래스 에서 검증 할 수 있 습 니 다.
저 는 상태 모드 로 몬스터 의 상태 기 를 실현 하 는 것 을 좋아 합 니 다. 많은 switch 가 저 를 골 치 아 프 게 하기 때 문 입 니 다 ~ ~