该案例中:(PC端操作)

1.玩家移动输入控制通过虚拟轴Axis,旋转输入控制通过鼠标位置;

2.玩家始终面朝鼠标停留点,鼠标停留点通过摄像机朝地面的射线获取;

3.玩家待机移动状态切换通过Animator组件;

4.玩家移动旋转通过身上刚体组件及其相关函数。

public class PlayerMovement : MonoBehaviour
{
public float speed = 6f; //玩家移动速度 Vector3 movement; // 玩家移动临时变量
Animator anim; //玩家身上动画控制器
Rigidbody playerRigidbody; //玩家身上刚体组件
int floorMask; // 地板的Layer层
float camRayLength = 100f; // 相机射线的长度 void Awake ()
{
// 获取Floor层的值
floorMask = LayerMask.GetMask ("Floor");
// 获取玩家身上各组件
anim = GetComponent <Animator> ();
playerRigidbody = GetComponent <Rigidbody> ();
} void FixedUpdate ()
{
//每帧获取玩家输入的虚拟轴,水平垂直值
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical"); // 根据水平垂直输入量移动玩家
Move (h, v); //旋转玩家
Turning (); // 根据输入的值播放相应状态动画
Animating (h, v);
} void Move (float h, float v)
{
//根据输入的虚拟轴值设置变量
movement.Set (h, 0f, v); // 单位化位移向量并根据速度得到需要移动的向量
movement = movement.normalized * speed * Time.deltaTime; // 根据移动向量 移动玩家到相应位置
playerRigidbody.MovePosition (transform.position + movement);
} void Turning ()
{
//创建射线,摄像机指向鼠标点
Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit floorHit; //如果点到了地面
if(Physics.Raycast (camRay, out floorHit, camRayLength, floorMask))
{
// 创建 从玩家 到地面上鼠标点到的点 的向量
Vector3 playerToMouse = floorHit.point - transform.position; //确保该向量是沿着地表水平的
playerToMouse.y = 0f; // 创建玩家指向点击点的旋转值
Quaternion newRotatation = Quaternion.LookRotation (playerToMouse); //设置玩家的旋转
playerRigidbody.MoveRotation (newRotatation);
}
} void Animating (float h, float v)
{
// 获取是否有唯一的bool
bool walking = h != 0f || v != 0f; //设置对应状态机的值
anim.SetBool ("IsWalking", walking);
}
}

玩家状态机切换:

SurvivalShooter学习笔记(二.玩家移动旋转)的更多相关文章

  1. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  2. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  3. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  4. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  5. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  6. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  10. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

随机推荐

  1. 【java】对数据库操作的那些事(包含数据库中的预处理)

    一.连接问题 前面刚介绍了怎么连接数据库,也写了对应的模板.可是它的可维护性很差.那么怎么解决问题呢? 首先写一个配置文件jdbc.properties <span style="fo ...

  2. Docker、DAOCloud

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  3. windows服务器详细安全设置

    1).系统安全基本设置 1.安装说明:系统全部NTFS格式化,重新安装系统(采用原版win2003),安装杀毒软件(Mcafee),并将杀毒软件更新,安装sp2补钉,安装IIS(只安装必须的组件),安 ...

  4. 解决异常断电导致的: CorruptSSTableException: java.io.EOFException

    问题产生 服务器重启,导致cassandra损坏,整个集群不可用.所使用的cassandra为2.1.9版本. 问题描述 运行启动命令,报错如下: DEBUG :: All segments have ...

  5. rownum使用说明

    参考:http://www.blogjava.net/conans/articles/219693.html 参考:http://www.blogjava.net/freeman1984/archiv ...

  6. Xgboost 模型保存和载入()

    https://blog.csdn.net/u012884015/article/details/78653178 xgb_model.get_booster().save_model('xgb.mo ...

  7. 全栈工程师的武器——MEAN(转)

    MongoDB MongoDB也就是常说的NoSQL数据库.可以认为它是文档结构的数据库,而不是由行.列.表组成的数据库.基本的用法是存储JSON数据,这很适合JavaScript程序.它是非关系型. ...

  8. SQL操作语句之查询及删除重复记录的方法

    delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...

  9. log4j DatePattern 解惑

    og4j.appender.Root=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.Root.File=../logs/bloglog ...

  10. MapReduce编程(七) 倒排索引构建

    一.倒排索引简单介绍 倒排索引(英语:Inverted index),也常被称为反向索引.置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射. ...