unity 我的第一个项目总结(进行中)

来源:互联网 发布:如何减腓肠肌 知乎 编辑:程序博客网 时间:2024/05/01 09:58

解决暂停问题(用伪暂停)

IEnumerator SolvePause(float time)    // solve pause problem .
    {
        float tmpTime = 0;
        while (true) {
            if(!DataAll2.paused)
                tmpTime+=0.1f;
            yield return new WaitForSeconds(0.1f);
            if(tmpTime>time)
                break;
        }
    }



关于基类和继承,A:monobehavior

start,update,ienumerator....之类是特殊函数,应该被称为message,他们的继承能被覆盖。且

不用声明为public类型,他们跟public类型作用类似,和多态作用类似。学会使用继承,在基类中定义

virtual 函数。比如:son:father,在father里,

void Start()

{

    f();

}

(public) void f()

{

debug.log("a");

}


在son里

(public) void f()

{

debug.log("b");

}

《《《《《那么Start里面还是用的父类中的f(),应该把父类中的f()声明为public virtual类型!!》》》》》

father中的相应变量声明为protected型,以至于在Inspector中不可见,但是在son中可见,方便与虚函数的配合。



enum ,struct 声明在类外,即使不用public修饰也是全局可见,因为这只是声明了类型,像系统的int一样。


更换UIsprite中的sprite图片,更改spritename就行了(在相应的atlas中选一个图片的名字),千万不能用GetComponent<UISprite>().material.mainTexture=。。

这样会更改整个atlas的图片,而且是无法逆转的。。


目前关于抢占的情况无法下定论,虽然开始出现过奇怪的现象,不知道是什么引起,但现在貌似没有这种情况了。。


必须掉三个道具:dataall2.onlyOne保证同时或者不同时点多个蚂蚁只掉一个道具。在pick一个道具后才能重设为false,这样有个问题,当道具掉到外面就不能继续捡了。所以隔一段时间后还要再自动设为false。

 

关于点击蚂蚁(Hit),我的方法是一般方法也是最费的吧,就是时时刻刻检测是否与Hit collider 碰撞,有个偏门方法,但是很快,只用在点击的时候判断,就是把蚂蚁的tag与当前蚂蚁的脚本关联起来,比如mayi2,可以把tag设为mayi2,脚本设为mayi2,这样只用在点击时根据CastHitInfo来直接调用该脚本中的一个public方法。虽然蚂蚁的tag和脚本名字都不不一样,但是这个方法名一样,方便调用!!但是findgameobjectswithtag..这样的只能用固定的tag。

 

 

发现委托的一个现象,每生成一个ant委托加上该ant上的一个方法,当ant被删除后,这个方法仍然在委托中,也能执行,所以蚂蚁死后要把该方法从委托中删除。

委托效率高,但是处理很繁琐,比如加入的方法在很多地方都要删除。

 

一个物体突然出现在某个地方,而又想和正好接触的物体促发trigger事件,那么这个突现的物体要加上rigidbody。

 

foreach (GameObject o in  GameObject.FindGameObjectsWithTag ("Ant"))中的o实际上就是      gameObject,可以用o得到改物体上的部件,o.GetComponent<>()…但是所有不同的o上可以挂一个相同的脚本ScriptCommon来控制部分功能!!比如冰块的生成。

 

 

关于一类物体的tag不一定都相同,可以只用前部分相同就行了,比如,mayi0,mayi1,

。。。在判断是否是同一类的时候用SubString判就行了。。

 

 

如果反复调用一句tmpCubeTeam = Instantiate (dragCubeTeam) as GameObject;那么实际只产生一个物体

 

第二只:

 

 

 

注意 waitDestroyObj和hitToolBase的区别。

 

冰块必杀分两大部分-----

冰雹风雪(冰块大招)时是全屏的,最原始也是最慢的方法是大招时放个全屏的collider,这样时时刻刻都要检测是否与该collider碰撞,高级的方法是,事先在蚂蚁脚本里面写个public方法执行冰块生成,然后用委托加上这些方法,在大招时直接调用该委托就行了。改委托可以写在dataall2.cs里面。但是除了这以外,新出生的蚂蚁仍然要中大招,所以要在dataAll2.cs中加一个新的状态,ifbingkuaibisha..

 

有个现象,当在游戏运行的时候注释代码保存,接下来就会出现离奇的bug。。

 

如果想destroy某个物体,可以把该物体设为另外一个物体的子物体,然后一次Destroy可以全部删掉。

 

renderObject.renderer.material.color改了后,就算是换了shader,这个color不会随shader的改变而改变。



0 0