Unity 3D游戏——神鬼传说(动作管理重制版)

基本操作演练

  • 下载 Fantasy Skybox FREE, 构建自己的游戏场景
  • 写一个简单的总结,总结游戏对象的使用
下载Fantasy Skybox FREE 构建场景

(1)在Asset Store搜索Fantasy Skybox FREE并下载。
在这里插入图片描述
(2)将Fantasy Skybox FREE导入项目,查看相关资源。主要是Asset\Fantasy Skybox FREE\Demo\Prefabs文件夹中的预制和Asset\Fantasy Skybox FREE\Demo\Terrain文件夹下已经做好的场地场景。
在这里插入图片描述
在这里插入图片描述
(3)利用已有的预制和场景构建自己的游戏场景,主要需要完成的也只是将已有的游戏对象拖入Scene。
在这里插入图片描述

总结游戏对象的使用

作为程序员,我们大多对美工没有成熟的想法和技术,所以由我们自己完成对游戏场景的塑造确实有点强人所难,但是美好的场景对于一款游戏来说却又是必须的,因此,我们有必要借助别人已经做好的模型,用这些已经成熟的组件完成对场景的构建,具体的行为和交互由我们自己编写的程序完成,通过简单的拖动或创建完成场景在生产过程是简化生产流程和生产成本的一个有效途径。

编程实践

  • 牧师与魔鬼 动作分离版
  • 设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束
动作分离

(1)首先查看UML图,SSAction类是动作类,负责所有动作的具体信息以及实施;SSActionManager类是动作管理类,负责控制动作的执行;XXSceneController类是场景管理类,当有游戏对象需要移动时,需要将该信号传递给CCActionManager类CCActionManager类派生自SSActionManager类,接收来自场记的信号,并完成对动作的调配和执行;CCSequenceAction类CCMoveToAction类都派生自SSAction类,前者代表组合动作,后者代表移动到某一目的地的动作;SSActionEvent是一个接口,交由SSAction类实现。
在这里插入图片描述
(2)其次需要对现有类做一些补充,使得功能更为完善和安全,确保系统的健壮性。添加ISSActionCallback类,用于标识动作是否已经完成,将完成的消息返回给动作管理类,以便动作管理类执行下一个动作。所以该类将会成为SSAction类的一个属性,作为callback被调用,告诉SSActionManager类,动作完成。根本原理是,ISSActionCallback类包含唯一的方法,用于对一个已结束的动作做处理,所以动作管理类都必须对该类继承;而动作类又必须有该类的属性,以便于在动作结束后调用。

(3)查看师姐的代码,发现一个小缺陷,在动作管理类中,因为没有对其管理的动作的callback的函数定义,所以在Update函数中使用enable属性来判断动作是否正在进行中是不合理的,毕竟所有动作的enable属性都被赋值为true并且不会被修改。

遇到的一些问题:
1.列表List<>在声明后必须用new List,<>()初始化,否则就没有创建实例,无法使用,C#语言特性,类似Java。
2.对于Start()Update()这样的方法。当他们存在于父类中时,子类中即便不需要,也必须实现,否则,他们会在运行过程中自动调用父类的版本,可能引起错误。
3.派生自MonoBehaviour类的类必须通过AddComponent方法才能加入到场景中,或者说加入到游戏对象上。

ActionManager.cs 代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Director;

namespace ActionManager
{
   
    public enum SSActionEventType : int {
    Started, Competeted }

    public interface ISSActionCallback/* 动作事件调用接口,由动作、动作类型和参数构成事件 */
    {
   
        void SSActionEvent(SSAction source, SSActionEventType events = SSActionEventType.Competeted,
            int intParam = 0, string strParam = null, Object objectParam = null);
    }

    public class SSAction : ScriptableObject            /* 动作 */
    {
   

        public bool enable = true;                      /* 是否正在进行此动作 */
        public bool destroy = false;                    /* 是否需要被销毁 */

        public GameObject gameobject;                   /* 动作对象 */
        public Transform transform;                     /* 动作对象的transform */
        public ISSActionCallback callback;              /* 回调函数 */

        protected SSAction() {
    }                        /* 保证SSAction不会被new */

        public virtual void Start()                     /* 子类可以使用这两个函数 */
        {
   
            throw new System.NotImplementedException();
        }

        public virtual void Update()
        {
   
            throw new System.NotImplementedException();
        }
    }

    public class CCSequenceAction : SSAction
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值