该案例中:(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. hibernate 启动和辅助类实现资源的重复使用

    来自API: 1.2.5.  启动和辅助类 是时候来加载和储存一些Event对象了,但首先我们得编写一些基础的代码以完成设置.我们必须启动Hibernate,此过程包括创建一个全局的SessoinFa ...

  2. 使用 Gradle 实现一套代码开发多个应用

    代码地址如下:http://www.demodashi.com/demo/11297.html 在文章 使用 Gradle 对应用进行个性化定制 中,我们能够针对一个应用的正式服.测试服.超管服等其他 ...

  3. Bootstrap-学习系列

    前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中,只有前两篇关于Bootstrap的文章发表在了博客园的首页 ...

  4. 转:maven3常用POM属性及Settings属性介绍

    原文:http://blog.csdn.net/lgm277531070/article/details/6922645 A.pom.xml属性介绍: project: pom的xml根元素. par ...

  5. Idea golang "can’t find import" 解决方法

    如题,在使用leveldb go wrapper levigo 的时候,本地安装好levigo后,通过命令行编译代码正常并能work,但在Idea中使用时出现: can't find import & ...

  6. 比较R语言、perl语言,matlab中for循环和while循环的使用

    http://zhan.renren.com/zxccshkbx?gid=3602888498030523562&from=post&checked=true

  7. js 时间毫秒

    1. "2014-08-18 00:00:00"  与 13位毫秒 互换 var oTime = { _format_13_time:function (str){ var tim ...

  8. 轻量集群管理工具PSSH

    PSSH 的意思是 Parallel SSH,并行的SSH,很好理解,PSSH 可以让一条命令在多个服务器上同时执行 这就简化了集群的管理工作,例如想查看一下各台服务器现在的负载状况,就可以通过 PS ...

  9. 双线机房双网卡双ip 路由设置

    做互联网网站,最头疼的事情之一就是电信和网通的互联互不通了,为了能够让北方网通和南方电信用户都可以快速的访问网站,解决办法就是托管 到双线机房.双线机房有两类,一类是通过BGP技术实现互联互通,服务器 ...

  10. Myeclipse10安装git 完美解决-费元星

    1. 拥有自己的github版本库 这年头,不在GitHub上弄几个项目都不好意思跟人家打招呼. 首先,进入GitHub注册账号,话说人家这页面做的那叫一个舒服啊. 然后,登陆并创建自己的版本库(Re ...