鼠标打飞碟(Hit UFO)游戏改进版_ufo游戏log-程序员宅基地

鼠标打飞碟(Hit UFO)游戏改进版

游戏内容要求:
按 adapter模式 设计图修改飞碟游戏
使它同时支持物理运动与运动学(变换)运动

跟之前的简单打飞碟相比,这次的多了个Adapter类和plane,plane是用来体现飞碟的物理运动的。
在这里插入图片描述

动作管理器统一接口

public interface SceneController
{
    
    void load();
    void game(int Round);
    int Choose(float[] probe);
}

飞碟随机运动

using UnityEngine;
using System.Collections;

public class move1 : MonoBehaviour {
    
    public float speedX = 5.0F;
    public float speedY = 5.0F;
    public float speedZ = 5.0F;
    // Use this for initialization
    float rand1 = Random.Range(-1.0f, 1.0f);
    float rand2 = Random.Range(-1.0f, 1.0f);
    float rand3 = Random.Range(-1.0f, 1.0f);

    float randx;
    float randy;
    


    void Start () {
    
        randx = Random.Range(-1.0f, 1.0f);
        randy = Random.Range(-1.0f, 1.0f);
        //Debug.Log(randx);
        //Debug.Log(randy);
        if (randx>0)
            randx = 1.0f;
        else
            randx = -1.0f;

        if (randy >0)
            randy = 1.0f;
        else
            randy = -1.0f;
    }
	
	// Update is called once per frame
	void Update () {
    
        
        
        float translationY = 1 * speedY*rand1*randx;
        
        float translationX = 1 * speedX*rand2*randy;
        
        float translationZ = 1 * speedZ;
        translationY *= Time.deltaTime;
        translationX *= Time.deltaTime;
        //transform.Translate(0, translationY, 0);
        //transform.Translate(translationX, 0, 0);
        transform.Translate(translationX, translationY, translationZ);
        
    }
    

}

工厂

using UnityEngine;
using Adapter;

namespace SimpleFactory
{
    
    #region 产品

    public interface UFO
    {
    
        GameObject Version(int round);
    }
    
    public class UFO1 : UFO
    {
    
        
        float x = Random.Range(0.0f, 5.0f);
        public virtual GameObject Version(int round)
        {
    
            GameObject UFO1;
            Vector3 UFO1Pos = new Vector3(x, 0, 0);
            UFO1 = Object.Instantiate(Resources.Load("UFO1", typeof(GameObject)), UFO1Pos, Quaternion.identity) as GameObject;
            UFO1.name = "UFO1";
            UFO1.AddComponent<PickupObject>();
            //UFO1.AddComponent<Rigidbody>();
            move1 test = UFO1.AddComponent<move1>();
            test.speedX *=  (float)round;
            test.speedY *=   (float)round;
            test.speedZ = 0.0f ;
            return UFO1;
        }
     
    }
    
    public class UFO2 : UFO
    {
    
        float x = Random.Range(0.0f, 5.0f);
        public virtual GameObject Version(int round)
        {
    
            GameObject UFO1;
            Vector3 UFO1Pos = new Vector3(x, 0, 0);
            UFO1 = Object.Instantiate(Resources.Load("UFO2", typeof(GameObject)), UFO1Pos, Quaternion.identity) as GameObject;
            UFO1.name = "UFO2";
            UFO1.AddComponent<PickupObject>();
            //UFO1.AddComponent<Rigidbody>();
            move1 test = UFO1.AddComponent<move1>();
            test.speedX *= (float)round;
            test.speedY *= (float)round;
            test.speedZ = 0.0f;
            return UFO1;
     
        }
        public virtual void Add_Component_Rigidbody(GameObject ufo)
        {
    
            ufo.AddComponent<Rigidbody>();
        }
    }

    public class UFO3 : UFO
    {
    
        float x = Random.Range(0.0f, 5.0f);
        public virtual GameObject Version(int round)
        {
    
            GameObject UFO1;
            Vector3 UFO1Pos = new Vector3(x, 0, 0);
            UFO1 = Object.Instantiate(Resources.Load("UFO3", typeof(GameObject)), UFO1Pos, Quaternion.identity) as GameObject;
            UFO1.name = "UFO3";
            UFO1.AddComponent<PickupObject>();
            //UFO1.AddComponent<Rigidbody>();
            move1 test = UFO1.AddComponent<move1>();
            test.speedX *= (float)round;
            test.speedY *=  (float)round;
            test.speedZ = 0.0f;
            return UFO1;

        }
    }

    public class UFO4 : UFO
    {
    
        float x = Random.Range(0.0f, 5.0f);
        public virtual GameObject Version(int round)
        {
    
            GameObject UFO1;
            Vector3 UFO1Pos = new Vector3(x, 0, 0);
            UFO1 = Object.Instantiate(Resources.Load("UFO4", typeof(GameObject)), UFO1Pos, Quaternion.identity) as GameObject;
            UFO1.name = "UFO4";
            UFO1.AddComponent<PickupObject>();
            //UFO1.AddComponent<Rigidbody>();
            move1 test = UFO1.AddComponent<move1>();
            test.speedX *= (float)round;
            test.speedY *= (float)round;
            test.speedZ = 0.0f;
            return UFO1;
     
        }
    }


    public class UFO5 : UFO
    {
    
        float x = Random.Range(0.0f, 5.0f);
        public virtual GameObject Version(int round)
        {
    
            GameObject UFO1;
            Vector3 UFO1Pos = new Vector3(x, 0, 0);
            UFO1 = Object.Instantiate(Resources.Load("UFO5", typeof(GameObject)), UFO1Pos, Quaternion.identity) as GameObject;
            UFO1.name = "UFO5";
            UFO1.AddComponent<PickupObject>();
            //UFO1.AddComponent<Rigidbody>();
            move1 test = UFO1.AddComponent<move1>();
            test.speedX *= (float)round;
            test.speedY *= (float)round;
            test.speedZ = 0.0f;
            return UFO1;

        }
    }
    #endregion

    #region 工厂
    public interface IFactory
    {
    
        UFO Create();
    }

    public class UFO1Factory : IFactory
    {
    
        public virtual UFO Create()
        {
    
            
            return new UFO1();
        }
    }

    public class UFO2Factory : IFactory
    {
    
        public virtual UFO Create()
        {
    
            return new UFO2();
        }
    }

    public class UFO3Factory : IFactory
    {
    
        public virtual UFO Create()
        {
    
            
            return new UFO3();
        }
    }

    public class UFO4Factory : IFactory
    {
    
        public virtual UFO Create()
        {
    
            return new UFO4();
        }
    }

    public class UFO5Factory : IFactory
    {
    
        public virtual UFO Create()
        {
    
            return new UFO5();
        }
    }

    #endregion
}
}

场景单实例

using UnityEngine;
using System.Collections;

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
    
    protected static T instance;
    public static T Instance
    {
    
        get
        {
    
            if (instance == null)
            {
    
                instance = (T)FindObjectOfType(typeof(T));
                if (instance == null)
                {
    
                    Debug.LogError("An instance of " + typeof(T) +
                    " is needed in the scene, but there is none.");
                }
            }
            return instance;
        }
    }
}

场景单实例的使用很简单,你仅需要将 MonoBehaviour 子类对象挂载任何一个游戏对象上即可。

然后在任意位置使用代码 Singleton <>.Instance 获得该对象。

光标拾取多个物体程序

public class PickupMultiObjects : MonoBehaviour {
    

	public GameObject cam;

	// Update is called once per frame
	void Update () {
    
		if (Input.GetButtonDown("Fire1")) {
    
			Debug.Log ("Fired Pressed");
			Debug.Log (Input.mousePosition);

			Vector3 mp = Input.mousePosition; //get Screen Position

			//create ray, origin is camera, and direction to mousepoint
			Camera ca;
			if (cam != null ) ca = cam.GetComponent<Camera> (); 
			else ca = Camera.main;

			Ray ray = ca.ScreenPointToRay(Input.mousePosition);

			//Return the ray's hits
			RaycastHit[] hits = Physics.RaycastAll (ray);

			foreach (RaycastHit hit in hits) {
    
				print (hit.transform.gameObject.name);
				if (hit.collider.gameObject.tag.Contains("Finish")) {
     //plane tag
					Debug.Log ("hit " + hit.collider.gameObject.name +"!" ); 
				}
				Destroy (hit.transform.gameObject);
			}
		}		
	}
}

Adater类():

using UnityEngine;
using System.Collections;
using SimpleFactory;

namespace Adapter
{
    
    public class adapter
    {
    
        public void Add_Component_Rigidbody(SimpleFactory.UFO ufo,int i)
        {
    
            ufo.Version(i).AddComponent<Rigidbody>();

        }
    }
}

成品图:
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Maykidd/article/details/102625816

智能推荐

webUpload组件实现文件上传功能和下载功能_webuploader 0.1.5-程序员宅基地

文章浏览阅读392次。参考文章:http://blog.ncmem.com/wordpress/2023/09/14/webupload%e7%bb%84%e4%bb%b6%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%8a%9f%e8%83%bd%e5%92%8c%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd/systemConfig.properties文件。java后端downloadServlet代码。_webuploader 0.1.5

TSINGSEE青犀AI智能分析网关V4的人员摔倒检测算法及应用-程序员宅基地

文章浏览阅读782次,点赞18次,收藏9次。在安全监控领域,人员摔倒检测算法可以应用于工厂、工地等场所,实时监控工人的安全状况。一旦发生摔倒等意外事件,系统可以迅速发出警报,提醒管理人员及时采取救援措施,保障工人的生命安全。

c语言加密字符串正序变倒序,MD5加密(自能加密,不能解密)-程序员宅基地

文章浏览阅读462次。1.必须导入系统的头文件2.//MD5加密 为字符串加密-(void)md5{//1.需要加密的内容NSString str = @"我的iOS老师是最帅";//2.将数据转换为data类型 因为系统提供的md5加密的函数为C语言函数,所以需要将OC的字符串转换成C语言的字符串const char sourceData = [str UTF8String];//3.C语言的char类型的数组,..._md5_digest_length

java练习题-计算器_java程序模拟简单计算器定义名为number-程序员宅基地

文章浏览阅读309次。java练习题-计算器问题:编写Java程序模拟简单的计算器。定义名为Number的类其中有两个整型数据成员n1和n2应声明为私有。编写构造方法赋予n1和n2初始值再为该类定义加addition()、减substation()、乘multiplication()、除division()等公有实例方法分别对两个成员变量执行加、减、乘、除的运算。在main方法中创建Number类的对象调用各个方法并显示计算结果_java程序模拟简单计算器定义名为number

什么是超市LED显示屏-程序员宅基地

文章浏览阅读203次。在商场内,LED显示屏主要应用于投放商家提供的广告,如商铺展示、商品展示、餐饮食品展示、服饰展示、化妆品展示等。超市LED显示屏主要用于超市播放广告促销等信息,显示文字信息方面,主要包括室内LED显示屏、LED透明屏、LED圆柱屏以及户外大屏幕LED显示屏等类型。常见的商场led大屏都有哪些?以上就是小编为大家做的总结了,相信大家看了之后都有了一定的了解,如果有这方面的需求,可以直接咨询迈普光彩的技术人员,都会为大家一一解答的。超市主可使用LED显示屏发布一些日常宣传信息,如申请会员、折扣、打折等。

【CSS小例】赛博朋克-按钮动画-程序员宅基地

文章浏览阅读619次,点赞21次,收藏2次。纯CSS实现,赛博朋克故障风格动画效果

随便推点

LINUX配置ODBC环境连接达梦数据库常见错误_configure: error: in `/bigdata/apps/doris-master/t-程序员宅基地

文章浏览阅读2.7k次。1.执行./configure时报错checking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... /usr/bin/mkdir -pchecking for gawk... gawkchecking whether make sets $(MAKE)... yesc_configure: error: in `/bigdata/apps/doris-master/thirdparty/src/unixodbc-2.3

用Python绘制动态变化的曲线_python绘制动态曲线-程序员宅基地

文章浏览阅读1.1w次,点赞16次,收藏153次。无论从什么角度来说,圆锥曲线都非常适合动态演示,尤其是其中优美的几何关系,更能在动态变化中得到淋漓尽致的表现。_python绘制动态曲线

全国景区数据_全国旅游景点数据库-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏12次。全国景区数据汇总整理了全国31个省份及直辖市的1A-5A的景区信息,涵盖了景区名称、省份、景区级别、地址、经纬度、简介等字段,为相关研究助力! _全国旅游景点数据库

南大软院大神养成计划——第十天_大神计划数据-程序员宅基地

文章浏览阅读475次。今天是南大软院大神养成计划实施的第十天。今天主要学习了“DOM事件探秘”。首先说说第一章“事件流”,那什么是事件流呢?事件流就是描述描述从页面中接受事件的顺序,在浏览器中,IE和Netscape提出了相反的慨念,IE提出的是事件冒泡流,就是我们现在常用的事件流,Netscape提出的事件捕获流。首先说说事件冒泡流,事件冒泡流就是即事件最开始由最具体的无素(文档中嵌套层次最深的那个节点)接收,然_大神计划数据

端口被占用,但netstat却查询不到_linux 端口可以telnet通但是netstat -npl看不到-程序员宅基地

文章浏览阅读5.5k次。偶然遇到一个情况,A服务器和B服务器。A服务器能够Telnet B 8020端口,但B服务器通过netstat命令却查询不到8020端口。其原因是:Docker 所占用的端口,没有通过netstat查出来。(这里为什么没查出来,还不知道)。A服务器Telnet B,能够ConectionB服务器,netstat未查询到端口占用使用docker命令查询映射端口情况,发现8020端口..._linux 端口可以telnet通但是netstat -npl看不到

基于JavaWeb的在线音乐系统_web音乐播放器数据流图-程序员宅基地

文章浏览阅读1.6w次,点赞7次,收藏107次。开发环境:Jdk7(8)+Tomcat7(8)+Mysql+IntelliJ IDEA(Eclipse)数据库:MySQL技术:Java+Servlet+Jquery+JavaScript+Ajax+JSP+Bootstrap适用于:课程设计,毕业设计,学习等等系统介绍:本系统是采用Java Web技术的B-S架构的网站,用到的技术有Java EE 、CSS、JavaScript、Ajax。为了使用的效果以及开发的简便,在前端使用了CSS的Bootstrap及其UI组件框架,JS的Jque_web音乐播放器数据流图

推荐文章

热门文章

相关标签