Game2

 using UnityEngine;
 using System.Collections;

 public class Game2_Player : MonoBehaviour {

     public GameObject m_bulletPrefab;   //子弹预设
     private Transform m_fireTransform;  //子弹的发射位置

     private Camera m_mainCamera; //摄像机

     public float m_moveSpeed = 5.0f;    //移动速度
     private Vector3 m_moveDirection;    //移动方向

     private Vector3 m_rotateFrom;   //旋转起点
     private Vector3 m_rotateTo; //

     public float m_fireInterval = 0.3f;   //射击时间间隔
     private float m_fireTimer;  //射击计时器

     private AudioSource m_audioSource;

     void Start () {
         m_mainCamera = Camera.main;
         m_fireTransform = transform.Find("BulletSpawner");
         m_audioSource = GetComponent<AudioSource>();
     }

     void Update () {
         Move();
         Rotate();
         )) {
             Fire();
         }
     }

     void LateUpdate() {
         //相机跟随玩家
         m_mainCamera.transform.position = ,transform.position.z);
     }

     //移动
     void Move() {
         float h = Input.GetAxis("Horizontal");
         float v = Input.GetAxis("Vertical");
          || v != ) {
             m_moveDirection = ,v);
         } else {
             m_moveDirection = Vector3.zero;
         }
         transform.Translate(m_moveDirection * m_moveSpeed * Time.smoothDeltaTime,Space.World);
     }

     //旋转
     void Rotate() {
         transform.rotation = Quaternion.LookRotation(GetRotation());
     }

     //射击
     void Fire() {
         if(m_fireTimer >= m_fireInterval) {
             m_fireTimer = 0f;
             GameObject bulletGo = Instantiate(m_bulletPrefab,m_fireTransform.position,Quaternion.LookRotation(GetRotation())) as GameObject;
             if(!m_audioSource.isPlaying) {
                 m_audioSource.Play();
             }
         } else {
             m_fireTimer += Time.smoothDeltaTime;
         }
     }

     //获取旋转角度
     Vector3 GetRotation() {
         //视角从Y轴向下看,x轴不变,y轴为z轴.旋转起点为屏幕中央,旋转终点为鼠标在屏幕中的位置
         m_rotateFrom = ,Screen.height * 0.5f);
         m_rotateTo = Input.mousePosition;
         m_rotateTo.z = m_rotateTo.y;
         m_rotateTo.y = ;

         //获得旋转方向
         Vector3 rotateDirection = m_rotateTo - m_rotateFrom;
         return rotateDirection;
     }
 }

Game2_Player

 using UnityEngine;
 using System.Collections;

 public class Game2_Enemy : MonoBehaviour {

     public float m_moveSpeed = 5.0f;    //移动速度

     private Transform m_playerTransform;    //玩家的位置
     private Rigidbody m_rigidBody;

     ;   //血量

     void Start () {
         m_playerTransform = GameObject.Find("Player").transform;
         m_rigidBody = GetComponent<Rigidbody>();

     }

     void Update () {
         if(Vector3.Distance(m_playerTransform.position,transform.position) > 1.0f) {
             Chase();
         } else {
             //m_rigidBody.Sleep();
         }
     }

     void OnDrawGizmos() {
         Gizmos.color = Color.red;
         Gizmos.DrawLine(transform.position,transform.position + transform.forward);
     }

     //追逐玩家
     void Chase() {
         transform.rotation = Quaternion.LookRotation(m_playerTransform.position - transform.position);
         transform.Translate(Vector3.forward * m_moveSpeed * Time.smoothDeltaTime);
     }

     //被打中
     public void OnHit(int damage) {
         ) {
             m_hp -= ;
         } else {
             Destroy(gameObject);
         }
     }

 }

Game2_Enemy

 using UnityEngine;
 using System.Collections;

 public class Game2_EnemySpawner : MonoBehaviour {

     public GameObject m_enemyPrefab;    //敌人预制
     public float m_spawnTime = 10.0f;   //生成敌人时间间隔
     private float m_startTime;  //初始时间

     void Start() {
         m_startTime = Time.time;
     }

     void Update() {
         if(Time.time - m_startTime >= m_spawnTime) {
             Spawn();
             m_startTime = Time.time;
         }
     }

     void OnDrawGizmos() {
         Gizmos.color = Color.green;
         Gizmos.DrawSphere(transform.position,0.2f);
     }

     //每10秒生成一次敌人
     void Spawn() {
         Instantiate(m_enemyPrefab,transform.position,Quaternion.identity);
     }

 }

Game2_EnemySpawner

 using UnityEngine;
 using System.Collections;

 public class Game2_Bullet : MonoBehaviour {

     public float m_moveSpeed = 30.0f;   //移动速度

     void Start () {
         StartCoroutine(Destroy());
     }

     void Update () {
         Move();
     }

     //子弹碰到敌人,减血
     void OnCollisionEnter(Collision collision) {
         if(collision.collider.CompareTag("Enemy")) {
             collision.gameObject.GetComponent<Game2_Enemy>().OnHit();
             Destroy(gameObject);
         }
     }

     //移动子弹
     void Move() {
         transform.Translate(Vector3.forward * m_moveSpeed * Time.smoothDeltaTime);
     }

     //删除子弹
     IEnumerator Destroy(float delayTime) {
         yield return new WaitForSeconds(delayTime);
         Destroy(gameObject);
     }
 }

Game2_Bullet

项目:https://pan.baidu.com/s/1o7UqEPs

Android Game Examples的更多相关文章

  1. Android添加代码检查权限

    1,首先创建一个项目,然后创建一个类,hello.java public class hello { public static final String PERMISSION_SAY_HELLO = ...

  2. [转载]Android开发必备的21个免费资源和工具

    转载自: http://blog.csdn.net/shimiso/article/details/6788375 Android移动开发平台现在不是一个“火”字能形容的,今年Android平台在市场 ...

  3. [Artoolkit] ARToolKit's SDK Structure on Android

    Most applications on Android are developed in Java, and Android provides a rich framework of classes ...

  4. Android Volley 库的使用

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库的使用 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 Ht ...

  5. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  6. COSC2309/2347 Semester 1, 2019

    Mobile Application DevelopmentCOSC2309/2347 Semester 1, 2019Movie Night PlannerAssignment 1 (20 mark ...

  7. FGX Native library功能介绍

    Hot news from the fields of the cross-platform library "FGX Native" development. New Engli ...

  8. [转]Java Code Examples for android.util.JsonReader

    [转]Java Code Examples for android.util.JsonReader The following are top voted examples for showing h ...

  9. bazel build //tensorflow/examples/android:tensorflow_demo报错: fatal error: 'cuda_runtime.h' file not found

    In file included from ./third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:external/eigen_archive/u ...

随机推荐

  1. 机器学习实战kNN之手写识别

    kNN算法算是机器学习入门级绝佳的素材.书上是这样诠释的:“存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都有标签,即我们知道样本集中每一条数据与所属分类的对应关系.输入没有标签的新数据 ...

  2. 把python文件编译成exe文件

    我用的是py2exe. 下载地址http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/ 你可以根绝自己的Python版本选择适当的下载 我 ...

  3. 算法线性编程珠玑读书笔记之----->使用线性算法求解连续子序列的最大和

    这段时间笔者几篇文章介绍了改算法线性的文章. 关联文章的地址 这个算法我在我的博客里应用动态规划做过,详细实现请参阅我的dp板块,下面给出书上最快的算法,时间复杂度为O(n),称之为线性算法. #in ...

  4. java中的public,protected,private权限修饰

    public和private基本没问题,主要是默认的和protected之间的区别 同一包中默认的和protected一样,所以来看看不同包的情况 看下如下代码,两个类位于不同包: public cl ...

  5. 史上最“脑残”的“抢火车票”程序(node.js版)

    [背景] 快过年了,我妈一个电话打过来叫我给他买火车票,我到12306一查,硬座和硬卧基本没有了,高铁又太贵. 最后只抢了3张无座票,但是我妈说能不能买有座位的啊,我说没有了啊,我妈:你过两天再帮我看 ...

  6. C语言之变量与常量的介绍

    一 标示符 标识符:可以理解为是变量名.名字常量表示法的常量名,但是不仅限于这两个 命名规范: 1.起名要有意义,基本要做到一看名字就知道是用来干嘛的(要求你遵守,但不会报错,希望能够养成这样的好习惯 ...

  7. 通过python为zabbix发送告警邮件

    最近部署ZABBIX的邮件告警时,用刚学的python来写告警邮件脚本. 由于时间有限,我只对关键步骤做截图,对zabbix的基本配置略过. python代码如下 1 #!/usr/bin/pytho ...

  8. 关于IO多路复用的一篇好文

    http://blog.csdn.net/baixiaoshi/article/details/48708347 http://blog.csdn.net/hguisu/article/details ...

  9. js ajax 调试

    谷歌浏览器 F12->network->()请求ajax)->出现ajax调用的方法名-->点击查看网站请求地址--返回所有的数据(preview面板中) success返回后 ...

  10. Ubuntu 16.04 Django安装和配置

    之前有安装和配置过,换了台电脑,再安装和配置,忽然发现差不多都忘记了,这里记录下已备之后查阅. sudo apt-get install python-pip sudo apt-get install ...