小白的Unity5之路(一)
Player移动:
public float speed = 6f;
Vector3 movement;
Rigidbody playerRididbody; void FixedUpdate () {
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Move(h, v);
Animating(h, v);
}
void Move(float h, float v) {
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
playerRididbody.MovePosition(transform.position + movement);
}
通过h和v的值判断Player是否移动
void Animating(float h, float v) {
bool walking = h != || v != ; //判断Player是否移动
anim.SetBool("IsWalking", walking);
}
Player跟随鼠标旋转:
首先建立一个面片作为地板(Floor)层,Layer也要设置成Floor.


然后删除地板的Mesh Renderer组件

int floorMask;
float camRayLength = 1000f;
同时还要获取Floor层
floorMask = LayerMask.GetMask("Floor");
//Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。
void Truing() {
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 newRotation = Quaternion.LookRotation(playerToMouse);
playerRididbody.MoveRotation(newRotation);
}
}
Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers)
|
参数 |
|
|
ray |
射线的起点和方向 |
|
hitInfo |
如果返回true,hitInfo将包含碰到器碰撞的更多信息。 |
|
distance |
射线的长度 |
|
layerMask |
只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 |
完整代码:
using UnityEngine;
using System.Collections;
public class PlayerMovement : MonoBehaviour {
public float speed = 6f;//人物移动速度
Vector3 movement;
Rigidbody playerRididbody;
Animator anim;
int floorMask;
float camRayLength = 100f;
void Awake() {
floorMask = LayerMask.GetMask("Floor");
playerRididbody = GetComponent<Rigidbody>();//获取Player身上的刚体
anim = GetComponent<Animator>();//获取动画组件
}
void Start () {
}
// Update is called once per frame
void FixedUpdate () {
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Move(h, v);
Truing();
Animating(h, v);
}
//Camera.main.ScreenPointToRay方法向某位置发射一条射线,射线与地面碰撞体产生碰撞。取得碰撞点,然后旋转Player。
void Truing() {
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 newRotation = Quaternion.LookRotation(playerToMouse);
playerRididbody.MoveRotation(newRotation);
}
}
void Move(float h, float v) {
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
playerRididbody.MovePosition(transform.position + movement);
}
void Animating(float h, float v) {
bool walking = h != || v != ; //判断Player是否移动
anim.SetBool("IsWalking", walking);
}
}
小白的Unity5之路(一)的更多相关文章
- 小白的Unity5之路(二)镜头平滑跟随角色
这次要完成Camera跟随Player移动, 首先考虑Camera的跟随目标target和平滑移动速度smothing再考虑Camera与Player的偏移量(就是Camera与Player有一个永恒 ...
- 小白的springboot之路(一)、环境搭建、第一个实例
小白的springboot之路(一).环境搭建.第一个实例 0- 前言 Spring boot + spring cloud + vue 的微服务架构技术栈,那简直是爽得不要不要的,怎么爽法,自行度娘 ...
- 小白的Python之路 day1
Python之路,Day1 - Python基础1 本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van ...
- 小白的Python之路 day1 变量
Python之路,Day1 - Python基础1 变量 变量用于存储在计算机程序中引用和操作的信息.它们还提供了一种用描述性名称标记数据的方法,这样我们的程序就能更清晰地被读者和我们自己理解.将变量 ...
- 小白学习Python之路---开发环境的搭建
本节内容 1.Python的介绍 2.发展史 3.安装Python 4.搭建开发环境 5.Hello World程序 一.Python的介绍 Python的创始人为荷兰人吉多·范罗苏姆(Guido v ...
- 小白的学习之路(hello wold!)
Hello word ! 一直想写博客,但是都拖延了,正好两天有假期就开始弄这个事情了.开始觉得写博客也没有什么,一路学习以来都是看别人的博客进行学习,也收藏了不少博客,学到了不少东西,所以我觉的博客 ...
- 小白学习python之路(一):安装python3
引言 作为一个python小白,之前学的是java,不过听说python很流行,功能很强大,可以用很少的代码实现更强的功能,因此我也是被吸引了过来,并且把我的学习经历记录下来. 当然了,要学习 ...
- Python小白的发展之路之Python基础(二)
列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1.列表.元组操作 (1)列表 列表是可变的(mutable)--可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不 ...
- Python小白的发展之路之Python基础(一)
Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...
随机推荐
- hustoj搭建--常见问题
环境: Centos6.5 apache2+PHP5+MySQL 设置apache服务器网站根路径(设置之后可通过IP访问OJ) 1. 进入目录/etc/httpd/conf下的httpd.con ...
- C#调用SQlite常见问题汇总
最近在做SQLite开发,开发环境是VS2010+ SQLite Ado.Net data Provider.这套Data Provider程序是基于System.Data.SQLite 1.0.66 ...
- The difference between a local variable and a member variable
package com.itheima_04; /* * 成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内 ...
- windows 下 openssl 生成RSA私钥公钥以及PKCS8
生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...
- 常用sql commands以及mysql问题解决日志
mysql workbench常用命令快捷键 ctrl+T ->创建新的sql query tab ctrl+shift+enter->执行当前的sql命令 https://dev.mys ...
- Python实例---FTP小程序
[更多参考] 点击下载
- Java代码实现对Azkaban的Flow进行设置定时
代码如下: public class CurlToAzkaban{ public static void scheduleExecute(String flow, String cronExpress ...
- Office Online Server 2016 部署和配置
Office Online Server 2016 部署和配置https://wenku.baidu.com/view/65faf8de846a561252d380eb6294dd88d1d23d45 ...
- 整合VIM和Graphviz,并且使用本办法实现实时预览
在编程或是整理知识的时候一直苦于没有一款可以帮助理清思路的工具. 在网上苦寻良久,终于找到了一款可心可意的小软件 —— Graphviz. 折腾了一番,终于可以凑合着用了. 现将折腾的成果记录于此以作 ...
- PetaPoco轻量级ORM框架 - Database API 手册
PetaPoco Database API #region IDisposable public void Dispose() #endregion #region Constructors publ ...