先在场景中放置一连串物体作为角色移动路线的关键点,可以把关键点的触发器Trigger拉得大一些方便角色接触到(如酷跑/赛车类项目可以把关键点的触发器做成拦截整个道路的墙面形状)。让角色从开始位置朝着第一个目标点移动,当角色碰触到第一个目标点的触发器时,更新角色朝向第二个目标点移动,依此类推。

其他实现办法:

  • 使用iTweenPath和iTweenEvent脚本
  • 目前Unity2017版本中,自带的官方案例中有AI按照路线自动运动的场景,之后继续学习看看。
private Transform[] line;   // 场景中的一个个关键点,用于组成行动路线
private int pointIndex = ; // 当前移动到了路线line上的第几个关键点
private Transform m_transform; private Vector3 HTagetPos; // 目标物体在player水平方向的坐标
private Vector3 NextPoint; // 当前路线点到下个路线点的方向
private Vector3 LookDirection; // 自身到目标的方向
private Quaternion targetlook; void Start () {
m_transform = transform;
HTagetPos= line[pointIndex].position;
HTagetPos.y = m_transform.position.y;
NextPoint= (line [pointIndex + ].position - line [pointIndex].position).normalized; // 指向下一个关键点的单位向量
} void Update() {
if (!gameManager.Pause) // 游戏是否暂停
{
moveforward();
} } // 角色向前移动
void moveforward(){
nextpoint();
LookDirection = HTagetPos - m_transform.position;
targetlook = Quaternion.LookRotation (LookDirection); m_transform.Translate (Vector3.forward * Time.deltaTime * speed); // 角色向目标点移动
m_transform.rotation = Quaternion.Slerp(m_transform.rotation, targetlook, Time.deltaTime * speed); // 角色朝向目标点
} // 额外加个判定,用来防止速度太快OnTriggerEnter不起作用的情况出现
// 或者把角色身上的Rigidbody的碰撞检测由默认离散的改为连续的(Continuous)
void nextpoint(){
if (pointIndex + < line.Length) {
if(Vector3.Dot(DirPointNext,m_transform.forward) < 0.2f){
pointIndex++;
HTagetPos= line[pointIndex].position;
HTagetPos.y = m_transform.position.y;
if (pointIndex + < line.Length)
{
NextPoint= (line[pointIndex + ].position - line[pointIndex].position).normalized; // 指向下一个关键点的单位向量
}
}
}
} // 角色碰触到关键点的触发器后,更新下一个目标点的位置
void OnTriggerEnter(Collider other){
// 到达当前路线点时,改为下个目标点
if(other.transform == line[pointIndex]){
if (pointIndex < line.Length - )
{
pointIndex++;
HTagetPos = line[pointIndex].position;
HTagetPos.y = m_transform.position.y;
if (pointIndex + < line.Length)
{
NextPoint = (line[pointIndex + ].position - line[pointIndex].position).normalized;
}
}
else
{
gameManager.Pause = true;
gameManager.gameover();
}
}
}

【Unity】角色沿路线移动/朝着目标移动的更多相关文章

  1. unity 角色换装

    unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性: 更改mesh:mesh决定了部位的物体的外形,是主要的数据. 刷新骨骼:同一个部位下,不同的mesh ...

  2. 【Unity笔记】摄像机跟随目标角色

    public class CameraFollow : MonoBehaviour { public Transform target; // The position that that camer ...

  3. Unity 角色场景传送功能

    传送触发器 using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine. ...

  4. Unity 角色复活和重新开始游戏

    作者写游戏完成的时候,还需要从新想下如何把游戏设置重新开始,角色如何复活. 一般大多数都会采用这种方式来代替游戏重新开始 Application.LoadLevel("xxx场景" ...

  5. Unity 角色移动贴墙行走

    直接贴上代码,旋转角色角度检测碰撞 Vector2 v2Normal = new Vector2(normal.x, normal.y); float fAngle = Vector2.SignedA ...

  6. Unity角色对话

    对话类------------------------------------------------------------------------------------------------- ...

  7. unity 角色旋转

    using UnityEngine; using System.Collections; public class Triangle : MonoBehaviour { public float sp ...

  8. Unity角色残影特效

    残影特效在网上有很多例子,比如这个,我参考着自己整合了一下,算是整合了一个比较完整且特别简单易用的出来,只需要一个脚本挂上去无需任何设定就能用. 这里只针对SkinnedMeshRenderer的网格 ...

  9. Unity中差乘判断目标是否在左边或右边

    使用差乘判断左右一般是比较差乘的y,小于0是左,大于0是右.特殊情况可以用其他分量来比较 默认情况: var cross = Vector3.Cross(lhsObject.transform.pos ...

随机推荐

  1. easyui-linkbutton 设置和获取text文本

    <a id="butTransagt"  href="#" class="easyui-linkbutton"  icon=" ...

  2. sqlserver 在尝试加载程序集 ID 65537 时 Microsoft .NET Framework 出错.服务器可能资源不足

    报错信息: 处理报表时出错. 对数据集“query”执行查询失败. 在尝试加载程序集 ID 65536 时 Microsoft .NET Framework 出错.服务器可能资源不足,或者不信任该程序 ...

  3. Linux中SFTP命令

    sftp和ftp是两种协议是不同的,sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动. 1.常用登陆方式: 格式:sftp <user>@< ...

  4. BIO NIO AIO 简介

    原文: https://github.com/zhongmingmao/nio_demo 简介 NIO与AIO的简单使用 基本概念 同步与异步 同步和异步是针对应用程序和内核的交互而言的:同步指的是用 ...

  5. JQuery Tree插件——zTree

    Demo:点击下载 zTree 在线操作演示:http://www.ztree.me/v3/demo.php#_101

  6. python yield的解释

    链接地址: http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html https://www.jians ...

  7. CentOS 7 安装以及配置

    http://blog.csdn.net/qzc295919009/article/details/42708653

  8. HTML框架标签的使用-&lt;frameset&gt;

    <html> <head> <title> frameset框架的使用-使用frameset框架进行布局 </title> <!-- 标签名称:f ...

  9. PCIE xilinx v5 IP核使用前的研究

    外带一个月前啃的一个星期,加本星期心无旁骛,啃出些心得,广惠后人.但愿有用. trn信号是数据链路层的信号 TLP包是数据链路层传给transaction层的包 解包需要一个transaction的协 ...

  10. Vue.js 组件编码规范

    本规范提供了一种统一的编码规范来编写 Vue.js 代码.这使得代码具有如下的特性: 其它开发者或是团队成员更容易阅读和理解. IDEs 更容易理解代码,从而提供高亮.格式化等辅助功能 更容易使用现有 ...