Ich bin mit Unity mit Reflexion, und ich versuche, eine bestimmte Methodennamen beginnen zu nennen, aber mein Code ist es nichtC# Reflection Nicht Methoden aufrufen
Hier Aufruf ist ModLoader.cs:
using UnityEngine;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Collections.Generic;
public class ModLoader : MonoBehaviour {
List<MethodInfo> modMethods = new List<MethodInfo>();
// Use this for initialization
void Start() {
if (!Directory.Exists (Application.dataPath + "/../Mods")) {
Directory.CreateDirectory (Application.dataPath + "/../Mods");
}
foreach (var mod in Directory.GetFiles(Application.dataPath + "/../Mods", "*.dll")) {
var assembly = Assembly.LoadFile(mod);
foreach (var type in assembly.GetTypes()) {
foreach (var method in type.GetMethods()) {
modMethods.Add (method);
}
}
}
//Execute Start method in all mods
foreach (MethodInfo method in modMethods) {
print (method.Name);
if (method.Name == "Start" && method.GetParameters().Length == 0 && method.IsStatic) {
method.Invoke (null, new object[]{ });
}
}
}
// Update is called once per frame
void Update() {
//Execute Update method in all mods
foreach (MethodInfo method in modMethods) {
if (method.Name == "Update" && method.GetParameters().Length == 0 && method.IsStatic) {
method.Invoke (null, new object[]{ });
}
}
}
}
Hier ist mein mod (a dLL):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
public class Class1 {
static void Start() {
Debug.Log("hello world");
foreach (GameObject go in GameObject.FindObjectsOfType<GameObject>()) {
if (go.GetComponent<MeshRenderer>()) {
go.GetComponent<MeshRenderer>().material.color = new Color(1f, 0f, 0f);
}
}
}
}
ich die dLL aus dem Build in dem „Mods“ -Ordner, und ich weiß, dass mein Skript findet es, ich weiß nur nicht, warum das Verfahren ID nicht angerufen.
Haben Sie durch es im Debugger trat, um zu sehen, was passiert, wenn die 'foreach' Aufruf der Methoden erreicht Sie anrufen möchten? –
Die Methode übergibt die if-Anweisung nicht, und ich denke, das liegt am Namen der Methode. Warum nimmt er den Namen nicht an? –