Beispiel #1
0
    protected override GameObject Create()
    {
        IPlacementArea targetArea  = (IPlacementArea)args[0];
        IntVector2     destination = (IntVector2)args[1];


        long       id    = currentTargetLevelData.monster.Id;
        GameObject agent = Instantiate(Resources.Load <GameObject>("Prefab/Monster/" + id), transform);

        Animator          animator          = agent.GetComponent <Animator>();
        CharacterAnimator characterAnimator = GetComponentInParent <CharacterAnimator>();
        AIBehaviors       ai = GetComponent <AIBehaviors>();
        AIAnimationStates animationStates = GetComponentInParent <AIAnimationStates>();

        characterAnimator.anim = animator;


        PatrolState patrolState = ai.GetState <PatrolState>();

        Transform[] transforms = new Transform[2];
        transforms[0] = targetArea.transform;
        transforms[1] = targetArea.transform;
        patrolState.SetPatrolPoints(transforms);
        patrolState.GetTrigger <WithinDistanceTrigger>().center = transform;
        //IdleState ldleState = ai.GetState<IdleState>();
        //ldleState.currentNode = targetArea.transform;
        //ldleState.GetTrigger<WithinDistanceTrigger>().center = targetArea.transform;

        AttackState attackState = ai.GetState <AttackState>();

        attackState.GetTrigger <BeyondDistanceTrigger>().center = targetArea.transform;

        //AI
        //BaseState baseState = ComponentHelper.AddComponentByName(ai.transform.Find("States").gameObject, "GotHitState") as BaseState;
        //baseState.name = "GotHitState";
        //GotHitState gotHitState = baseState as GotHitState;
        //gotHitState.hitStateDuration = 0;
        //gotHitState.returnToPreviousState = true;
        //gotHitState.animationStates[0] = animationStates.GetStateWithName("Hit");
        //ai.AddSubTrigger(gotHitState);

        //初始化
        UnityEngine.Object alignment = Resources.Load("Data/Alignment/TowerAlignment");

        if (this.configuration.alignment == null)
        {
            this.configuration.alignment = new SerializableIAlignmentProvider();
            this.configuration.alignment.unityObjectReference = alignment;
        }
        else
        {
            this.configuration.alignment.unityObjectReference = alignment;
        }

        ai.Initialize();
        //放置
        UpdateTargetPos(targetArea, destination);
        return(agent);
    }
Beispiel #2
0
        void OnEnable()
        {
            styles = new AIBehaviorsStyles();

            m_Object               = new SerializedObject(target);
            animationStatesProp    = m_Object.FindProperty("states");
            m_AnimationStatesCount = m_Object.FindProperty(kArraySize);

            animStates = m_Object.targetObject as AIAnimationStates;
            transform  = animStates.transform;

            InitStatesGameObject();
        }
Beispiel #3
0
        public static string[] GetAnimationStateNames(SerializedObject m_StateObject)
        {
            SerializedProperty m_animationStates   = m_StateObject.FindProperty("animationStatesComponent");
            AIAnimationStates  animStatesComponent = m_animationStates.objectReferenceValue as AIAnimationStates;
            bool animStatesNull = animStatesComponent == null;
            int  animNamesSize  = animStatesNull ? 0 : animStatesComponent.states.Length;

            string[] animationStateNames = new string[animNamesSize];

            for (int i = 0; i < animationStateNames.Length; i++)
            {
                if (animStatesComponent.states[i] != null)
                {
                    animationStateNames[i] = animStatesComponent.states[i].name;
                }
                else
                {
                    animationStateNames[i] = "";
                }
            }

            return(animationStateNames);
        }