该案例中:(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. ES6 数值扩展

    1.Number.isNan 和 Number.isFinite Number.isNaN()用来检查一个值是否为NaN Number.isNaN(NaN) // true Number.isNaN( ...

  2. css position: relative | absolute | static | fixed详解

    static(静态):没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级. fixed(固定定位):这里所固定的参照对象是可视窗口而并非是body或是父级元素.可通过z-index ...

  3. Java 中equals和==差别

    java中的数据类型,可分为两类:  1.基本数据类型.也称原始数据类型.byte,short,char,int,long,float,double,boolean    他们之间的比較,应用双等号( ...

  4. Python之print详解

    Python之print详解 http://www.jb51.net/article/55768.htm   print的一些基本用法,在前面的讲述中也涉及一些,本讲是在复习的基础上,尽量再多点内容. ...

  5. Qt for Android 开发大坑

    Qt for Android 开发大坑 作者: qyvlik Qt 5.5.1 这里说一说比較常见的 Qt 开发安卓的大坑. 希望同学们不要做无谓的挣扎,跳过这些坑. 输入框 首当其冲的是输入框,Qt ...

  6. 使用QQ互联登录应用

    QQ登录集成插件简介 互联网应用越来越多,通常每一个应用都会要求用户注册登录,粗略估记一下,QQ,微博,微信,银行帐号.邮箱,招聘网站账户,淘宝帐号,支付宝帐号,公司OA帐号....粗略算一下,十几个 ...

  7. 产品经理PM

    首先希望大家记住的就是,千万不要以为产品经理是什么高大上的光环,产品经理其实只是一种状态,一种心态而已. 大家可能看到BAT每年都会从校园里面招聘一些产品经理,尤其是我们腾讯,声称以产品为王,每年投产 ...

  8. 设置mvc路由映射

    routes.MapRoute( "chapter", "{action}/{bookId}/{pageindex}", new { controller = ...

  9. Django中使用haystack进行全文检索时需要注意的坑

    对于haystack的配置什么的我在这里就不必说什么了,毕竟一搜一大把. 直接说重点 1 当你通过继承haystack的views来自定义django 应用的views 时,你要注意heystack ...

  10. swipeRefreshLayout与webview滑动冲突

    遇到这么个bug,webview使用swipeRefreshLayout时,下拉时事件不会被webview捕获,而是执行swipeRefreshLayout的刷新,网上一大堆一大堆的解决办法,都是什么 ...