unity3d学习(三)制作敌人简单AI和发射火球
2017-03-02 22:03
525 查看
制作敌人简单AI和发射火球
写在前面:- 学习课本:Unity5实战 使用c#和unity开发多平台游戏-作者:Joseph Hocking
- 内容:第三章
-unity3d学习(一)制作第一人称射击-玩家的视口和移动
-unity3d学习(二)制作第一人称射击-玩家的视口和移动
简单的敌人自动移动(AI)和死亡
第一步:创建一个新脚本 Wandering给敌人添加Wandering 脚本,并输入以下代码
using UnityEngine; using System.Collections; public class Wandering: MonoBehaviour { public float speed = 3.0f; public float obstacleRnage = 5.0f; private bool _alive;//判断用户是否存活 void Start () { _alive = true; } void Update() { if(!_alive) { return;//如果没有活着,则停止运行下面代码 } transform.Translate(0,0,speed*Time.deltaTime);//保持每帧向前移动 Ray ray = new Ray(transform.position,transform.forward);//向前面发射一条射线 RaycastHit hit; if(Physics.SphereCast(ray,0.75f,out hit)) { if(hit.distance<obstacleRnage) { float angle = Random.Range(-110,110); transform.Rotate(0,angle,0); } } } public void setAlive(alive) { _alive = alive; } }
第二步:修改ReactiveTarget脚本
... public void ReactToHit() { wanderingAI behavior = GetCompent<WanderingAI>() if(behavior) { behavior.setAlive(false); } StartCoroutine(Die()); } ...
第三步:给敌人创建预设
添加一个预设体,以便我们后面添加此物体
第四步:添加一个不可见的SceneController空对象
在SceneController中添加SceneController脚本,使当玩家击杀一个敌人,再次生成一个新的敌人
using UnityEngine; using System.Collections; public class SceneController: MonoBehaviour { [SerializeField] private GameObject enemyPrefab;//序列化预设对象 private GameObject _enemy; void Update() { if(_enemy==null) { _enemy = Instantiate(enemyPrefab) as GameObject; _enemy.transform.position = new Vector3(0,1,0); float angle = Random.Range(0,360); _enmey.transform.Rotate(0,angle,0); } } }
让敌人见到玩家发射火球
第一步:制作一个火球预设体修改WanderingAI代码,使敌人见到玩家发射一个火球
... [SerizeField] private GameObject fireballPrefab; private GameObject _fireball; ... if(physics.SphereCat(ray,0.75f,out hit)) { GameObject hitObject = hit.transform.gameObject; if(hitObject.GetComponent<PlayerCharacter>())//检测是否时玩家 { if(_fireball == null)//检测是否已经发射火球了 { _fireball = Instantiate(fireballPrefab) as GameObject; _fireball.transform.position = transform.TransformPoint(Vector3.forward*1.5f);//把相对与此物体的坐标转化为全局坐标 } } else if(hit.distance<obstacleRange) { float angle = Random,Range(-110,110); transform.Rotate(0,angle,0); } } ...
第二步:为球体的Sphere Collider组件的I上Trigger复选框勾上,并为其添加Rigidbody刚体,取消UseGravity选项。再添加Fireball脚本给火球
using UnityEngine; using System.Collections; public class Fireball : MonoBehaviour { public float speed = 10.0f; public int damage = 5; void Start () { } // Update is called once per frame void Update () { transform.Translate(0,0,speed*Time.deltaTime); } void OnTriggerEnter(Collider other) { PlayerCharacter player = other.GetComponent<PlayerCharacter>(); if (player != null) { //Debug.Log("Player hit"); player.Hurt(damage); } Destroy(this.gameObject); } }
第三步:为玩家添加PlayCharacter,来记录和计算玩家受到的伤害
using UnityEngine; using System.Collections; public class PlayerCharacter : MonoBehaviour { private int _health; void Start () { _health = 5; } public void Hurt(int damage) { _health -= damage; Debug.Log("Health:"+_health); } }
注意:很多类和方法不清楚请查看官方文档。
相关文章推荐
- Cocos3.4 横版游戏制作-《KillBear》-添加敌人+简单AI实现
- 行为树-学习笔记(3)-rain插件做简单的敌人AI(2)
- 【Unity3D】学习笔记(第1记) 敌人AI之Seek(靠近)
- 行为树-学习笔记(2)-rain插件做简单的敌人AI(1)
- unity3d学习(二)制作第一人称射击-玩家射击和添加敌人
- Unity3D 学习日记(六) 制作简单的小地图
- Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
- Unity3d制作简单拼图游戏 .
- WPF学习——制作一个简单的录入界面(1): 添加需要的控件
- WPF学习——制作一个简单的录入界面(2):用C#编程实现所有控件的功能
- unity3d简单血条的制作方法
- 实例学习SSIS(一)--制作一个简单的ETL包
- Unity3d制作简单拼图游戏
- 实例学习SSIS(一)--制作一个简单的ETL包
- unity3d简单的AI
- 一个简单的jQuery插件制作 学习过程及实例
- unity3d简单地图制作
- 一个简单的jQuery插件制作,学习过程及实例
- 学习OGRE制作简单人物行走demo(四)
- XHTML入门学习教程:简单网页制作