游戏代码开发日志002 - 基础图像输出

目录

1.如何在代码中实现音乐加载和图片加载

2.关于transform.Translate()函数

3. 关于Time.deltaTime的分析

4.协程函数IEnumerator()和WaitForSeconds()尝试

5.Invoke()函数尝试

6.利用Time.deltaTime达成延时效果

7.最终效果


1.如何在代码中实现音乐加载和图片加载

音乐加载和图片加载的区别

音乐:

public AudioClip 参数1;

private AudioSource 参数2 = GetComponent<AudioSource>();

参数2.clip = 参数1;

图片:

public Sprite 参数1;

private SpriteRenderer 参数2 = GetComponent< SpriteRenderer >();

参数2.sprite = 参数1;

2.关于transform.Translate()函数

我不打算使用在transform.Translate()里加入Time.deltaTime,而是用Time.deltaTime作为图片轮播时间间隔的检测,然后单独设置每两次时间间隔间的位移。

为什么会报错,原来是transform写成Transform了,笑。

3. 关于Time.deltaTime的分析

因为我想通过延时的图片轮播以达成动画效果,所以找了很多有关延时方法的参考,很多地方提到了Time.deltaTime,所以我打算把它单独拿出来。

Unity增量时间Time.deltaTime详解_Chinarcsdn的博客-CSDN博客

这个页面讲得非常好,现做一点总结。

在transform.Translate(0, 0, Time.deltaTime * 10)里,transform.Translate是位置移动函数,前面两个0代表两个轴的坐标位移量为0,deltaTime代表着增量时间,即每两次程序检测时间之差,避免了由于性能原因带来的掉帧,所以可以诠释一个平整无缝隙的位移。

另外,关于Time.Time和Time.deltaTime的区别:

Time.Time是自循环开始以来经过的时间,可用于获取自游戏开始以来的时间。

Time.deltatime则是完成最后一帧所经过的时间。

4.协程函数IEnumerator()和WaitForSeconds()尝试

在使用Time.deltaTime之前,我看了一些类似目的的方法函数。

比如yield return new WaitForSeconds(float 时间f),它固定用于协程函数里,在IEnumerator 函数名(){}里调用才有效,子函数Start函数和Update函数里都不能放这个函数。

创建了一个协程函数,但是调用失败了。我希望在每次调用PlayerMoveleft函数的if语句时都产生一次时间间隔,但是每两次按下按键间根本没有时间间隔出现。

原来是要和StartCoroutine(函数())一起使用。

修改了一下,发现协程函数在运行的时候不会阻塞程序,而且过于麻烦,这不是我想要的。

5.Invoke()函数尝试

Invoke()好像也能达成延时效果,所以试了一下。

这样不行,会导致即使移动速度不会增快,但每次间隔间会移动得越来越远。

而Invoke()必须调用函数才能使用,但是使用起来相当简单,我觉得可以先搁置一下。

也许我应该改改update的按键key底层逻辑了,把GetKeyDown()改为GetKey()。

6.利用Time.deltaTime达成延时效果

所以还是觉得Time.deltaTime更好用,public float了一个coldTime = 0f,作为计时器,到1就触发一次if语句然后归零。

修复1:以为是GetKey()里的问题,不加While(true)时,函数只执行一次且总是第一个MoveStatus。

但是加上While(true)时,发现循环反而无法执行。但其实并不是没有执行,而是Unity直接卡死了……不得不打开任务管理器结束任务。

简单想了一下觉得是因为PlayerMoveLeft()在执行coldTime计时功能时并没有产生程序阻塞,以至于后面的if(Movestatus)在第一次未被执行后就再也不执行了,而每次GetKeyUp时我又把MoveStatus和coldTime归零了,所以每次按下都只会根据MoveStatus=0只执行一次WalkTransition01。

修复2:嵌套了一个PlayerMoveLeft()和return但好像还是不行。老问题。原来是第一个MoveStatus = -1导致的,除了最后一次的PlayerMoveStop的归零没办法继续执行语句。所以我该怎么保证一次循环中的位移和图片变化只执行一次呢?

修复3:把位移和图片变化表达式放进coldTime里就行了。

7.最终效果

修改了一下时间间隔,简单添加了其它几项移动位点。

成果如下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值