【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 ...
随机推荐
- 问题--如何快速复制Typora(Markdown)中的代码块/区块等
使用快捷键ctrl+E,选中相同格式的文字,然后快速复制即可
- tempfs 的再学习
tempfs 的再学习 背景 最近学习研究linux的内存buffer 和 cache相关的知识. 发现对linux的VFS的理解其实非常不到位. 再验证内存的使用的page caches和 drop ...
- Nginx arm编译安装
Nginx arm编译安装 背景 计划编译一套产品. 能够比较方便快捷的进行 nginx的交付. 主要思想是源码编译 不仅能够在arm上面运行 也可以在x86上面编译 考虑性能还有一些扩展性. 高效处 ...
- [转帖]HTTP2 Sampler for JMeter
https://www.cnblogs.com/a00ium/p/10462572.html 今天开发大大说能不能帮忙压一下HTTP2的链接,便去查了一下相关的东西. HTTP 2.0 的出现,相比于 ...
- [转帖]linux服务之tuned
https://www.cnblogs.com/createyuan/p/5701650.html RHEL/CentOS 在 6.3 版本以后引入了一套新的系统调优工具 tuned/tuned-ad ...
- [转帖]vm内核参数之缓存回收drop_caches
注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4 1.关于drop_caches 通常在内存不足时,我们习惯通过echo 3 > /proc/sys/vm/drop_ ...
- axios文件上传和 Content-Type类型介绍
Content-Type的作用是什么? Content-Type: 用于在请求头部指定资源的类型和字符编码. 请求头中的content-type,就是 B端发给S端的数据类型描述 . 即告诉服务器端, ...
- web端用户的输入都应该做如下限制
web端中,所有可以输入的地方.都应该做如下操作. 1=>不能够输入script关键字,如果用户输入了.进行提示.然后删除用户输入的值 (这样比较粗暴,不太友好) 2=>用户输入了含有sc ...
- docker 发布web项目到linux
一.准备工作 1.连接到Liunx的工具 MobaXterm 填好Ip 直接点ok就行 输入用户名和密码进入系统 2.已发布的.netcore网站或微服务 在要发布的项目上右键---->添加-- ...
- 跟着文档学Fabric:获取通道配置
原文在这里. 1. 获取通道配置 peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c $CH_NAME --tls - ...