测试题及部分太空之战

        1.物体发生碰撞的必要条件?

两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体,而且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。

        2.Unity3d中的碰撞器和触发器的区别?

方法不一样

Is Trigger  打不打勾

能穿透与不能穿透

碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器

        3.简述prefab的用处?

预设体:重复利用在游戏运行时实例化,prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。

        4.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个

重要的方法?

Awake——>OnEnable–>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy

太空大战需求

  • 技术要点
    1. Mathf类、Transform类、Time类、GameObject类、Vector3类、  Random
  1. 键盘事件
    1. 粒子系统
    2. 音频
    3. UGUI
    4. 碰撞检测       星期六测试
    5. 协程
    6. 销毁
    7. 克隆
    8. 鼠标事件

  • 星空管理
      1. 用Quad制作
      2. 用两个Quad拼接而成
      3. 星空循环滚动
  • 我方飞机管理
      1. 通过键盘控制移动
      2. 点击鼠标左键发射子弹
      3. 发射子弹时有声音播放
      4. 飞机尾部喷射特效
  • 我方子弹管理
      1. 子弹飞行
      2. 击中陨石或敌机使对方生命值减少,自己销毁
      3. 克隆出来后如果没有射中陨石或敌机,碰到边缘碰撞器销毁
  • 敌方陨石管理
      1. 程序启动3秒后克隆3个,然后每隔6秒再次克隆三个
      2. 陨石自身旋转
      3. 碰到我方子弹自动销毁,并伴随有爆炸声音和爆炸特效
  • 敌方飞机管理
      1. 程序启动8秒后克隆3个,然后每隔8秒再次克隆三个
      2. 每隔1秒发射一颗子弹
      3. 当生命值为0时销毁,并伴随有爆炸声音和爆炸特效
  • 敌方子弹管理
      1. 子弹飞行
      2. 击中我方飞机使我方飞机生命值减少,自己销毁
      3. 克隆出来后如果没有射中我方飞机,碰到边缘碰撞器销毁
  • 积分和生命值管理
      1. 积分通过销毁陨石和敌机增加
      2. 生命值随着敌方射击到我方而减少,当值为0时游戏结束

        注册、登录、 

 

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

public class BG : MonoBehaviour {

	public float speed;
	Vector3 startPos;
	void Start () {
		startPos = transform.position;
	}
	
	// Update is called once per frame
	void Update () {
		float pos = Mathf.Repeat(speed*Time .time ,30f);
		transform.position = startPos + Vector3.back * pos;
	}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerShip : MonoBehaviour {
	public float speed;
	Rigidbody r;

	public float fx;//偏移量
	public float xMax, xMin, zMax, zMin;
	public GameObject bullet;//子弹预设体
	public Transform bulletpos;//子弹发射位置
	public float shotSpace;//子弹发射间隔时间(0.25)
	private float nextShot; //下一次发射时间
    public GameObject playerEx;

	void Start () {
		r = GetComponent<Rigidbody>();
	}
	
	// Update is called once per frame
	void Update ()
    {
        move();
        Fire();

    }
    void Fire()
    {
        if (Input .GetButtonDown("Fire1")&&Time.time>nextShot)
        {
            nextShot = Time.time + shotSpace;
            //克隆子弹
            Instantiate(bullet, bulletpos.position,Quaternion.identity );//bulletpos.rotation
        }
    }

    private void move()
    {
        float h = Input.GetAxis("Horizontal") * speed;//*Time.deltaTime
        float v = Input.GetAxis("Vertical") * speed;
        Vector3 pos = new Vector3(h, 0, v);
        r.velocity = pos;
        //飞机旋转
        r.rotation = Quaternion.Euler(0, 0, r.velocity.x * (-1) * fx);//-1  表示正确方向
                                                                      //设置边界
        float x = Mathf.Clamp(r.position.x, xMin, xMax);
        float z = Mathf.Clamp(r.position.z, zMin, zMax);
        r.position = new Vector3(x, 0.3f, z);
    }
    void OnTriggerEnter(Collider other)
    {
        //碰到敌机子弹,敌机,陨石
        if (other.CompareTag("Enemy") || other.CompareTag("EnemyBullet")||other .CompareTag("EnemyShip"))
        {

            GM.instance.playerLife--;//掉血

        }
        
    }
}

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GM : MonoBehaviour {

	public static GM instance;
	public GameObject[] yunShi;//三种不同种类的陨石预设体
	public GameObject[] enemy;
	public int playerLife = 10;//玩家生命值
	public  int enemyLife = 5;
	public int score = 0;//分数

	public Text Hp;//血量文本
	public Text ScoreTxt;//分数文本
	public GameObject GameOver;//游戏结束界面
	void Start()
    {
		instance = this;

		StartCoroutine("SpwanEnemy");
    }
	void Update()
    {
		Hp.text = playerLife.ToString();
		ScoreTxt.text = score.ToString();
        if (playerLife <=0)
        {
			GameOver.SetActive(true);//显示游戏结束
			Time.timeScale = 0;//游戏暂停  
        }
    }
	IEnumerator SpwanEnemy()
    {
		yield return new WaitForSeconds(3f);//游戏开始3秒后
        while (true)
        {
			
            for (int i = 0; i < yunShi .Length; i++)
            {
				//克隆的陨石位置和种类都是随机的
				int r = Random.Range(0, yunShi.Length);
				float x = Random.Range(6.7f, -6.7f);
				float z = Random.Range(-18f,-10f);
				Instantiate(yunShi[r], new Vector3(x, 0.3f, z), Quaternion.identity);

            }
            for (int j = 0; j < enemy.Length; j++)
            {
				int f = Random.Range(0, enemy.Length);
				float xx = Random.Range(6.7f, -6.7f);
				float zz = Random.Range(-16f, -10f);
				Instantiate(enemy[f], new Vector3(xx, 0.3f, zz), Quaternion.Euler(0, 180, 0));
			}
				
			

            yield return new WaitForSeconds(3f);//克隆后3秒
		}
		
    }
}

就先发这些吧;!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值