简单3d RPG游戏 之 005 选择敌人
选择一个敌人,按ctrl+d,复制出3个,调整一下它们的位置,不重叠,修改Tag为Enemy,禁用EnemyAI。
创建Targetting脚本,绑定到Player玩家对象
public class Targetting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
// Use this for initialization
void Start () {
targets = new List<Transform> ();
AddAllEnemies ();
} public void AddAllEnemies(){
GameObject[] go = GameObject.FindGameObjectsWithTag ("Enemy");
foreach (GameObject enemy in go) {
targets.Add(enemy.transform);
}
} public void SelectTarget(){
selectedTarget = targets [];
} // Update is called once per frame
void Update () {
if (Input.GetKeyUp (KeyCode.Tab)) {
SelectTarget ();
}
}
}
运行查看属性如下
当按Tab时,第一个敌人被获取到SelectedTarget中
下面完善Tab键选敌人功能:
1. 假如已选敌人为null,那么选择最近敌人,并将已选敌人的材质的颜色改为红色。
2. 假如已选敌人不为null,那么按Tab将选择当前已选的下一个敌人(按距离排序),将之前选的敌人颜色改成绿色,新选的改成红色。
3. 在选择敌人完成后,调用Player的PlayerAttack组件,给它的target赋值。完整如下:
public class Targetting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
public Transform myTransform;
// Use this for initialization
void Start () {
targets = new List<Transform> ();
AddAllEnemies ();
myTransform = transform;
} public void AddAllEnemies(){
GameObject[] go = GameObject.FindGameObjectsWithTag ("Enemy");
foreach (GameObject enemy in go) {
targets.Add(enemy.transform);
}
}
//按距离排序敌人
public void SortTargetByDistance(){
targets.Sort (delegate(Transform t1, Transform t2){
return Vector3.Distance(t1.position,myTransform.position).CompareTo(Vector3.Distance(t2.position, myTransform.position));
});
}
//选择敌人
public void SelectEnemy(){
if (selectedTarget == null) {
SortTargetByDistance ();
selectedTarget = targets [];
}
else {
int index = targets.IndexOf(selectedTarget);
if(index < targets.Count - ){
index++;
}else{
index = ;
}
//删除之前选择的敌人
DeleteTarget();
selectedTarget = targets[index];
}
//已选择敌人
SelectTarget();
} private void SelectTarget(){
selectedTarget.renderer.material.color = Color.red;
//给攻击组件赋值,切换当前攻击的敌人
PlayerAttack pa = (PlayerAttack)GetComponent ("PlayerAttack");
pa.target = selectedTarget.gameObject;
} private void DeleteTarget(){
selectedTarget.renderer.material.color = Color.blue;
} // Update is called once per frame
void Update () {
if (Input.GetKeyUp (KeyCode.Tab)) {
SelectEnemy ();
}
}
}
简单3d RPG游戏 之 005 选择敌人的更多相关文章
- 简单3d RPG游戏 之 003 怪物AI
游戏中,怪物会自动的往玩家所在地点走去,那需要创建一个C#脚本EnemyAI,包含两个功能: 1. 怪物旋转自己对准玩家 2. 怪物向前移动,追逐玩家 public class EnemyAI : M ...
- 简单3d RPG游戏 之 002 生命条(二)
在游戏中,游戏人物的血条可能会因为受伤或吃血瓶而长度变化,所以需要将血条的长度单独提出来作为一个变量,方便直接修改数值. public float healthBarLength; 改变生命值函数如下 ...
- 简单3d RPG游戏 之 004 攻击(一)
功能:实现点击键盘F键,怪物血量条减少,并且假定是近战,需要对距离进行判断,距离小于一定值的时候按F才会减少怪物的血条. 新建c#脚本PlayerAttack,绑定到Player,并在unity里将敌 ...
- 简单3d RPG游戏 之 001 生命条(一)
1.创建一个新项目,引用如下的包: 2.将asset里的First Person Controller拖入project作为游戏角色,将其命名为Player,将mainCamera删除,这样就是用Pl ...
- 简单3d RPG游戏 之 004 攻击(二)
人物和怪物的攻击都有CD冷却,在PlayerAttack脚本中添加成员 //冷却倒计时 public float attackTimer; //CD冷却时间 public float coolDown ...
- 使用HTML5制作简单的RPG游戏
很久以前就想着做一个游戏,但什么都不会又不知道从哪里开始,胡乱找来一些书籍和资料结果太深奥看不懂,无奈只能放弃.这一弃就是十多年,倥偬半生,眼看垂垂老矣,还是没能有什么成果. 近年来游戏引擎越来越多, ...
- RPG游戏中如何判断敌人是否在玩家的攻击范围之内
// 方式1:通过主角和场景中的所有敌人比较 private void AtkCondition1(float _range,float _angle) { // 搜索所有敌人列表(在动态创建敌人时生 ...
- Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统
Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统 作者: 深蓝色右手 来源: 博客园 发布时间: 2011-04-19 11:18 阅读: 1282 次 推荐: 0 ...
- 用webgl打造自己的3D迷宫游戏
用webgl打造自己的3D迷宫游戏 2016/09/19 · JavaScript · WebGL 原文出处: AlloyTeam 背景:前段时间自己居然迷路了,有感而发就想到写一个可以让人迷路 ...
随机推荐
- hdu 4251 划分树
思路:裸的划分树 #include<iostream> #include<algorithm> #include<cstdio> #include<cmath ...
- iOS用AVAudioPlayer播放m4a音频
音频文件sound.m4a放到Supporting Files目录 引用头文件 #import <AVFoundation/AVFoundation.h> 定义一个全局的属性: @prop ...
- hihocoder 1237 Farthest Point
#1237 : Farthest Point 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional pla ...
- Spring(3.2.3) - Beans(4): p-namespace & c-namespace
p 命名空间 p 命名空间允许你使用 bean 元素的属性而不是 <property/>子元素来描述 Bean 实例的属性值.从 Spring2.0 开始,Spring 支持基于 XML ...
- Linux 命令 - arp: 操作系统的 ARP 缓存
arp 命令可以查看 ARP 缓存或者手动添加.删除缓存中的条目. 命令格式 arp [-evn] [-H type] [-i if] -a [hostname] arp [-v] [-i if] - ...
- 如何将 select top 4 id from table1 赋值 给 declare @id1 int,@id2 int,@id3 int,@id4 int
declare @id1 int,@id2 int,@id3 int,@id4 int ),) select @sickcode = sickcode,@sfrq =sfrq from tablena ...
- javascript对象初读
<script type="text/javascript"> function baseClass() { this.showMsg = function() { a ...
- 问题解决:引入com.sun.management.OperatingSystemMXBean 出错
不能import com.sun.management.OperatingSystemMXBean 解决: Eclipse默认把这些受访问限制的API设成了ERROR.只要把Windows-Pref ...
- 使用DNSSCrypt解决DNS污染问题
本文转自 月光博客,如有需要,请阅读原文. google近期在国内是不能访问了,dropbox这货居然也被DNS污染了,幸好发现DNSCrypt这一神器,防止DNS污染的绝佳工具. 基本原理:DNSC ...
- lex&yacc3
YACC yacc $$ translate relation ================================================================== ...