Приведение типов js

317
22 августа 2017, 15:01

Скачал Simple Mesh Combine v1.2, в юнити 5 всё работало без ошибок, обновил до 2017, посыпались ошибки, следующего вида:

SimpleMeshCombineEditor.js(25,21): BCE0019: 'combined' is not a member of 'UnityEngine.Object'. 
SimpleMeshCombineEditor.js(26,24): BCE0019: '_generateLightmapUV' is not a member of 'UnityEngine.Object'.

... SimpleMeshCombineEditor.js(80,28): BCE0048: Type 'Object' does not support slicing. SimpleMeshCombineEditor.js(85,53): BCE0019: 'length' is not a member of 'Object'.

Как правильно привести тип в js ? Пробовал:

1) SimpleMeshCombine combined = (SimpleMeshCombine) GetComponent(typeof(SimpleMeshCombine)); 
2) SimpleMeshCombine combined = GetComponent("SimpleMeshCombine") as SimpleMeshCombine;

выдает ошибки SimpleMeshCombineEditor.js(16,37): UCE0001: ';' expected. Insert a semicolon at the end.

Скрипт 1

    /****************************************
        Simple Mesh Combine Editor v1.2                         
        Copyright 2013 Unluck Software  
        http://www.chemicalbliss.com
        Change Log
                v1.1
                Added naming and prefab save option     
                v1.2
                Added lightmap support                                                                                                                                                                                                                                                                          
*****************************************/
import System.IO;
import UnityEditor;
import UnityEngine;
@CustomEditor(SimpleMeshCombine)
public class SimpleMeshCombineEditor extends Editor {
   override function OnInspectorGUI () {
        //DrawDefaultInspector ();
                GUILayout.Space(10);
                GUILayout.Label("*All meshes must have same material*");        
                GUILayout.Space(10);
        if (!target.combined) {
                target._generateLightmapUV = EditorGUILayout.Toggle("Generate Ligthmap UV's", target._generateLightmapUV);
                GUILayout.Label("Combine all Mesh Renderer enabled meshes");
                        if(GUILayout.Button("Combine")) {
                                if(target.transform.childCount > 1) combineMeshes();
                        }   
       }else{
                        GUILayout.Label("Decombine all previously combined meshes");
                        if(GUILayout.Button("Release")) {
                                EnableRenderers(true);
                                target._savedPrefab = false;
                                        if(target.combined)
                                                DestroyImmediate(target.combined);
                        }
        }
        if(target.combined && !target._savedPrefab)
                target._advanced = EditorGUILayout.Toggle("Advanced Features", target._advanced);
        if(target.combined && target._advanced && !target._savedPrefab){
                if(GUILayout.Button("Save Prefab")) {
                        var n:String = target.meshName;
                        if(System.IO.Directory.Exists("Assets/Simple Mesh Combine/Saved Meshes/")){
                        if(!System.IO.File.Exists("Assets/Simple Mesh Combine/Saved Meshes/"+target.meshName+".asset")){        
                                AssetDatabase.CreateAsset(target.combined.GetComponent(MeshFilter).sharedMesh, "Assets/Simple Mesh Combine/Saved Meshes/"+n+".asset");
                                target._advanced = false;
                                target._savedPrefab = true;
                                Debug.Log("Saved Assets/Simple Mesh Combine/Saved Meshes/"+n+".asset");
                        }else{
                                Debug.Log(target.meshName+".asset" + " already exists, please change the name");
                        }
                        }else{
                                Debug.Log("Missing Folder: Assets/Simple Mesh Combine/Saved Meshes/");
                        }
                }
                target.meshName = GUILayout.TextField(target.meshName);
        }
        if (GUI.changed){
                EditorUtility.SetDirty(target);
        }
   }
        function EnableRenderers(e:boolean) {   
        for (var i:int = 0; i < target.combinedGameOjects.length; i++){
                target.combinedGameOjects[i].renderer.enabled = e;
                }  
        }
        function FindEnabledMeshes() 
        {//Returns a meshFilter[] list of all renderer enabled meshfilters(so that it does not merge disabled meshes, useful when there are invisible box colliders)
                var renderers;
                var count:int;
                renderers = target.transform.GetComponentsInChildren(MeshFilter);
                for (var i:int = 0; i < renderers.length; i++)
                {//count all the enabled meshrenderers in children
                        if(renderers[i].GetComponent(MeshRenderer) && renderers[i].GetComponent(MeshRenderer).enabled)
                                count++;
                }
                var meshfilters = new MeshFilter[count];//creates a new array with the correct length
                count = 0;
                for (var ii:int = 0; ii < renderers.length; ii++)
                {//adds all enabled meshes to the array
                        if(renderers[ii].GetComponent(MeshRenderer) && renderers[ii].GetComponent(MeshRenderer).enabled){
                                meshfilters[count] = renderers[ii];
                                count++;
                        }
                }
                return meshfilters;
        }
        function combineMeshes () 
        {//Combines meshes
                var combinedFrags:GameObject = new GameObject();
                combinedFrags.AddComponent(MeshFilter);
                combinedFrags.AddComponent(MeshRenderer);               
                var meshFilters;
                meshFilters = FindEnabledMeshes();
            var combine: CombineInstance[] = new CombineInstance[meshFilters.length];
            Debug.Log("Simple Mesh Combine: Combined " + meshFilters.length + " Meshes");
            target.combinedGameOjects = new GameObject[meshFilters.length];      
            for (var i:int = 0; i < meshFilters.length; i++)
            {
                combinedFrags.GetComponent(MeshRenderer).sharedMaterial = meshFilters[i].transform.gameObject.GetComponent(MeshRenderer).sharedMaterial;
                target.combinedGameOjects[i] = meshFilters[i].gameObject;
                combine[i].mesh = meshFilters[i].transform.GetComponent(MeshFilter).sharedMesh;
                combine[i].transform = meshFilters[i].transform.localToWorldMatrix;             
            }
            combinedFrags.GetComponent(MeshFilter).mesh = new Mesh();
            combinedFrags.GetComponent(MeshFilter).sharedMesh.CombineMeshes(combine);
            if(target._generateLightmapUV){
                        Unwrapping.GenerateSecondaryUVSet(combinedFrags.GetComponent(MeshFilter).sharedMesh);
                        combinedFrags.isStatic = true;
                }
            combinedFrags.name = "_Combined Mesh [" + target.name + "]";
            target.combined = combinedFrags.gameObject;
            EnableRenderers(false);
            combinedFrags.transform.parent = target.transform;
    }   
}

Скрипт 2 `@script AddComponentMenu("Simple Mesh Combine")

pragma strict
    var combinedGameOjects:GameObject[];    //Stores gameObjects that has been merged, mesh renderer disabled
    var combined:GameObject;                                //Stores the combined mesh gameObject
    var meshName:String = "Combined_Meshes";//Asset name when saving as prefab
    var _advanced:boolean;                                  //Toggles advanced features
    var _savedPrefab:boolean;                               //Used when checking if this mesh has been saved to prefab (saving the same mesh twice generates error)
    var _generateLightmapUV:boolean;                //Toggles secondary UV map generation
Answer 1
SimpleMeshCombine combined = (SimpleMeshCombine)target;

Еще бы на твоем месте убрал pragma strict

READ ALSO
Cordova + Yandex banner

Cordova + Yandex banner

Кто занимался написанием плагина под Cordova, и знает как правильно реализовать данный код что бы выводило баннер на экранПерепробовал тучу...

228
Синхронность for в js

Синхронность for в js

Всем приветЕсть задача - реализовать синхронный вызов файла через childProcess

182
Замена определенного тэга при помощи javascript

Замена определенного тэга при помощи javascript

Здравствуйте, на обработку поступает текст примера:

173