您的位置:首页 > 移动开发 > Unity3D

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

2015-11-03 21:51 609 查看

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

        所以今天来分享一下最近做的项目中的,游戏角色的单选和移动! 我用的是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  显示
}
}



谢谢大家的支持!!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息