利用OnAnimatorove函数控制人物的移动
unity中控制人物移动有很多方法,经过这么长时间的学习后,我总结了一些;
利用transform的translate方法控制人物移动;(结合动画的控制就不说了)
float mx = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;float mz = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;transform.translate(mx,0,mz);
2.利用Rigidbody组件rigidbody.MovePosition()方法进行移动(包含动画控制部分),鼠标控制人物移动;
void FixedUpdate() {float h=Input.GetAxis("Horizontal");float v=Input.GetAxis("Vertical");Move(h,v);Turning();Animating(h,v); } void Move(float h,float v) {Vector3 movement;movement.Set(h,0,v);movement=movement.normalized*speed*Time.deltaTime;rigidbody.MovePosition(transform.position+movement); } void Turning() {Ray camRay=Camera.main.ScreenPointToRay(Input.mousePosition);RayCastHit hitInfo;if(Physics.RayCast(camRay,out hitInfo,distance,floorMask)){Vector3 playerToMouse=hitInfo.point-transform.position;playerToMouse.y=0;Quaternion newRotation=Quaternion.LookRotation(playerToMouse);rigidbody.MovePosition(newRotation);} } void Animating(float h,float v) {bool walking=h!=0||v!=0;m_ator.SetBool("Walk",walking); }
3.还有一种就是利用Rigidbody的velocity属性来控制人物移动了
float moveSpeed =10;Animator m_ator;Rigidbody rigid;Vector3 m_Pos;void Start () {m_ator = transform.GetComponent<Animator>();rigid = transform.GetComponent<Rigidbody>();m_Pos = transform.position;}void Update () {float mx = Input.GetAxis("Horizontal") ;float mz = Input.GetAxis("Vertical") ;Vector3 nowVelocity = rigid.velocity;if (Mathf.Abs(mx) > 0.01f || Mathf.Abs(mz) > 0.01f){m_Pos = transform.position;transform.LookAt(m_Pos+new Vector3(mx, 0, mz));rigid.velocity = new Vector3(mx * moveSpeed, nowVelocity.y * moveSpeed, mz * moveSpeed);m_ator.SetBool("Walk",true);}else {rigid.velocity = new Vector3(0,nowVelocity.y*moveSpeed,0);m_ator.SetBool("Walk",false);}}
转载于:https://blog.51cto.com/cjboking/1784536
利用OnAnimatorove函数控制人物的移动相关推荐
- es6 中的generator函数控制流程
Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...
- ctfshow-萌新-web5( 利用位运算符控制SQL获取网站敏感信息)
ctf.show 萌新模块 we5关,这一关考察的是intval()函数转换字符串的特性和SQL注入的绕过思路,这一关过滤了单双引号,or,斜杠,加减乘除号,叹号,括号,select等关键字,推荐使用 ...
- 嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析)
嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析) 首先声明该博客是针对朱有鹏老师的嵌入式课程进行笔记的总结. 一.通过GPIO控制点亮LED( ...
- unity 官方案例之刚体控制人物移动
人物的转动控制放在Update()函数里面.人物的移动跳跃操作则放在FixedUpdate()函数 旋转 人物的旋转可以通过 鼠标或者键盘进行操作,鼠标是轴Mouse X,键盘是轴Horizontal ...
- C++关于利用_kbhit()函数持续获取键盘输入的一点心得。
#C++关于利用_kbhit()函数持续获取键盘输入的一点心得. 小白路过想写个贪吃蛇玩玩,当用链表把贪吃蛇结构连起来后自然就想到了移动控制的问题.写来写去代码总是出错,贪吃蛇只有一直按着方向键才能移 ...
- 【Mo 人工智能技术博客】利用Logistic函数和LSTM分析疫情数据
利用Logistic函数和LSTM分析疫情数据 作者:林泽龙 Mo 1. 背景 2019 新型冠状病毒 (SARS-CoV-2),曾用名 2019-nCoV,通用简称新冠病毒,是一种具有包膜的正链单股 ...
- Linux系统中利用C语言控制LED的方法
大家好, 今天主要和大家聊一聊,如何利用C语言控制LED灯的实验. 目录 第一:C语言板控制LED灯简介 第二:实验程序实现 第三:C语言实验控制程序 第一:C语言板控制LED灯简介 实际工作中 ...
- 关于以Arduino为主板,利用红外遥控器控制42步进电机同步带滑台移动
Arduino控制步进电机 Arduino控制滑台 Arduino红外遥控 红外遥控步进电机 红外遥控滑台 本案例使用物品 Arduino Mega 1838红外一体接受器 红外遥控器 200mm同步 ...
- 在Blender中使用代码控制人物模型的眼部动作 - 睁眼与闭眼
在Blender中使用代码控制人物模型的眼部动作 - 睁眼与闭眼 flyfish 眼睛eyeBlink_R闭眼的数值分别是0.0.5.1.而眼睛的纵横比与之相反,眼睛的纵横比越大,眼睛睁的越大. 眼睛 ...
最新文章
- 英特尔Nehalem微架构三级缓存原理学习
- python列表可以加可以乘
- Java常见的几种内存溢出及解决方法
- java 三级考试_java三级考试理论题
- Linux下访问光盘数据
- 总结深度学习各种网络结构【更新中...】
- 怎么查看mysql帮助文档_高效查看MySQL帮助文档的方法
- 93、App Links (应用程序链接)实例
- ASP.NET Core性能改进【转载】
- 四川省大学生计算机作品大赛,我院承办2019“新华三杯”四川省大学生计算机作品大赛并获佳绩...
- 在线医疗和教育,正在争抢未来!
- 分享一些学习资料-大量PDF电子书
- MyEclipse10破解详解过程
- xmanager5连接CENTOS6
- 第十四课 k8s源码学习和二次开发原理篇-调度器原理
- 计算机科学与技术理工英语4,2021年7月国开(中央电大)本科《理工英语4》期末考试试题及答案...
- 简单表单提交php教程,php教程之表单提交实例
- BZOJ 2277 Poi2011 Strongbox
- krap病毒家族解密方式及ao变种分析
- 数据仓库、大数据平台、数据中台的区别
热门文章
- Something needs to be forgotten.
- 计算机网络的运用在什么时候,离散时间排队系统及其在计算机网络中的应用
- pcre安装_Nginx学习_第一期_安装及安装问题解决
- 电梯为什么显示停止服务器,教你奥的斯服务器怎么看故障
- feignclient多个配置_@FeignClient同一个name使用多个配置类的解决方案
- .exp文件_exp及expdp的主要区别及常用的导入导出操作
- oracle备份保留3天,【错误更正】oracle 备份: 每天备份,全备份,保留七天。...
- 在 Ubuntu Linux 上从源代码构建 Qt 6.2.2的简短教程
- 人工智能改善客户服务体验
- 保护云端数据的5个技巧