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 显示 } }
谢谢大家的支持!!!!!!!
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- 我是运营,我没有假期
- 在 Linux 中如何移动文件
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- PowerShell移动目录中指定文件的方法(非全部文件)
- 鼠标触发移动的分层菜单 层菜单moveMenu
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- php实现复制移动文件的方法
- javascript实现图片跟随鼠标移动效果的方法
- JavaScript Select和Option列表元素上下左右移动