作业4-游戏对象与图形基础

1、基本操作演练【建议做】

  • 下载 Fantasy Skybox FREE, 构建自己的游戏场景
  1. 下载后在Package Manager中进行管理,选择需要的素材import。
  2. 课程网站中是自建天空盒,下载的Fantasy Skybox FREE中已有可用的天空盒,在MainCamera中新增一个组件Skybox,选择一个素材中的天空盒,如下图。

图片

  1. 新建一个Terrain,点击Paint Terrain绘制地形。
  2. 新建一个Material,设置成深绿色,在Terrain Settings中,找到Basic Terrain的Material,拖入新建的Material,把地形的基色设置成深绿色。
  3. 点击Paint Trees种树,点击Edit Trees…->Add Tree,选择Fantasy Skybox FREE中已有的树prefab,点击Add。然后就可以在地形上点击画树。
  4. 点击Paint Details,点击Edit Details…->Add Grass Texture,选择Fantasy Skybox FREE中已有的草,点击Add。然后就可以在地形上点击画草。
  5. 效果如下图。

图片

代码传送门

  • 写一个简单的总结,总结游戏对象的使用

游戏对象包括:摄像机、灯光、地形、空对象、3d对象、2d对象等。游戏对象具有各式属性,它们的功能是通过脚本来实现的。之前学习了如何自己创建游戏对象,这次构建游戏场景更多的是下载、导入和使用商店中已有的对象,商店中的资源非常多,使用也很方便,使用这些已有的资源比全部自己完成会更高效。

2、编程实践

  • 牧师与魔鬼 动作分离版
    • 【2019开始的新要求】:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束
  1. 增加Actions.cs。主要的代码来自于课程网站,MySceneActionManager类负责游戏的具体操作。
  2. 在Model.cs中增加Judge类,并且负责原check函数的功能。IUserAction中删除Check函数。
public class Judge {
        LandModel start_land;
        LandModel end_land;
        BoatModel boat;
        public Judge(LandModel start_,LandModel end_,BoatModel boat_)
        {
            start_land = start_;
            end_land = end_;
            boat = boat_;
        }
        public int Check()
        {
            int start_priest = (start_land.GetRoleNum())[0];
            int start_devil = (start_land.GetRoleNum())[1];
            int end_priest = (end_land.GetRoleNum())[0];
            int end_devil = (end_land.GetRoleNum())[1];

            if (end_priest + end_devil == 6)     
                return 2;

            int[] boat_role_num = boat.GetRoleNum();
            if (boat.GetBoatSign() == true)         
            {
                start_priest += boat_role_num[0];
                start_devil += boat_role_num[1];
            }
            else                                  
            {
                end_priest += boat_role_num[0];
                end_devil += boat_role_num[1];
            }
            if (start_priest > 0 && start_priest < start_devil) 
            {      
                return 1;
            }
            if (end_priest > 0 && end_priest < end_devil)        
            {
                return 1;
            }
            return 0;                                             
        }
    }
  1. 在Controllor.cs中,增加Judge类型变量judge,在LoadResources函数将调用原check函数的地方修改成judge.check(),删掉了原先的check函数。

具体代码见github:传送门

效果图如下:图片

3、材料与渲染联系【可选】

  1. 新建一个球形对象,新建一个Material。
  2. 首先改变Albedo,选择绿色,将Material拖到球形对象上,效果如下,可以看到球形对象已经变成了绿色。

图片
图片

  1. 改变Transparency,首先要修改Rendering Mode为Transparent,然后修改Albedo中的A,可以看到下图中的球形对象的透明度已经变了。

图片
图片

  • 声音
    • 阅读官方Audio手册
    • 用博客给出游戏中利用 Reverb Zones 呈现车辆穿过隧道的声效的案例
  1. 新建一个空对象。下载一个Engine Sound,并导入项目。
  2. 为空对象添加组件Audio Source,把音频拖进AudioClip,并选择Loop。

图片

  1. 为空对象添加组件Audio Reverb Zone,将Reverb Preset选项改为Cave。

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值