【3D游戏编程】5. 与游戏世界交互

演示视频:bilibili
项目地址:Github
设计说明:

总体结构:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMOMmDgQ-1577007237091)(assets/5.png)]

首先设计好一个飞碟预制,确定其大小属性和颜色(颜色也可不选,之后程序会生成),并且增加physcis中的Rigidbody组件,勾选Use Gravity(使得物体的运动受重力影响):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAbxUlGc-1577007237096)(assets/1-1570542364679.png)]

编写BaseCode.cs,其中包含Director类,还有一个储存飞碟属性的类Disk,外加一个场景控制器的接口IScenController

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVvDwN9F-1577007237105)(…/…/…/Desktop/2.png)]

DiskFactory.cs以工厂模式管理飞碟的生产与回收。他会根据回合数生成不同速度和大小的飞碟并设定随机初始位置和初始速度以及在六种颜色中随机选择一种

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PriestsAndDevils;
// 工厂模式
public class DiskFactory : MonoBehaviour
{
   
    private List<Disk> toDelete = new List<Disk>();
    private List<Disk> toUse = new List<Disk>();
    public Color[] colors = {
   Color.white,Color.yellow,Color.red,Color.blue,Color.green,Color.black};//可选颜色
    public GameObject GetDisk(int round){
   //根据回合数对飞碟设置属性并返回
        GameObject newDisk = null;
        if (toUse.Count > 0){
   
            newDisk = toUse[0].gameObject;
            toUse.Remove(toUse[0]);
        }else{
   
            newDisk = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/disk"), Vector3.zero, Quaternion.identity);
            newDisk.AddComponent<Disk>();
        }
        // 飞碟的速度为round*7
        newDisk.GetComponent<Disk>().speed = 7.0f * round;
        // 飞碟随round越来越小
        newDisk.GetComponent<Disk>().size = (1 - round*0.1f);
        // 飞碟颜色随机
        int color = UnityEngine.Random.Range(0, 6);//共有六种颜色
        newDisk.GetComponent<Disk>().color = colors[color];
       
        // 飞碟的发射方向
        float RanX = UnityEngine.Random.Range(-1, 3) < 1 ? -1 : 1;//-1,0则为负方向,1,2则为正方向
        newDisk.GetComponent<Disk>().direction = new Vector3(-RanX, UnityEngine.Random.Range(-2f, 2f), 0);
        // 飞碟的初始位置
        newDisk.GetComponent<Disk>().position = new Vector3(RanX*13, UnityEngine.Random.Range(-2f, 2f), UnityEngine.Random.Range(-1f, 1f));

        toDelete.Add(newDisk.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值