【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 ...
随机推荐
- Mysql按数字大小排序String字段
问题是这样的,当我们按由大到小的顺序排序一组数字的时候,它应该如此: 9800 8000 900 但如果是这些数字是以String类型存储的话,直接排序的结果会是这样: 9800 900 8000 当 ...
- Oracle 12C -- 清空audit记录
1.使用job清空 SQL> dbms_audit_mgmt.create_purge_job ( audit_trail_type=> DBMS_AUDIT_MGMT.AUDIT_TRA ...
- 神经网络写诗(charRNN)
https://github.com/chenyuntc/pytorch-book 基于pytorch ,许多有趣的小应用.感谢作者! 作者的代码写得非常清晰,配置方法也很明确,只需要按照提示,安装依 ...
- Java 8 – Filter a null value from a Stream
Java 8 – Filter a null value from a Stream package com.mkyong.java8; import java.util.List;import ja ...
- 用MATLAB做T检验(ttest)
t-检验: t-检验,又称student‘s t-test,可以用于比较两组数据是否来自同一分布(可以用于比较两组数据的区分度),假设了数据的正态性,并反应两组数据的方差在统计上是否有显著差异. ma ...
- 使用OkHttpClient处理json请求处理的方式
今天遇到一个问题,重构老系统时,前端传递的参数是一个json,controller层可以用@ResponseBody来接收. 因为新系统用的是spring cloud这一套,调用其他服务使用的是fei ...
- go环境变量配置 (GOROOT和GOPATH)
GOROOT就是go的安装路径在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROOT 当然, 要执行go命令和go工具, 就要配置go的 ...
- [LintCode] N-Queens
N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...
- Shiro系列(0) - 权限管理在J2EE企业级开发中的应用与实战
其实也是应大家要求,讲一下权限管理,之前有讲过,但是没有拿出来细讲,这次索性录了视频从头到尾把shiro讲一遍.后续spring security会另外找个时间也讲一下. 主要内容会包括以下 1.了解 ...
- 绑定sql server数据库的用户与登录名
服务器重装系统,重新安装上sql server,附加上以前的数据库, 然后以前是每个数据库都有一个登录用于操作该数据库,其他数据库不能操作的, 附加上数据库后该数据库安全性里的用户能看到以前建立好的用 ...