在开发Unity 3D 游戏的过程中,经常会遇到在某个C#类中访问另一个C#类中的方法或属性这样的问题;
一:实现调用方法有3种:
1. 被调用脚本函数为static类型,调用时直接用 脚本名.函数名()
2. GameObject.Find(“脚本所在的物体的名字”).SendMessage(“函数名”); //能调用public和private类型函数
3. GameObject.Find(“脚本所在的物体的名字”).GetComponent<脚本名>().函数名(); //只能调用public类型函数
下面用具体代码举个例子:
- 使用单例模式
public class TestStaticFun : MonoBehaviour
{
public static TestStaticFun _instance; // static关键字。 单例模式 ,必须挂载到unity对象上
public void Awake()
{
_instance = this;// 确保单例模式在使用前已被初始化
}
public void testHandle1(int damage)
{
Debug.Log("测试static单例模式调用_" + damage);
}
}
在另一个c#代码里调用 TestStaticFun._instance.testHandle1(10);
- 把要访问的方法设置为静态方法
public class TestStaticFun : MonoBehaviour
{
public static void testHandle2(int damage)
{
Debug.Log("测试static两个类调用_" + damage);
}
}
在另一个c#代码里调用 TestStaticFun.testHandle2(20);
- 通过 SendMessage方法传递参数
public class TestStaticFun : MonoBehaviour
{
public void testHandle3()
{
Debug.Log("测试SendMessage调用");
}
}
在另一个c#代码里调用 GameObject.Find(“脚本所在的物体的名字”).SendMessage(“testHandle3”)
二:实现调用属性:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestStaticFun : MonoBehaviour
{
public static int playerCount = 0;
public void Start()
{
playerCount++;
}
}
在另一个c#代码里调用 TestStaticFun .playerCount
本人也是刚接触unity ,有不对的地方,还请各位大神指点,嘻嘻~