自动寻径
来源:互联网 发布:static nodes.json 编辑:程序博客网 时间:2024/06/09 23:01
今天的内容是自动寻径
一、什么是自动寻径?
点击场景上的一个位置,角色就会自动寻路。中间可能会有喝多的障碍物,角色会自动绕过障碍物,最终到达终点。
使用Unity来开发手游,自动寻路可以有很多的实现方式。
二、下面来举一个例子
实现一个功能:鼠标点击场景中的一个位置,角色自动寻路过去 角色会绕过各种复杂的障碍物,找到一个理论上的最短路径
首先 我们需要先创建一个地形后 摆多个障碍物 , 在选中地形 Navigation-->Navigation Static 所有的障碍物都需要添加Navigation Static
然后在Navigation窗口中选择Bake 就可以 看到那些地方可以通过 那些地方不可以通过。
然后创建一个人物模型 给人物添加一个NavMeshAgent组件。
然后给角色添加脚本。:
人物脚本中主要应用了射线的原理 :
首先定义一个人物对象agent :
private NavMeshAgent agent;
private Animator anim;
给对象添加组件
void Start()
{
agent=GetComponent<NavMeshAgent>();
anim= GetComponent<Animator>();
}
RaycastHit hit;//射线命中点为人物
if(Input.GetMouseButtonDown(0))
{
Ray ray=Camera.main.ScreenPointToRay(Input.mouse.position); //射线方向为摄像机指向光标位置
if(Physice.Raycast(ray.out hit))//判断射线是否发生了投射碰撞
{
agent.SetDestination(hit.point);//当碰撞时将对象移动到光标位置
}
}
将这段代码给了 对象 对象便可以自动移动到鼠标所点击的位置
让人物有走路和跑步的效果:
首先需要保证所选对象是否有动画效果,否则编译器会报错
需要用到判断语句:
if(agent.remainingDistance==0)//人物剩余的距离为0时
{
AnimatorToIdle();//人物停顿
}
else
{
AnimtorToWalk();//人物走路
}
public void AnimatorToIdle()
{
anim.SetFloat("idle",1f);
anim.SetFloat("wale",0.0f);
anim.SetFloat("run",0.0f);
}
public void AnimatorToWalk()
{
anim.SetFloat("idle",0.0f);
anim.SetFolat("run",0.0f);
anim.SetFloat("walk",1.0f);
}
将代码给人物时便可以行走
宠物跟随: 游戏中基本都有宠物
需要建立一个宠物 给宠物添加NabMeshAgent组件
给宠物写代码:
public Transform.target;//定义要跟随的人物
private NavMeshAgent agent;
void Start()
{
agent=GetComponent<NavMeshAgent>();
}
void Update()
{
if (target!=null)
{
agent.destination=taeget.position;
}
我们还可以做一个障碍物 在障碍物上添加 NAVMeshOstacle 人物便过不去了
设置有写高出可以跳下 选中要挑的位置后 点击Navigation里边Bake的 Drop Height 填写的值要大于 所在的高度
勾选 NavMeshOstacle 的 Object 的OffMeshLink Generatic/
更多精彩http://www.gopedu.com/
- 自动寻径
- Unity--自动寻径
- 自动寻径
- Unity3D 自动寻径
- 自动寻径
- 自动寻径
- 自动寻径
- 自动寻径
- Unity之自动寻径
- Unity之自动寻径
- unity之自动寻径
- unity之自动寻径
- unity学习之自动寻径
- Unity3D学习之(自动寻径)
- Unity学习之自动寻径
- Unity学习之自动寻径进阶
- 学习Unity3D之自动寻径。
- unity代码笔记<3>自动寻径
- Android环境搭建--解决SDK下载速度慢/超时
- Oracle INTERVAL DAY TO SECOND数据类型
- 启动Eclipse弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- [零基础学python]编写类之三子类
- PB函数大全
- 自动寻径
- Selectional Preferences
- Linux shell脚本编程入门 (一)
- 关于git你需要知道的
- prefixspan源码
- Oracle EBS OM处理销售挑库卡在待定事务处理和保留中
- Linux中rc的含义
- 回溯法-n后问题
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析