该案例中:(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. Android Training - Volley(Lesson 0 - 序言)

    写在http://hukai.me/blog/android-training-volley-index/

  2. Difference between End-to-end testing and System testing

    www.guru99.com/end-to-end-testing.html

  3. 【微信小程序】获取轮播图当前图片下标、滑动展示对应的位数、点击位数展示对应图片

    业务需求: 3个图片轮番播放,可以左右滑动,点击指示点可以切换图片  index.wxml: 这里使用小程序提供的<swiper>组件autoplay:自动播放interval:自动切换时 ...

  4. Mysql 中 HAVING 和 USING 的使用

    1. HAVING 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 实例:现表Orders(订单)有如下字段: Id,Date,Price ,Customer ...

  5. Ubuntu 18.04修改IP地址

    注:配置/etc/network/interfaces已无用 root@ubuntu:~# vim /etc/netplan/50-cloud-init.yaml network: ethernets ...

  6. msdn List sort排序 IComparable 用法

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  7. input text 去掉标签下拉提示autocomplete

    autocomplete 属性 autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在 ...

  8. 顶部有一排按钮,最底下还有FooterView的ListView页面

    Android 先上效果图: 下面详细说说这个页面是怎么做出来的: 1.这个页面最下方可以看到一个TAB页签,分别是“主页”.“提及”等等,这个是一个在底部的TAB分页样式,在上一篇博客中已经介绍了 ...

  9. CentOS — MySQL备份 Shell 脚本

    原文链接:http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html 新建一个 Shell 脚本文件 vi /home/wo ...

  10. Mac / Windows 下的 FTP 工具filezilla

    https://filezilla-project.org/download.php?platform=osx