【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 ...
随机推荐
- 存储器(Memory)
存储器(Memory) 通信领域中有很多重要的部分,比如基带.射频芯片,存储器. 1.存储器是什么?和内存如何进行区分? 作为数据的载体,存储器是任何电子设备中都必不可少的单元.由于存储器之间相似的名 ...
- CAP-BASE
- lightning 导入数据库表的操作步骤
lightning 导入数据库表的操作步骤 TiDB数据库备份恢复的方式与方法 1. mysqldumper 以及 mysql 导入 2. select into outfile 以及 load da ...
- [转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法
一.现象 出现这种错误都发生在SQL语句建表时,错误提示: "警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060).如果结果行长度超过 806 ...
- [转帖]PowerShell教程 - 日期时间管理(Date & Time Management)
https://www.cnblogs.com/cqpanda/p/16589991.html 更新记录转载请注明出处.2022年8月25日 发布.2022年8月18日 从笔记迁移到博客. 日期时间管 ...
- 从一次CPU打满到ReDos攻击和防范
作者:京东物流 刘海茂 近期碰到一起值班报警事件,web 应用服务器 CPU 消耗打到 99%,排查后发现是因为 ReDoS 导致了服务器发生了资源被耗尽.访问系统缓慢的问题,通过排查过程从而分享下 ...
- 【构造,树】【Loj】Loj6669 Nauuo and Binary Tree
2023.7.3 Problem Link 交互库有一棵 \(n\) 个点的二叉树,你每次可以询问两个点之间的距离,猜出这棵二叉树.\(n\le 3000\),询问次数上限 \(30000\). 首先 ...
- Redis极简教程
简介 Redis 是用C语言开发完全开源免费的,遵守BSD协议的,一个高性能的,key-value型的,NOSQL数据库. 特点 可以将内存中的数据持久化到硬盘中,重启的时候可以从硬盘中再次加载 拥有 ...
- 分布式事务和Spanner分布式数据库
一.分布式事务 首先事务可以这么理解:程序员有一些不同的操作,或许针对数据库不同的记录,他们希望所有这些操作作为一个整体,不会因为失败而被分割,也不会被其他活动看到中间状态.事务处理系统要求程序员对这 ...
- 【JS 逆向百例】某易支付密码 MD5+AES 加密分析
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...