【Unity3D】人物跟随鼠标位置
1 游戏对象
2D动画和人体模型及动画中介绍了 Aniamtion、Animator、人体模型、人体骨骼、人体动画等基础知识,本文将通过 “人物跟随鼠标位置” 案例加强对 Unity3D 动画的理解。
1)游戏界面

2)游戏对象

由于 Unity3D 官方人体模型(Ethan)皮肤是黑白的,不太美观,笔者使用了其他人体模型,资源见→Unity3D人物模型资源集合。
2 动画控制器
1)创建动画控制器
在 Assets 窗口右键,依次选择【Create→AnimatorController】,创建动画控制器,并重命名为 AnimatorController。
选中 Girl 对象,将 AnimatorController 拖拽到其 Animator 组件中,如下:

2)构建动画状态机
双击 AnimatorController 文件,打开 Animator 窗口。将 Unity3D 官方人体动画中 HumanoidIdle 和 HumanoidRun 2 个动画拖拽到 Animator 窗口。(在 Assets 窗口右键,依次选择【Import Package→Environment】导入资源库)。

在动画状态 HumanoidIdle 上右键,弹出小窗口,选择 “Make Transition”,再左键单击动画状态 HumanoidRun ,就会创建一个从HumanoidIdle 指向 HumanoidRun 的连接线。用同样方法创建 HumanoidRun 指向 HumanoidIdle 的连接线。

3)设置动画状态转换条件
在 Animator 窗口依次选择【Parameters→ + → Int】,创建名为 Status 的变量,如下:

选中 HumanoidIdle 指向 HumanoidRun 的连接线,在 Inspector 窗口单击 “+” 号,添加上文创建的 “Status” 变量,将条件修改为 Equals,取值修改为 1,不勾选 “Has Exit Time” 选项(允许 HumanoidIdle 动画被打断,当条件满足时,直接进入 HumanoidRun 动画)。

使用同样的方法,给 HumanoidRun 指向 HumanoidIdle 的连接线添加状态转换条件,如下:

3 脚本组件
ActionController.cs
using UnityEngine;
public class ActionController : MonoBehaviour {
private Animator animator;
private Vector3 oldPos;
private void Awake() {
animator = GetComponent<Animator>();
oldPos = transform.position;
}
private void Update() {
int status = GetAnimationState();
animator.SetInteger("Status", status);
oldPos = transform.position;
}
private int GetAnimationState() {
if (Input.GetMouseButton(0)) { // 鼠标左键单击, 向鼠标位置奔跑
Vector3 targetPos = GetTargetPos();
if (targetPos == null || GetDistance(targetPos) < 0.5f) {
transform.position = oldPos; // 原地踏步
return 1;
}
transform.LookAt(targetPos); // 转向目标位置
return 1;
}
return 0;
}
private Vector3 GetTargetPos() { // 获取目标位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo = new RaycastHit();
Physics.Raycast(ray, out hitInfo);
return hitInfo.point;
}
private float GetDistance(Vector3 targetPos) {
return Vector3.Distance(transform.position, targetPos);
}
}
说明:ActionController 脚本组件挂在 Girl 游戏对象上。
4 运行效果

声明:本文转自【Unity3D】人物跟随鼠标位置
【Unity3D】人物跟随鼠标位置的更多相关文章
- Unity3D 物体跟随鼠标旋转
float speed=1000f; void Update () { if (Input.GetMouseButton (0)) { transform.Rotate (0,-Input.GetAx ...
- 分享:Unity3D模型跟随鼠标移动功能的小脚本 (屏幕坐标和三维空间坐标转换)
using UnityEngine; using System.Collections; public class ModelsPosChange : MonoBehaviour { RaycastH ...
- Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现
Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...
- Unity3D GUI中的图片跟随鼠标旋转脚本
var Mid : Texture2D; var mouse : Texture2D; //鼠标图片 var mousePs = Vector2.zero; //鼠标的位置 private var a ...
- 文本跟随鼠标并且显示x轴和y轴位置
一.文本跟随鼠标并且显示x轴和y轴位置 代码如下: window.onload=function(){ var mydiv = document.createElement("div&quo ...
- 【翻译】使用CSS3和jQuery制作跟随鼠标方位的Hover特效
今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果.当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑出的方向滑 ...
- canvas实现跟随鼠标旋转的箭头
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta ht ...
- jQuery背景跟随鼠标移动的网页导航
首页 PSD模板 CSS模板 特效插件 源码下载 酷站欣赏 建站资源 建站教程 心境之旅 在线留言 设为首页 加入收藏 我要投稿 联系站长 Search 首页 PSD模板 CSS模板 特效插件 ...
- 一款基于TweenMax跟随鼠标单击移动的div
今天给大家分享一款基于TweenMax跟随鼠标单击移动的div.在这款实例中你可以单击任意位置,div会移动到你单击的位置.效果图如下: 在线预览 源码下载 实现的代码. html代码: < ...
- JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习
JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习 btn.onclick = function(event) { 语句 } 其中event就是事件对象,在这个方法中指向的对象是onc ...
随机推荐
- 05-Shell索引数组变量
1.介绍 Shell 支持数组(Array),数组是若干数据的集合,其中的每一份数据都称为数组的元素. 注意Bash Shell 只支持一维数组,不支持多维数组. 2.数组的定义 2.1 语法 在 S ...
- 问题--VSCODE终端中文乱码问题
1.问题 问题如下,终端出现中文乱码问题 根本原因是VSCODE是UFT-8编码,而终端显示的中文则是GBK编码 网上很多都是改VSCODE为GBK编码,但改终端为UFT-8也挺方便 2.解决方法 1 ...
- 宝塔部署 springboot 项目遇到的 一些bug处理方案
1,上传的项目(jar包)的数据库用户名 .密码 , 和服务器的数据库用户名.密码不一致 2,数据库的表结构没有创建 3, 宝塔 phpmyadmin 进不去 原因: 服务器没有放行888端口, 宝塔 ...
- [IDEA] [SpringBoot] 项目所写的内容不能同步到编译出的文件中
错误原因: 不小心删除了 .yml 导致了,项目所写的内容不能同步到编译出的文件中,之后项目中的任何修改或添加的内容不能同步到编译出的文件中 解决方法 : 文件项目下运行mvn idea:module ...
- [转帖]一文带你了解mysql sql model的only_full_group_by模式
https://zhuanlan.zhihu.com/p/368440685 Mysql only_full_group_by与Error 1055问题分析 1 声明 本文的数据来自网络,部分代码也有 ...
- [转帖]tidb backup
https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore BACKUP 语句使用的引擎与 BR 相同,但备份过程是由 TiDB 本身驱动, ...
- [转帖]总结:shell中的if条件判断
一.if 的基本语法 if [ command ];then xxx elif [ command ];then xxx else xxx fi 二.常见的一些写法案例 1.if [ "x$ ...
- 【转帖】SRE 高延迟问题的罪魁祸首 System.gc()
https://www.infoq.cn/article/lXTRgYb9ecVBu*72fT7O jstact -gccause pid 3000 30 01 案例一: 某日,支付平台的开发人员找到 ...
- 【转帖】Linux性能优化(四)——BCC性能监控工具
一.BCC简介 1.BCC简介 BCC是一个Python库,简化了eBPF应用的开发过程,并收集了大量性能分析相关的eBPF应用.BCC为BPF开发提供了不同的前端支持,包括Python和Lua,实现 ...
- [转帖]java启动jar包设置启动参数
目录 一.代码介绍 1.代码: 二.linux命令 1.命令 三.idea本地调试 1.找到Edit Configurations 2.修改Edit Configurations 参数 3.Edit ...