可以新建一个游戏体上面存储所有要操作的数据,如果游戏场景比较多,可以在接近根结点的每个大游戏体上简历几个脚本,分别存储不同的信息。信息集中管理逻辑更清晰,在其他脚本中的引用也更少。
少了错综复杂的引用,当然更清晰,更易于管理。
集中管理的好处还是很多的。
可以集中的有,数据、帧操作等。
这个问题的原因很可能是没有声明对应的namespaces,
在unity中使用UI构建物体,修改或调用其自带的脚本如Text等是需要先1
using UnityEngine.UI;
以火箭始终朝向砖块为例1
2
3Vector3 dir = brickList[target%10].transform.position - rocket.transform.position;
float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
rocket.transform.rotation = Quaternion.AngleAxis(270+angle, Vector3.forward);
我这里是通过c#的object和unity的GameObject分别读取,然后贴在GameObject的组件的clip上,之后可以直接对组件调用Play()、Pause()、Stop()方法,和对loop之类的参数赋值。
代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15private string[] songList = {"fade_cut","Flirting_With_June_cut","lzttdmg_cut","Ocean_cut","Relax_cut"};
private object objs;
private GameObject GObject;
public void LoadMusic(int num){
objs = Resources.Load(songList[num]);
GObject.GetComponent<AudioSource>().clip = (AudioClip)objs;
GObject.GetComponent<AudioSource>().Play();
GObject.GetComponent<AudioSource>().loop = true;
}
void Start(){
GObject = GameObject.Find("SelectionPage");
}
可以提前加载的尽量方Start()里加载,示例中也可以提前加载成数组,但是考虑到内存资源的的占用使用的逐个加载。
以上使用了c#自带方法,提供了一种理解角度,更符合unity语法的方法如下:
1 | GameObject.Find("Bricks1").GetComponent<MakeBricksMove>().enabled=true; |
可以调用很多游戏体,但是不能调用没激活的游戏体。
要调用没预先没激活的游戏体,需要用public声明引用。