Unity3D 第三人称的游戏角色的单选和移动

      个人比较喜欢制作策略类的第三人称游戏,可以召唤怪物,不知道大家喜不喜欢!如果喜欢的话就支持我一下吧!当然,如果你有一些好的功能和想法,可以一起讨论研究!欢迎大家来这里做客!

        所以今天来分享一下最近做的项目中的,游戏角色的单选和移动! 我用的是Unity3D中的自动寻路<NavMeshAgent>组件来实现的,下面是游戏角色的组件,要看仔细哦!

          首先在游戏对象的下面添加一个2D -> Sprite 的精灵图片(图片可以自行添加) 的子对象叫ColorBG 作为一个选中的标记

           下面动画系统Animator的截图

                好了,下面就是代码部分了
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;
using UnityEngine.UI;
/// <summary>
/// 功能: 游戏对象的单选和移动
/// 创建者: VioletTD
/// 修改时间: 2015年11月3日 22:50
/// 感谢: Me加油!
/// </summary>
public class RabbitController : Singleton<RabbitController>{
	public bool didSelectPlayer;//是否被选中
	private GameObject colorBG;//精灵图片的游戏对象,下面使用GameObject.Find("ColorBG") 找到并实例化
	private Animator animator;//用于获取到游戏对象本身的动画系统
	private RaycastHit hit;//射线的命中点
	private Vector3 targetPos;//用于记录玩家的移动到的(寻路组件)的目标点
	void Awake () {
		animator = GetComponent<Animator>();//获取游戏对象的动画系统
		didSelectPlayer = false;//初始化是否被选中 为假    游戏对象没有被选中
		colorBG.SetActive (false);//初始化精灵图片的标示为 没有被选中
		targetPos = Vector3.zero;//初始化玩家移动的目标点为  Vector3(0,0,0)
		GetComponent<NavMeshAgent>().speed = 0.2f;//寻路组件的游戏对象的移动速度为0.2f
	}
	void Update () {
		PlayerMoveMethod ();//在Update中调用游戏对象移动的方法
	}
	#region PlayerMoveMethod()
	void PlayerMoveMethod()//游戏对象的移动放
	{
		if(Input.GetMouseButtonDown (1))//如果点击鼠标的右键
		{
			if(didSelectPlayer)//如果游戏对象被选中
			{
				Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);//创建从摄像机发射到鼠标的摄像
				if(Physics.Raycast (ray,out hit))//物理静态类的射线投射方法
				{
					if (hit.collider.CompareTag ("Ground")) //如果射线命中的为地面
					{
						targetPos = hit.point;//把射线命中的地面的点赋值给 游戏对象移动的目标点
						GetComponent<NavMeshAgent>().SetDestination (targetPos);//设置寻路组件的目的地为  游戏对象移动的目标点
						transform.LookAt (targetPos);//游戏对象看向该点
						animator.SetFloat ("Walk",0.2f);//设置Float类型的"Walk"  值为0.2f  大于0.1就会播放行走的动画
					}
				}
			 }
		}
		if(Input.GetMouseButtonDown (0) && didSelectPlayer)//如果游戏对象在选中状态下     再次点击鼠标左键   设置游戏对象为未选中状态
		{
			didSelectPlayer = false;//设置为false
			colorBG.SetActive (false);//标记背景为不显示
		}
		if(!didSelectPlayer)//如果玩家在没有选中的状态 就会停止移动
		{
			GetComponent<NavMeshAgent>().SetDestination (transform.position);//设置寻路组件的目的地为本身
			animator.SetFloat ("Walk",0f);// Float类型的"Walk"  值为0  小于0.1就会停止播放行走动画
		}
	}
	#endregion
	void OnMouseUpAsButton()//如果鼠标点击并抬起
	{
		didSelectPlayer = true;//设置选中为True
		colorBG.SetActive (true);//脚下的圆圈为True  显示
	}
}

 
谢谢大家的支持!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值