0%

可以新建一个游戏体上面存储所有要操作的数据,如果游戏场景比较多,可以在接近根结点的每个大游戏体上简历几个脚本,分别存储不同的信息。信息集中管理逻辑更清晰,在其他脚本中的引用也更少。

少了错综复杂的引用,当然更清晰,更易于管理。
集中管理的好处还是很多的。
可以集中的有,数据、帧操作等。

阅读全文 »

这个问题的原因很可能是没有声明对应的namespaces,
在unity中使用UI构建物体,修改或调用其自带的脚本如Text等是需要先

1
using UnityEngine.UI;

在网上找了半天就没有一个把unity发布为webgl,并部署到Apache的详细方法。
所以自己写一个

发布为webgl

在unity窗口file->build setting->
选中webgl;
至少选中一个场景;
webgl右侧什么都不选;
然后build and run;

阅读全文 »

一开始想详细写,后因全栈开发较忙,搁置了一段时间,现简单描述一下

方法一

使用打印功能擦看出对应的类型AudioClip、Rigidbody2D等

直接用他们申明数组,多维的用下面之类的格式

1
public Rigidbody2D[,] R2D = new Rigidbody2D[10,27];
阅读全文 »

以火箭始终朝向砖块为例

1
2
3
Vector3 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
15
private 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语法的方法如下:

阅读全文 »

在脚本里使用this替代GameObject.Find(“”),可以让一个脚本在多个相似功能的游戏体上使用,this指挂载的那个游戏体。

通过

1
this.GetComponent<Scrollbar>().value
阅读全文 »

unity的游戏体一定要好好命名,不要重名

不重名是因为后续基本都是用GameObject.Find(“”)查找游戏体。

查找的时候务必加上多级路径提升查找效率;
多次使用要提前查找、赋值给变量;
所有查找放在Start()里。

阅读全文 »

第一种是在脚本的类里方法外public声明,挂载后拉上去,好处是可以处理未激活的游戏体,一次声明多次使用。

第二种是使用

1
GameObject.Find("Bricks1")

只要名字不重复,随时可以使用,但是每次使用都要Find效率略低,不能Find未激活的游戏体。
并且要注意游戏体是否被其他程序设置为未激活了,比如你前一步程序把它的父物体设置未激活了就会导致找不到实体。

阅读全文 »

1
GameObject.Find("Bricks1").GetComponent<MakeBricksMove>().enabled=true;

可以调用很多游戏体,但是不能调用没激活的游戏体。
要调用没预先没激活的游戏体,需要用public声明引用。