少年修仙传客户端代码仓库
hch
2025-04-03 c154ac0832fe4379a00d3e1cda700e7d2a7383c7
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using vnxbqy.UI;
 
public class CreateRoleBehaviour
{
    public State state { get; private set; }
 
    CreateRoleTimeLine showTimeLine = new CreateRoleTimeLine();
    List<SFXController> sfxControllers = new List<SFXController>();
 
    GameObject behaviour;
    CreateRoleHeroPlatform platform;
 
    public void Show(CreateRoleScriptableObject.RoleShowParams showParams)
    {
        if (behaviour == null)
        {
            var prefab = SceneLoader.LoadCreateRole(showParams.platformPrefabName);
            behaviour = GameObject.Instantiate(prefab, showParams.platformPosition, Quaternion.identity);
            behaviour.name = showParams.platformPrefabName;
            platform = behaviour.GetComponentInChildren<CreateRoleHeroPlatform>();
            platform.transform.localScale = showParams.platformScale;
            var camera = behaviour.GetComponent<Camera>("CreateRoleCamera");
            if (camera != null)
            {
                camera.SetActive(false);
            }
        }
 
        platform.transform.localEulerAngles = new Vector3(0, 180, 0);
        platform.ForbidSeconds(showParams.animationDuration);
        CreateRoleManager.Instance.LoadModel(showParams.job, PlayerModelMarkConfig.Get(CreateRoleConfig.Get(showParams.job).modelMark).npcid, (bool ok, UnityEngine.Object @object) =>
        {
            if (ok)
            {
                var model = @object as GameObject;
                model.transform.SetParentEx(platform.transform, Vector3.zero, Quaternion.identity, Vector3.one * showParams.scale);
 
                model.SetActive(true);
 
                ReleaseEffects();
                state = State.RoutimeShow;
 
                showTimeLine.ClearNode();
                showTimeLine.AddNone(0f, () =>
                {
                    var animator = model.GetComponent<Animator>();
                    animator.runtimeAnimatorController = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, NPCConfig.Get(PlayerModelMarkConfig.Get(CreateRoleConfig.Get(showParams.job).modelMark).npcid).MODE);
                });
 
 
                showTimeLine.AddNone(0f, () =>
                {
                    WindowCenter.Instance.Open<CreateRoleWin>();
                });
 
                showTimeLine.OnComplete(() => { state = State.Idle; });
                showTimeLine.Begin();
            }
        });
    }
 
    public void SetActive(bool active)
    {
        if (behaviour != null)
        {
            behaviour.transform.SetActive(active);
        }
    }
 
    public void Dispose()
    {
        showTimeLine.Dispose();
        ReleaseEffects();
 
        showTimeLine = null;
        behaviour = null;
        platform = null;
    }
 
    public void ReleaseEffects()
    {
        for (var i = sfxControllers.Count - 1; i >= 0; i--)
        {
            SFXPlayUtility.Instance.Release(sfxControllers[i]);
        }
 
        sfxControllers.Clear();
    }
 
    public enum State
    {
        Idle,
        EnterShow,
        RoutimeShow,
    }
 
}