先在场景中放置一连串物体作为角色移动路线的关键点,可以把关键点的触发器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. css浮动中避免包含元素高度为0的4种解决方法

    问题:当子元素中使用了float时,如果其父元素不指定高度,其高度将为0 解决:清除(闭合)浮动元素,使其父div高度自适应 方法一:额外标签+clear:both     (W3C推荐方法,兼容性较 ...

  2. 12C的审计模式

    1.Mixed Auditing Policy 混合审计模式支持新的审计引擎和老的审计引擎一起工作数据库升级后,已有的审计设置不会受到影响.但是官方建议迁移到统一审计模式.数据库创建后,默认是使用混合 ...

  3. 转 MySQL问题排查工具介绍

    原文链接: http://mrchenatu.com/2017/03/24/mysql-tool/ 本总结来自美团内部分享,屏蔽了内部数据与工具 知识准备 索引 索引是存储引擎用于快速找到记录的一种数 ...

  4. 怎么在eclipse中查到这个类用的是哪个jar的类和Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案

    找到了一个办法,你先按F3,然后点击Change Attached Source..按钮,在弹出的框里有个路径,我的路径是D:/SNFWorkSpace/JAR/~importu9.jar,然后你去引 ...

  5. 安装CDH5时出错 5.68.168.192.in-addr.arpa domain name pointer bogon.

    这个是因为使用的DNS是联通的server,联通会将所有保留的网络地址RFC1918( http://tools.ietf.org/html/rfc1918)都指向"bogon" ...

  6. [置顶] app后端设计--总目录

    版权声明:本文为博主原创文章,未经博主允许不得转载. 做了3年app相关的系统架构,api设计,先后在3个创业公司中工作,经历过手机网页端,Android客户端,iphone客户端,现就职于app云后 ...

  7. kail linux 系统下利用metaspolit工具渗透win7电脑

     注:只是测试,不可干违法的事. 一.metaspolit工具的介绍 1.1.metaspolit 是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇 ...

  8. 关系型数据库性能测试参考指标----SQL Server

    注:以下指标取自SQL Server自身提供的性能计数器. [@more@] SQL Server 指标名称 指标描述 指标范围 指标单位 1.SQL Server中访问方法(Access Metho ...

  9. 用友iuap云运维平台支持基于K8s的微服务架构

    什么是微服务架构? 微服务(MicroServices)架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设.微服务架构的本质,是用一些功能比较明确.业务比较精练的服务去解决更大 ...

  10. Velvet1.2.10的安装和使用

    1. Velvet的安装 Velvet用于基因组的de novo组装,支持各种原始数据,包括Illumina的short reads和454的long reads. 首先下载velvet的安装包,直接 ...