【Unity】角色沿路线移动/朝着目标移动
先在场景中放置一连串物体作为角色移动路线的关键点,可以把关键点的触发器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】角色沿路线移动/朝着目标移动的更多相关文章
- unity 角色换装
unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性: 更改mesh:mesh决定了部位的物体的外形,是主要的数据. 刷新骨骼:同一个部位下,不同的mesh ...
- 【Unity笔记】摄像机跟随目标角色
public class CameraFollow : MonoBehaviour { public Transform target; // The position that that camer ...
- Unity 角色场景传送功能
传送触发器 using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine. ...
- Unity 角色复活和重新开始游戏
作者写游戏完成的时候,还需要从新想下如何把游戏设置重新开始,角色如何复活. 一般大多数都会采用这种方式来代替游戏重新开始 Application.LoadLevel("xxx场景" ...
- Unity 角色移动贴墙行走
直接贴上代码,旋转角色角度检测碰撞 Vector2 v2Normal = new Vector2(normal.x, normal.y); float fAngle = Vector2.SignedA ...
- Unity角色对话
对话类------------------------------------------------------------------------------------------------- ...
- unity 角色旋转
using UnityEngine; using System.Collections; public class Triangle : MonoBehaviour { public float sp ...
- Unity角色残影特效
残影特效在网上有很多例子,比如这个,我参考着自己整合了一下,算是整合了一个比较完整且特别简单易用的出来,只需要一个脚本挂上去无需任何设定就能用. 这里只针对SkinnedMeshRenderer的网格 ...
- Unity中差乘判断目标是否在左边或右边
使用差乘判断左右一般是比较差乘的y,小于0是左,大于0是右.特殊情况可以用其他分量来比较 默认情况: var cross = Vector3.Cross(lhsObject.transform.pos ...
随机推荐
- golang ----map按key排序
实现map遍历有序 1. key有序 思路:对key排序,再遍历key输出value 代码如下:既可以从小到大排序,也可以从大到小排序 package main import ( "fmt& ...
- 收缩sqlserver事务日志
若要允许 DBCC SHRINKFILE 命令收缩文件,首先需要通过将数据库恢复模式设置为 SIMPLE 来截断该文件. 示例,收缩数据库abce的事务日志 USE abce; GO -- Trunc ...
- SharePoint 2013 How to Backup Site Collection Automatically With a PowerShell Script
In this post I will introduce a way how to run a script for backing up SharePoint data which could b ...
- SQL触发器 常用语句
一.创建一个简单的触发器 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT.UPDATE 或 DELETE AS T-SQL 语句 注意:触发器名称是不加引号的. ...
- C#中关于DataGridView行和列的背景色-前景色设置
关于DataGridView行和列的背景色-前景色设置 1.设定DataGridView全部单元格的Style DataGridView内所有单元格的Style变更,可以使用DataGridView ...
- [trouble shoot]atol和atoll
就终于的结果来看,事实上就是一个小的错误. 但定位错误的时间比較漫长了.. . 背景:出错的代码是 一段执行在 linux server上的程序,程序的主要功能是处理银行pos刷卡记录并做一些计算.最 ...
- css 温故而知新 字体方向 将文字竖着显示
writing-mode: vertical-rl;
- grafana 邮件报警
https://my.oschina.net/go4it/blog/830714 grafana 教程 http://download.csdn.net/detail/shuijinglei198 ...
- haproxy文章
http://ximenfeibing.blog.51cto.com/8809812/1663387
- [CTCI] 子串判断
子串判断 题目描述 现有一个小写英文字母组成的字符串s和一个包含较短小写英文字符串的数组p,请设计一个高效算法,对于p中的每一个较短字符串,判断其是否为s的子串. 给定一个string数组p和它的大小 ...