unity作业——简单dotween的制作

本文记录了一次Unity作业,内容是仿制简单的Dotween库,通过扩展Transform类实现物体平移、旋转和缩放。作业中主要应用了协程和动态方法,虽然lambda表达式未涉及,但协程的理解是关键。协程可以视为伪线程,允许函数分步执行,每次执行一部分,直到指定事件发生。文中还提到了用协程实现的示例。
摘要由CSDN通过智能技术生成

这次作业,老师让我们仿制一个简单的dotween,扩展一下transform中的方法,在这里我扩展了三个方法,使得例如调用transform.DoTranslate, transform.DoRotate,Transform.DoScale分别实现物体的平移,旋转和大小的改变。这里老师上课的网站上重点介绍了要实现这几个功能,需要用到协程,动态方法和lambda表达式。lambda表达式在这次作业中我还没有用到,但是协程和动态方法这次是必须要用的。首先我来谈一下我对协程的理解。

协程,可以说是伪线程。即它看上去像线程,但它的中断是显式的,直到指定的事件发生,由ReActor调度程序从当前断点继续执行。 也即是说当我们一般在执行函数调用时,函数会在一帧的时间内完成,若我们不想函数在一帧的时间内完成,而是分步执行,每次只执行一部分,下次执行时由上次执行的最后一句的下一句开始,这时我们就要用到协程。协程定义的方式为:IEnumerator+函数名(参数列表),同时要在返回语句前加上关键字yield,下面我们来看一个具体例子,就是潘老师的网站上所写的。

IEnumerator Fade() {
        for (float f = 1f; f >= 0; f -= 0.1f) {
                Color c = renderer.material.color;
                c.a = f;
                renderer.material.color = c;
                yield return null;
        }
}
    上述程序表示每当启动Fade启动后就会获得cpu时间,知道yield中断语句的执行。return null表示下次update事件发生时,自动从下一条语句执行。上述函数是一个渐变的改
变颜色的函数,可以助我们更好的实现颜色的变化。
    启动协程。
    
void Update() {
        if (Input.GetKeyDown("f")) {
                StartCoroutine("Fade");
        }
}
以上工作就完成了协程的启动,因为这次我们的任务是要求在一定的时间内实现对物体Transform属性的改变,因此必须要用到协程。


    下面是我对扩展方法的理解。
    扩展方法则是在现有的类中增加方法,无需继承就可以改写类,这次我们就需要在Transform类中增加三个方法。
    扩展方法的格式为:public static 返回类型 函数名(this Typeanme class, 参数){}这样就扩展出了一个方法,以下引用一段微软官方的对扩展方法的解释。
    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
    下面是一段老师网站的代码,帮助我们重点理解一下扩展方法。
      
public static class extend_method_test{
        //This is Extened Method, The first parameter beging with (this Type name, args)
        public static bool NextBool(this System.Random random)
        {
                return random.NextDouble() > 0.5;
        }
}

public class NewBehaviourScript : MonoBehaviour {
        // Use this for initialization
        void Start () {
                System.Random rand = new System.Random();
                print (rand.NextBool ());
        }

        // Update is called once per frame
        void Update () {

        }
} 
    这里就在系统类System.Random中增加了一个新的方法NextBool,即返回下一个大于0.5的随机数。
    在有了上述准备知识后,这次作业就比较容易理解了,首先是dotween类的编写,我们这里实现第一个效果DoRotate,使得物体能够在指定的时间内平移一定角度。
    dotween对应的是相应动作的协程,和动作对应的协程一一对应,里面存储了关于这个动作的各个信息,其中包括要为其设置协程。还有两个比较重要的变量,isPause和autoKill,autoKill
代表的是对应的动作结束后是否自动销毁,而isPause则意味着显示决定动作是否暂停和继续。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值