summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Test 1/TestErika.cs
blob: 949cf76fa693d917173455bb315ea07cc1f1cd6d (plain)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[Serializable]
public class UnitSetUp
{
    public UnitActionData actionData; // 动作配置

    public GameObject unitControllerPrefab;

    public GameObject unitPrefab;

    public RuntimeAnimatorController animController;

    public string unitFolder;

    [HideInInspector]
    public GameObject unit;

    [HideInInspector]
    public GameObject unitController;
}

public class TestErika : MonoBehaviour
{
    public UnitSetUp erika;
    public UnitSetUp monster;

    private void Awake()
	{
        SetupErika();
        SetupMonster();
    }

    private void Update()
    {
        if (Input.GetKeyDown("r"))
        {
            erika.unitController.transform.position = Vector3.zero;
            erika.unitController.transform.rotation = Quaternion.identity;

            monster.unitController.transform.position = new Vector3(2, 0, 0);
            monster.unitController.transform.rotation = Quaternion.Euler(0, 180, 0);
        }
    }

    void SetupErika()
    {
        erika.unitController = GameObject.Instantiate(erika.unitControllerPrefab);
        erika.unitController.transform.position = Vector3.zero;
        erika.unitController.transform.rotation = Quaternion.identity;

        erika.unit = GameObject.Instantiate(erika.unitPrefab);
		erika.unit.transform.position = Vector3.zero;
		erika.unit.transform.rotation = Quaternion.Euler(0, 90, 0);
        erika.unit.transform.SetParent(erika.unitController.transform);

        UnitController unitCtr = erika.unitController.GetOrAddComponent<UnitController>();
        unitCtr.Initialize(erika.unit, erika.unitFolder);

        UnitRootMotion unitRootMotion = unitCtr.unitRootMotion;

        RootMotionProxy rootMotionProxy = erika.unit.GetOrAddComponent<RootMotionProxy>();

        Animator animator = erika.unit.GetComponent<Animator>();
		//AnimatorOverrideController animCtr = new AnimatorOverrideController(erika.animController);
		//animCtr.name = erika.unitPrefab.name + " Override Controller";
		//foreach(var anim in erika.actionData.actions)
		//{
		//	animCtr[anim.Key] = anim.Value;
		//}
        animator.runtimeAnimatorController = erika.animController;

		Debug.Assert(animator.runtimeAnimatorController is AnimatorOverrideController);

        unitCtr.pcState.ChangeState(PCState.EUnitState.Idle, new PCState.IdleParam(), true);
    }

    void SetupMonster()
    {
        monster.unitController = GameObject.Instantiate(monster.unitControllerPrefab);
        monster.unitController.transform.position = Vector3.zero;
        monster.unitController.transform.rotation = Quaternion.identity;

        monster.unit = GameObject.Instantiate(monster.unitPrefab);
        monster.unit.transform.rotation = Quaternion.Euler(0, 90, 0);
        monster.unit.transform.SetParent(monster.unitController.transform);

        UnitController unitCtr = monster.unitController.GetOrAddComponent<UnitController>();
        unitCtr.Initialize(monster.unit, monster.unitFolder);

        UnitRootMotion unitRootMotion = unitCtr.unitRootMotion;

        RootMotionProxy rootMotionProxy = monster.unit.GetOrAddComponent<RootMotionProxy>();

        Animator animator = monster.unit.GetComponent<Animator>();
        AnimatorOverrideController animCtr = new AnimatorOverrideController(monster.animController);
        animCtr.name = monster.unitPrefab.name + " Override Controller";
        animator.runtimeAnimatorController = animCtr;

        unitCtr.monsterState.ChangeState(MonsterState.EUnitState.Idle, new MonsterState.IdleParam(), true);

        monster.unitController.transform.position = new Vector3(2, 0, 0);
        monster.unitController.transform.rotation *= Quaternion.Euler(0, 180, 0);
    }

}