유 니 티 게임 디자인 모델 의 상태 모델 실현

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 가 저 를 골 치 아 프 게 하기 때 문 입 니 다 ~ ~

좋은 웹페이지 즐겨찾기