Jump to content
Unity Insider Forum

frkx316

Members
  • Content Count

    63
  • Joined

  • Last visited

Community Reputation

0 Neutral

About frkx316

  • Rank
    Advanced Member

Recent Profile Visitors

317 profile views
  1. ich habe über ein script ein gameobject als child an ein anderes gameobject geheftet das Problem ist das, wenn ich ein anderes Gamobject auswähle, das child nicht mehr angezeigt wird habe keine Ahnung woran es liegen könnte hiermit erzeuge ich das child child = new GameObject("closure"); child.transform.gameObject.SetActive(true); child.AddComponent<MeshRenderer>(); child.AddComponent<MeshFilter>(); child.AddComponent<Renderer>(); Renderer Rend2 = child.GetComponent<Renderer>(); Rend2.sharedMaterial = new Material(Shader.Find("Specular")); Rend2.sharedMaterial.color = Color.red; child.transform.position = branchs[branchs.Count - 1].transform.position; child.transform.parent = branchs[branchs.Count - 1].transform.GetChild(0); child.GetComponent<MeshFilter>().sharedMesh=secmes[branchs.Count - 1]; hiermit wird das parent erstellt branchs.Add(new GameObject()); branchs[branchs.Count-1].AddComponent<MeshRenderer>(); branchs[branchs.Count-1].AddComponent<MeshFilter>(); branchs[branchs.Count-1].AddComponent<Renderer>(); Renderer Rend = branchs[branchs.Count - 1].GetComponent<Renderer>(); Rend.sharedMaterial = new Material(Shader.Find("Specular")); Rend.sharedMaterial.color = Color.green; branchs[branchs.Count - 1].AddComponent<ObjectScript>(); kre.Add(krei); rin.Add(ring); mes.Add(new Mesh()); secmes.Add(new Mesh()); branchs[branchs.Count-1].GetComponent<MeshFilter>().sharedMesh=mes[branchs.Count - 1]; je nach dem was angeklickt wurde werden die anderen childs nicht angezeigt
  2. frkx316

    UV mapping

    genau daran hat es gelegen vielen dank
  3. frkx316

    UV mapping

    das habe ich ausprobiert aber nur eine seite des Mesh wird richtig angezeigt btw ich habe hier ein dreieckiges mesh welches pro ebene 4 Vertices hat bsp= new GameObject("bsp"); bsp.AddComponent<MeshRenderer>(); bsp.AddComponent<MeshFilter>(); bsp.AddComponent<Renderer>(); bsp.GetComponent<MeshFilter>().mesh=mes; bsp.GetComponent<Renderer>().material=mat; Vector2[] uvs = new Vector2[12]; uvs[0] = new Vector2(0, 0); uvs[1] = new Vector2(1/3,0 ); uvs[2] = new Vector2(2/3,0 ); uvs[3] = new Vector2(1,0 ); uvs[4] = new Vector2(0, 0.5f); uvs[5] = new Vector2(1/3,0.5f ); uvs[6] = new Vector2(2/3,0.5f ); uvs[7] = new Vector2(1,0.5f ); uvs[8] = new Vector2(0,1 ); uvs[9] = new Vector2(1/3, 1); uvs[10] = new Vector2(2/3,1 ); uvs[11] = new Vector2( 1, 1); mes.uv = uvs;
  4. frkx316

    UV mapping

    ich wollte fragen wie man eine zur laufzeit bzw im editor erstellt habe ein mesh erstellt (Zylinder editiert mit einer bezier curve) und wollt das Gebilde jetzt texturieren
  5. frkx316

    UV mapping

    Hallo kann mir jemand bitte erklären wie die Geschichte mit UV Mapping funktioniert oder einen link schicken wo es gut erklärt wird hab im Internet nichts gescheites gefunden und aus der API werde ich irgendwie nicht schlau Mfg
  6. frkx316

    planar system

    was ich vergessen habe ist das ich am ende ein mesh über eine beziercurve erstellen möchte dabei kann ich in jedem punkt eine tangente erstellen und senkrecht zu der tangente sollen die verticies plaziert werden
  7. frkx316

    planar system

    Hallo ich schreibe gerade an einem Planarsystem(mehrere vektoren) das über ein Kontrollobject die Ausrichtung einer ebene steuern soll der Vektor dient dabei mathematisch als normale als Ausgangsmaterial habe ich einen Vektor dessen winkel zum koordinatensystem als winkel in eine Drehmarix eingespeisst wird da ich den code später in ein größeres projekt einspreisen möchte bruach ich leider die positionsdaten als vektor3D leider funktioniert mein code nicht vollständig sodass manche Drehungen falsch ausgeführt werden ich lasse mir den winkel über die tangens funktion berechen. bei manchen winkeln funktioniert es gut für viele aber nicht gibtes vielleicht eine smartere lösung die 5 vektoren zu drehen vielen dank im vorraus mfg using System.Collections; using System.Collections.Generic; using UnityEngine; //[ExecuteInEditMode] public class Planarsystem : MonoBehaviour { GameObject g1; GameObject g5; public int Richtung = 1; Vector3 ve; Vector3 ve1; public float fi = 0; public float alpha=0; public float beta=0; public float gamma=0; float contrx; float contrz; float x; float y; float z; List<Vector3> gamve = new List<Vector3>(); List<GameObject> gam = new List<GameObject>(); int kreispunkte = 5; // Start is called before the first frame update void Start() { //g1 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //g2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //g2.transform.position = Vector3.left; //g3 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //g3.transform.position = Vector3.back; //g4 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //g4.transform.position = Vector3.right; g5 = GameObject.CreatePrimitive(PrimitiveType.Sphere); g5.transform.position = Vector3.up*3; for (int m = 0; m < kreispunkte ; m++) { x = Mathf.Cos(fi);// * radius; z = Mathf.Sin(fi);// * radius; gam.Add(GameObject.CreatePrimitive(PrimitiveType.Sphere)); gamve.Add(new Vector3(x, 0, z)); gam[m].transform.position = new Vector3(x, 0, z); fi = fi + (2 * Mathf.PI) / kreispunkte; } contrx = 0; contrz = 0; } // Update is called once per frame void Update() { gamma=(-180*Mathf.Atan2(g5.transform.position.x,g5.transform.position.y))/Mathf.PI; if(gamma<0){ gamma+=360; } alpha=(180*Mathf.Atan2(g5.transform.position.z,g5.transform.position.y))/Mathf.PI; if(alpha<0){ //alpha+=360; } if(((alpha>=-45&&alpha<=45)||alpha>=135||alpha<=-135)&&((gamma>=-45&&gamma<=135)||(gamma>=135)||(gamma<=-135))){ beta=0; Debug.Log(1); } else{ beta=(180*Mathf.Atan2(g5.transform.position.x,g5.transform.position.z))/Mathf.PI; if(beta<0){ beta+=380; } if((beta>45&&beta<135)||(beta>225&&beta<315)){ beta+=90; if(gamma<0){ beta+=180; } alpha=0; } else{ if(alpha<0){ beta+=180; } gamma=0; } } if(alpha>360){ alpha-=360; } if(gamma>360){ gamma-=360; } Quaternion rotation=Quaternion.Euler(alpha,beta,gamma); for (int m = 0; m < kreispunkte ; m++) { gam[m].transform.position = Matrix4x4.Rotate(rotation).MultiplyPoint3x4(gamve[m]);//DrehMatrix.RotateAroundAll(gamve[m],alpha,beta,gamma); } } }
  8. frkx316

    Combine Mesh

    Nein das nicht ich schreibe zur zeit an einen Editor Script das je nach Input Meshes produziert damit der Benutzer seine eigenen Baum und Pflanzen Assets erstellen kann. Und ich denke das es praktischer ist ein Asset zu platzieren, dass nur 1-3 Meshes benutzt(also stamm Blattwerk und blüten oder Früchte) Schon allein das Blattwerk würde ohne das Kombinieren aus sehr vielen Blättern(Meshes) bestehen. Aber wie gesagt hab ich es mittlerweile herausgefunden ^^ Mfg
  9. frkx316

    Combine Mesh

    vielen Dank für die ausführliche Antwort aber leider komm ich um das Kombinieren nicht rum hab mich jetzt durch die api gekämpft und es funktioniert jetzt trotzdem versteh ich das zuweisen der Materialen zu den jeweiligen Submeshes noch nicht ganz
  10. frkx316

    Combine Mesh

    Guten Tag kann mir jemand erklären wie man via script verschiedene Meshes zu einem zu Kombinieren? Aus der Dokumentation von Unity werde ich leider nicht besonders schlau. In wie fern ist es Performancerelavant nur ein Mesh zu nutzen? Verringert sich dabei die Verticie Anzahl? Wenn ich in der Scene Meshes positioniere, werden diese beim Kombinieren genauso Positioniert (also mit der Rotation)? Wie funktionieren Submeshes und wie kann ich manuell oder via script den verschiedenen Meshes verschiedene Materiale zuweisen? ich weiß das sind viele Fragen aber ich freu mich schon sehr auf eure Antworten bleibt gesund
  11. Hat sich erledigt, ich habe es gelöst public class MeshEditor : EditorWindow { int krei = 2; int ring = 3; List<GameObject> branchs = new List<GameObject>(); List<Mesh> mes = new List<Mesh>(); ObjectScript scrix = new ObjectScript(); [MenuItem("Window/MeshEditor")] public static void Showwindow() { GetWindow<MeshEditor>("MeshEditor"); } private void OnGUI() { krei = EditorGUILayout.IntField("Kreispunkte", krei); if (krei < 3) { krei = 3; } ring = EditorGUILayout.IntField("Ringanzahl", ring); if (ring < 2) { ring = 2; } if (GUILayout.Button("Add")) { branchs.Add(new GameObject()); branchs[branchs.Count-1].AddComponent<MeshRenderer>(); branchs[branchs.Count-1].AddComponent<MeshFilter>(); branchs[branchs.Count-1].AddComponent<Renderer>(); Renderer Rend = branchs[branchs.Count - 1].GetComponent<Renderer>(); Rend.material = new Material(Shader.Find("Specular")); Rend.material.color = Color.green; mes.Add(new Mesh()); mes[branchs.Count - 1] = branchs[branchs.Count-1].GetComponent<MeshFilter>().mesh; mes[branchs.Count - 1].Clear(); mes[branchs.Count - 1].vertices = MeshGen.Creatvertices(ring,krei); mes[branchs.Count - 1].triangles = MeshGen.Createtriangles(ring, krei); mes[branchs.Count - 1].RecalculateNormals(); } } }
  12. Edit: gibt es vielleicht eine Alternative zu Instantiate() ?
  13. Guten Tag, Ich schreibe zur Zeit ein Editorscript. Dieses soll über einen Button ein Gameobject in eine Liste einfügen, ein von mir erstelltes Mesh anlegen und auf dem Bildschrim angezeigt werden. public class MeshEditor : EditorWindow { GameObject myPrefab; public Mesh mes1; int krei = 2; int ring = 3; List<GameObject> branchs = new List<GameObject>(); List<Mesh> mes = new List<Mesh>(); ObjectScript scrix = new ObjectScript(); [MenuItem("Window/MeshEditor")] public static void Showwindow() { GetWindow<MeshEditor>("MeshEditor"); } private void Awake() { myPrefab = new GameObject("myPrefab"); myPrefab.AddComponent<MeshRenderer>(); myPrefab.AddComponent<MeshFilter>(); myPrefab.AddComponent<Renderer>(); Renderer Rend = myPrefab.GetComponent<Renderer>(); Rend.material = new Material(Shader.Find("Specular")); Rend.material.color = Color.green; } private void OnGUI() { krei = EditorGUILayout.IntField("Kreispunkte", krei); if (krei < 3) { krei = 3; } ring = EditorGUILayout.IntField("Ringanzahl", ring); if (ring < 2) { ring = 2; } if (GUILayout.Button("Add")) { branchs.Add(myPrefab); mes.Add(mes1); mes[branchs.Count - 1] = branchs[branchs.Count-1].GetComponent<MeshFilter>().mesh; mes[branchs.Count - 1].Clear(); mes[branchs.Count - 1].vertices = MeshGen.Creatvertices(ring,krei); mes[branchs.Count - 1].triangles = MeshGen.Createtriangles(ring, krei); mes[branchs.Count - 1].RecalculateNormals(); Instantiate(branchs[branchs.Count - 1]); } } Folgendes funktioniert: pro "Add" bekomme ich ein gameobject mit einem richtig produzierten Mesh Folgendes funktioniert nicht: bei jedem neu produzierten Object verändern sich alle Meshes der älteren Objecte so dass alle gleich aussehen Mein ziel ist es Verschiedene Meshes zu produzieren und sie am Ende via Mesh.CombineMeshes zu einem zu vereinen Vielen Dank im Vorraus 🙂
  14. frkx316

    function call

    Sowas sollte man lieber lassen, wenn man selbst keine Ahnung hat.😂
  15. frkx316

    function call

    Um eigene klassen global zu nutzen sind die befehle namespace irgendwas { ... } und using irgendwas; zu benutzen. Dabei handelt es sich um reine C# deklarierung. Mit dem folgendem Code erstellt man seine eigene Klassen so das man sie in jedem Script aufrufen kann using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Myclass { public class ScriptA : MonoBehaviour { // Property public int Numb { get; set; } // method internal int Multiply(int zahl) { return Numb * zahl; } //method internal void Method() { Debug.Log("es funktioniert"); } //Konstruktor public ScriptA() { Numb = 2; } } } wenn man dieses Script erstellt hat kann folgendes ausgeführt werden: using System.Collections; using System.Collections.Generic; using UnityEngine; using Myclass; public class ScriptB : MonoBehaviour { void Start() { ScriptA scr = new ScriptA(); Debug.Log(scr.Numb);// 2 scr.Numb = 5; Debug.Log(scr.Numb);//5 scr.Multiply(6); Debug.Log(scr.Multipl(6));//30 scr.Method();//"Es funktioniert" } }
×
×
  • Create New...