Hit material name if materials more then 1(js)

Программирование на Юнити.

Hit material name if materials more then 1(js)

Сообщение valera3132 27 май 2012, 05:20

Способ получить название текстуры если у модели больше чем один материмал.

Синтаксис:
Используется javascript
//Thanks to Bunny83 from Germany for help

var transf : Transform;

class hitmat1 {
        var enabled : boolean = true;
        var texturehit : String;
        @HideInInspector
        var tranglind : int;
        @HideInInspector
        var Layer : LayerMask = 1;
}

var hitmat1 : hitmat1 = hitmat1();

function Update() {
        var hit : RaycastHit;
        if (Physics.Raycast(transf.position, transf.TransformDirection(Vector3.forward), hit, 2, hitmat1.Layer)) {
                ind = hit.triangleIndex;
                if (hitmat1.tranglind != ind && hitmat1.enabled) {
                        hitmat1.tranglind = ind;
                        var go1 = hit.collider.gameObject;
                        var mee = go1.GetComponent(MeshFilter).mesh;
                        var mre = go1.GetComponent(MeshRenderer);
                        if (mee && mre) {
                                if (go1.renderer.materials.Length > 1) {
                                        var triangles = mee.triangles;
                                        for (var submesh = 0; submesh < mee.subMeshCount; submesh++) {
                                                var indices = mee.GetTriangles(submesh);
                                                for (var i = 0; i < indices.Length; i += 3) {
                                                        if (indices[i] == triangles[ind * 3] && indices[i + 1] == triangles[ind * 3 + 1] && indices[i + 2] == triangles[ind * 3 + 2]) {
                                                                hitmat1.texturehit = mre.materials[submesh].mainTexture.name.ToLower();
                                                                i = indices.Length;
                                                                submesh = mee.subMeshCount;
                                                                }else{
                                                                        hitmat1.texturehit = "Null";
                                                        }
                                                }
                                        }
                                        }else{
                                                mtexx = go1.renderer.material.mainTexture;
                                                if (mtexx)
                                                        hitmat1.texturehit = mtexx.name.ToLower();
                                                        else
                                                        hitmat1.texturehit = "Null";
                                }
                        }
                }
        }
}
 
Аватара пользователя
valera3132
UNец
 
Сообщения: 23
Зарегистрирован: 17 апр 2012, 06:09

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11