【Unity入门】9.帧更新

【Unity入门】帧更新

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢

(一)获取挂载对象的属性信息

(1)获取名字信息

    首先在C#代码中,this代表着脚本本身,而this.gameObject则是记录着脚本挂载的对象。那么要访问该对象的名字属性,我们可以:

string name = this.gameObject.name;
Debug.Log("当前物体的名字是" + name);

    也可以直接省略gameObject,用this.name去访问(有点像cocos的getChild)

string name = this.name;
Debug.Log("当前物体的名字是" + name);

    看看运行后的输出效果,当前组件是挂在Moon月亮上的,所以输出没有问题

【Unity入门】9.帧更新_第1张图片

(2)全局坐标

    我们可以通过transtion组件来访问到对象的position信息,具体写法如下:

Vector3 pos = this.transform.position;
Debug.Log("当前物体的位置坐标是" + pos);

    看看输出效果:

【Unity入门】9.帧更新_第2张图片

    访问是访问到了,但是好像和Moon对象身上的属性值不太一样

【Unity入门】9.帧更新_第3张图片

     那是因为当前的月亮是挂在地月系统节点上的,我们看看当前“地月系统”节点的坐标值,通过换算就可以得出刚才打印的结果了。由此我们也知道,position是取的对象的全局坐标而并非局部坐标

【Unity入门】9.帧更新_第4张图片

(3)局部坐标

    每次都得换算一下来验证坐标正不正确多麻烦呀,所以我们可以通过transform的localPosition属性直接访问对象的局部坐标信息

【Unity入门】9.帧更新_第5张图片

     看看结果:

【Unity入门】9.帧更新_第6张图片

(4)重新设置坐标位置

    既然get到了坐标,那么下一步set一下是否能行呢?

【Unity入门】9.帧更新_第7张图片

     那毫无疑问肯定是可以的,我们可以观察得到,position是Vector3类型的,那么直接new一个新的替换上去就好啦

this.transform.localPosition = new Vector3(5f,5f,0);

【Unity入门】9.帧更新_第8张图片

(二)帧更新

(1)使用update方法

    和cocos一样,unity也有一个update方法,就是游戏的每一帧都会执行一次这个update方法。那么具体是多久执行一次呢?我们可以通过Time.deltaTime字段来访问

【Unity入门】9.帧更新_第9张图片

     然后执行查看console框,发现在默认情况下,大概是0.005~0.01这个范围。也就是每秒100~200帧之间

【Unity入门】9.帧更新_第10张图片

    帧率并不是一个固定的值,它和设备当前的状态有关,就比如我们玩游戏时,遇到一些绚丽的特效,或者一条短信进来的时候,可能都会发生掉帧的现象。我们现在可以通过Application.targetFrameRate来设置我们这个demo的帧率,unity会尽量按照设置的帧率来执行

    比如现在设置Application.targetFrameRate = 60

    可以看到,设置完之后的执行时间是大概维持在0.016,也就是一秒执行60次

(2)每帧设置坐标的值

    我们可以在update方法中,修改物体的坐标,那么就可以实现物体的移动效果.比如这样就可以让每次执行update的时候让物体的x移动0.1个单位

【Unity入门】9.帧更新_第11张图片

    注意修改的坐标,需要重新复制给localPosition属性,因为Vector3是一个值类型,当它发生修改的时候就会生成一个新的对象来记录,并不可以在原来的基础上直接修改的

【Unity入门】9.帧更新_第12张图片

    ok那现在小球就动起来了,但是需要考虑到,因为执行update的时间并不是固定的,要想实现匀速运动,我们得换一个写法:比如我们想要一帧跑0.1个单位,那一秒60帧就是一秒跑6个单位

【Unity入门】9.帧更新_第13张图片

好啦今天就到这里,感谢阅读!!!
点赞,关注!!!

你可能感兴趣的:(Unity原理,unity,游戏引擎)