zoukankan      html  css  js  c++  java
  • 学习总结

    12月到了,新的一月,新的开始。今天终于完成了新的一个案例学习-2D坦克大战,小时候玩的非常经典的游戏,学习资源仍然是siki学院课程(http://www.sikiedu.com/my/course/90),这个课程的总结暂不进行。在学习的过程中有一些心得想要总结下来,这篇随笔就是记录这些心得。

     

     一.你干你的,我干我的

      在这几天学习的几个案例中,最直观的一点就是每一个物体都有自己的脚本,用于控制当前物体的生老病死,这样有效地降低了代码的耦合性,也使得代码更加清晰和便于阅读。如发射子弹的功能,当子弹被实例化出来之后,子弹的控制发射方就不用管了,在子弹上添加专门的脚本用于控制子弹的运动和销毁。

      同时,有一些脚本之间相互调用的情况不可避免,这时可以使用消息发送机制、单例模式等方式去调用更改。

    二.游戏物体的运动

      游戏物体的运动有多种方法控制,这段时间的案例中采用的方法我觉得可以分为两类:

      1.直接使游戏物体位置改变,不模拟真实的物理世界

        Translate方法:

    transform.Translate(Vector3.right * h * Time.fixedDeltaTime * moveSpeed ,Space.World)

        MoveTowards方法

    transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);

        此外,还有线性插值、球形插值等方法

      2.模拟真实的物理世界的运动

        通过刚体组件施加速度、力、旋转等方法模拟物理世界

    rigidbody.velocity = (transform.forward * v + transform.right * h) * speed;
    rigidbody.angularVelocity
    = transform.up * h * angularSpeed;

    三.加载场景

      使用协程加载场景是一个不错的方法,在加载场景时一般要等待几秒钟,同时可以使用invoke方法等待一小段时间并加载场景。

    //开启结束游戏的协程
    StartCoroutine(GameOverAnimation());
    //结束游戏的协程 IEnumerator GameOverAnimation() { //暂停一秒 yield return new WaitForSeconds(1);
      //其他代码
    //重新加载场景 SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); }

        使用协程加载场景

    //在1秒延迟之后调用游戏结束的方法
    Invoke("GameOver",1);
    
    //结束游戏的方法
    private void GameOver()
    {
        //重新加载场景
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }    

        使用invoke延迟调用

    协程和invoke的区别参见https://blog.csdn.net/luozhihua_as/article/details/81297196,虽然CSDN中重复的比较多,这些文字我找到了好几个一摸一样的,但是还是基本讲清楚了两者的区别。在使用中,协程相当于新开了一个update函数,如果要在结束游戏的时候进行像摄像机镜头拉近、改变背景等操作的话,使用协程更为方便,invoke是一种委托机制,而且调用的方法不能有参数,但是应用在调用定时执行的函数时更为方便。

    四.杂谈

      作为一个初学者,有很多老手已经味同嚼蜡的东西对于我来说非常有新鲜感,而且学习需要不断熟悉知识,不断掌握新的范式,所以如果我的文章有幸被你看到的话,您有任何的建议或者发现我哪里有错误的话都可以给我留言,我们可以一同讨论。

  • 相关阅读:
    inspector 只读属性
    使用MongoDB
    【Roslyn C#】Runtime环境Unity读取字符串代码
    Unity使用LoadImage 读取byte[]图片时,会出现白边问题
    团队中避免不可维护代码的措施
    Unity点到线段的最短距离
    判断点是否在多边形内部
    Unity 根据前后帧位置自动旋转
    停止Unity在运行时脚本修改重新编译的情况
    KI子线段树 / AKEE SegmentTree
  • 原文地址:https://www.cnblogs.com/movin2333/p/14071623.html
Copyright © 2011-2022 走看看