• JSBinding + SharpKit / 实战:转换 Survival Shooter


    从 asset store 下载 Survival Shooter

    (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2。如果)

    1 删除多余的代码及文件夹

    1. /Scripts/       <-- 因为没有用
    2. /Scenes/       <-- 因为是空的
    3. /Animation/   <-- 因为是空的
    4. /Prefabs/Hellephant.prefab       <-- 因为没有用
    5. /Prefabs/ZomBear.prefab         <-- 因为没有用

    删完后应该是这样的:

    2 【JSB | Generate CS and JS Bindings】

    这里给出的是 Survival Shooter 所有到的类型,可以将这个数组替换掉代码中的 JSBindingSettings.classes 数组

    应该是不改也可以,因为代码里 JSBindingSettings.classes 数组已经包含下面这些类了。

    public static Type[] classes = new Type[]
        {
            typeof(PerTest),
            typeof(PerTest.RefObject),
    
            typeof(Debug),
            typeof(Input),
            typeof(GameObject),
            typeof(Transform),
            typeof(Vector2),
            typeof(Vector3),
            typeof(MonoBehaviour),
            typeof(Behaviour),
            typeof(Component),
            typeof(UnityEngine.Object),
            typeof(YieldInstruction),
            typeof(WaitForSeconds),
            typeof(WWW),
            typeof(Application),
            typeof(UnityEngine.Time),
            typeof(Resources),
            typeof(TextAsset),
            
            typeof(IEnumerator),
            typeof(List<>),
            typeof(List<>.Enumerator),
            typeof(Dictionary<,>),
            typeof(Dictionary<,>.KeyCollection), 
            typeof(Dictionary<,>.ValueCollection), 
            typeof(Dictionary<,>.Enumerator), 
            typeof(KeyValuePair<,>), 
            
            typeof(System.Diagnostics.Stopwatch),
            typeof(UnityEngine.Random),
            typeof(StringBuilder),
    
            typeof(System.Xml.XmlNode),
            typeof(System.Xml.XmlDocument),
            typeof(System.Xml.XmlNodeList),
            typeof(System.Xml.XmlElement),
            typeof(System.Xml.XmlLinkedNode),
            typeof(System.Xml.XmlAttributeCollection),
            typeof(System.Xml.XmlNamedNodeMap),
            typeof(System.Xml.XmlAttribute),
    
            typeof(UnityEngine.Camera),
            typeof(UnityEngine.Light),
            typeof(UnityEngine.Color),
            typeof(UnityEngine.Ray),
            typeof(UnityEngine.LayerMask),
            typeof(UnityEngine.RaycastHit),
            typeof(UnityEngine.AudioClip),
            typeof(UnityEngine.AudioSource),
            typeof(UnityEngine.Rigidbody),
            typeof(UnityEngine.Animator),
            typeof(UnityEngine.Renderer),
            typeof(UnityEngine.LineRenderer),
            typeof(UnityEngine.ParticleSystem),
            typeof(UnityEngine.Physics),
            typeof(UnityEngine.Quaternion),
            typeof(UnityEngine.Collider),
            typeof(UnityEngine.CapsuleCollider),
            typeof(UnityEngine.NavMeshAgent),
            typeof(UnityEngine.MeshCollider),
            typeof(UnityEngine.BoxCollider),
            typeof(UnityEngine.SphereCollider),
            //
            // Unity 4_6
            // 
            typeof(UnityEngine.EventSystems.IEventSystemHandler),
            typeof(UnityEngine.EventSystems.IPointerEnterHandler),
            typeof(UnityEngine.EventSystems.IPointerExitHandler),
            typeof(UnityEngine.EventSystems.IPointerDownHandler),
            typeof(UnityEngine.EventSystems.IPointerUpHandler),
            typeof(UnityEngine.EventSystems.IPointerClickHandler),
            typeof(UnityEngine.EventSystems.IBeginDragHandler),
            typeof(UnityEngine.EventSystems.IInitializePotentialDragHandler),
            typeof(UnityEngine.EventSystems.IDragHandler),
            typeof(UnityEngine.EventSystems.IEndDragHandler),
            typeof(UnityEngine.EventSystems.IDropHandler),
            typeof(UnityEngine.EventSystems.IScrollHandler),
            typeof(UnityEngine.EventSystems.IUpdateSelectedHandler),
            typeof(UnityEngine.EventSystems.ISelectHandler),
            typeof(UnityEngine.EventSystems.IDeselectHandler),
            typeof(UnityEngine.EventSystems.IMoveHandler),
            typeof(UnityEngine.EventSystems.ISubmitHandler),
            typeof(UnityEngine.EventSystems.ICancelHandler),
            typeof(UnityEngine.UI.ICanvasElement),
            typeof(UnityEngine.UI.IMask),
            typeof(UnityEngine.UI.IMaskable),
            typeof(UnityEngine.UI.ILayoutElement),
            typeof(UnityEngine.UI.ILayoutController),
            typeof(UnityEngine.UI.ILayoutGroup),
            typeof(UnityEngine.UI.ILayoutSelfController),
            typeof(UnityEngine.UI.ILayoutIgnorer),
            typeof(UnityEngine.UI.IMaterialModifier),
            typeof(UnityEngine.UI.IVertexModifier),
            
            typeof(UnityEngine.EventSystems.UIBehaviour),
            typeof(UnityEngine.Events.UnityEventBase),
            typeof(UnityEngine.Events.UnityEvent<>),
            typeof(UnityEngine.Canvas),
            typeof(UnityEngine.Events.UnityEvent),
            typeof(UnityEngine.UI.AnimationTriggers),
            typeof(UnityEngine.UI.Button),
            typeof(UnityEngine.UI.Button.ButtonClickedEvent),
            typeof(UnityEngine.UI.CanvasUpdateRegistry),
            typeof(UnityEngine.UI.FontUpdateTracker),
            typeof(UnityEngine.UI.Graphic),
    //        typeof(UnityEngine.UI.GraphicRaycaster),
            typeof(UnityEngine.UI.GraphicRebuildTracker),
            typeof(UnityEngine.UI.GraphicRegistry),
            typeof(UnityEngine.UI.Image),
            typeof(UnityEngine.UI.InputField),
            typeof(UnityEngine.UI.InputField.SubmitEvent),
            typeof(UnityEngine.UI.InputField.OnChangeEvent),
            typeof(UnityEngine.UI.MaskableGraphic),
            typeof(UnityEngine.UI.RawImage),
            typeof(UnityEngine.UI.Scrollbar),
            typeof(UnityEngine.UI.Scrollbar.ScrollEvent),
            typeof(UnityEngine.UI.ScrollRect),
            typeof(UnityEngine.UI.ScrollRect.ScrollRectEvent),
            typeof(UnityEngine.UI.Selectable),
            typeof(UnityEngine.UI.Slider),
            typeof(UnityEngine.UI.Slider.SliderEvent),
            typeof(UnityEngine.UI.StencilMaterial),
            typeof(UnityEngine.UI.Text),
            typeof(UnityEngine.UI.Toggle),
            typeof(UnityEngine.UI.Toggle.ToggleEvent),
            typeof(UnityEngine.UI.ToggleGroup),
            typeof(UnityEngine.UI.AspectRatioFitter),
            typeof(UnityEngine.UI.CanvasScaler),
            typeof(UnityEngine.UI.ContentSizeFitter),
            typeof(UnityEngine.UI.GridLayoutGroup),
            typeof(UnityEngine.UI.HorizontalLayoutGroup),
            typeof(UnityEngine.UI.HorizontalOrVerticalLayoutGroup),
            typeof(UnityEngine.UI.LayoutElement),
            typeof(UnityEngine.UI.LayoutGroup),
            typeof(UnityEngine.UI.LayoutUtility),
            typeof(UnityEngine.UI.VerticalLayoutGroup),
            typeof(UnityEngine.UI.Mask),
            typeof(UnityEngine.UI.BaseVertexEffect),
            typeof(UnityEngine.UI.Outline),
            typeof(UnityEngine.UI.PositionAsUV1),
            typeof(UnityEngine.UI.Shadow),
        };

    3 执行菜单:Mobile Input | Disable

    4 添加 Coroutine-Update 的代码到文件中

    // 文件

    1. EnemyManager.cs

    // 要添加的代码

    void LateUpdate()
    {
        jsimp.Coroutine.UpdateCoroutineAndInvoke(this);
    }

    5 Joystick.cs 类定义改成:(之前逗号有问题导致不能正确添加 JsType 标签)

    public class Joystick : MonoBehaviour, IPointerUpHandler, IPointerDownHandler, IDragHandler

    6 BeautyShot.cs 去掉所有在 #if UNITY_EDITOR 里面的代码

    7 往 JSComponent.cs  添加代码 (因为 他使用了 SendMessage 往 EnemyHealth.cs 发送消息,我们这段代码临时加):

    // 添加这2个变量定义到类中
    int idStartSinking;
    int idRestartLevel;
    
    // 添加这2个成员初始化到函数 initMemberFunction 中
    idStartSinking = JSApi.getObjFunction(jsObjID, "StartSinking");
    idRestartLevel = JSApi.getObjFunction(jsObjID, "RestartLevel");
    
    // 添加这2个函数到类中
    void StartSinking()
    {
        callIfExist(idStartSinking);
    }
    void RestartLevel()
    {
        callIfExist(idRestartLevel);
    }

    8 执行菜单:【JSB | Add SharpKit JsType Attribute for all Structs and Classes

    这一步是往需要的类前面加上 [JsType] 标签。

    9 编译 SharpKit 工程

    如果还没有安装 SharpKit 及配置 SharpKit,请参考 http://www.cnblogs.com/answerwinner/p/4469073.html

    10 【JSB | Replace All Monos for all Prefabs and Scenes】

    _CompletedAssets/Prefabs/Hellephant.prefab
    _CompletedAssets/Prefabs/Player.prefab
    _CompletedAssets/Prefabs/ZomBear.prefab
    _CompletedAssets/Prefabs/ZomBunny.prefab
    Prefabs/Environment.prefab
    Prefabs/GunParticles.prefab
    Prefabs/Hellephant.prefab
    Prefabs/HitParticles.prefab
    Prefabs/Lights.prefab
    Prefabs/ZomBear.prefab
    _CompletedAssets/Scenes/Level 01.unity

    11 【JSB | Correct JavaScript Yield code

    12 【JSB | Generate MonoBehaviour to JSComponent_XX

    返回:Unity代码热更新方案 JSBinding + SharpKit 首页

  • 相关阅读:
    子查询
    视频工作工具链
    视频拆帧与组帧
    二叉树
    回溯法
    windows配置编译器
    C++工厂模式
    C++单例模式
    HTML学习记录
    C++代码规范
  • 原文地址:https://www.cnblogs.com/answerwinner/p/4687547.html
Copyright © 2020-2023  润新知