Unity实战 RTS3D即时战略游戏开发(四)

     大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发。上一章我们添加了突出显示玩家的状态显示,这节课我们来处理一下单位被选中或取消时的效果,通用的办法是使脚本处理每个可交互的对象,但是我们不想让上百个对象每帧检测自己是否被选中,为了提高效率,我们新建 一个交互管理器。

     首先,在Scripts文件夹下新建一个Interactive脚本,接下来创建一个Interactions文件夹,并在此文件夹下创建一个Interaction脚本,并把它改成一个抽象类,我们需要很多不同的类来处理交互,这里面只需要选中和取消 两个方法 ,如图:

using UnityEngine;
using System.Collections;

public abstract class Interaction : MonoBehaviour {

	public abstract void Select(); 
	public abstract void Deselect();
}

Interactive类用于管理每个独立的对象是否被点击,它不处理鼠标点击,这是其他类负责的事情,但是他会暴露一些属性和方法,以便选中对象时别的类可以通知他,首先我要需要声明一个变量 _Selected 来判断对象是不是已经被选中,另外我们还有声明一个变量Swap,方便在编辑器中改变选中状态,另外还要声明选中和取消的方法:具体实现如下:

using UnityEngine;
using System.Collections;

public class Interactive : MonoBehaviour {

	private bool _Selected = false;   //对象是不是已经被选中,

	public bool Selected { get { return _Selected; } }

    public bool Swap = false; //方便在编辑器中改变选中状态

	public void Select()
	{
		_Selected = true;
		foreach (var selection in GetComponents<Interaction>()) {
			selection.Select();
		}
	}

	public void Deselect()
	{
		_Selected = false;
		foreach (var selection in GetComponents<Interaction>()) {
			selection.Deselect();
		}
	}

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		if (Swap) {
			Swap = false;
			if (_Selected) Deselect();
			else Select ();
		}
	}
}

    下面我们来实现一下,当选中“无人机单位”时可以高亮显示。在Scripts->Interaction文件夹下创建一个叫HighLight的脚本并编辑它,使HighLight脚本继承与Interaction而不是MonoBehaviour,并且重写父类的选中和取消的方法。在这个类中,我们要声明一个GameObject类型,它基于是否选中决定是否显示,代码如下:

using UnityEngine;
using System.Collections;

public class Highlight : Interaction {

	public GameObject DisplayItem; //被选中时,需要显示的物体

	public override void Deselect ()
	{
		DisplayItem.SetActive (false);
	}

	public override void Select ()
	{
		DisplayItem.SetActive (true);
	}

	// Use this for initialization
	void Start () {
		DisplayItem.SetActive (false);
	}
}

我们找到Prefabs文件夹下的DroneUnit  ,为它添加HighLight脚本 和Interactive脚本,并把DroneUnit的子物体Quad拖拽到HighLight脚本中的DisplayItem上,如图:


保存一下,我们运行RtsMap场景,通过控制Interactive的Swap变量,我们就有了一个简单的方式可以切换物体的高亮显示。

         好了,这一章的内容就到这里了.  项目源码:链接:http://pan.baidu.com/s/1o8lluiQ 密码:shks

欢迎大家加入QQ群:280993838  或者关注我的公众号:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值