Unity2017官方案例Survival Shooter tutorial 浅析学习
来源:互联网 发布:文本相似度算法 评分 编辑:程序博客网 时间:2024/06/06 06:55
Unity2017官方案例Survival Shooter tutorial 浅析学习
- 案例里,预制体environment下地上有很多东西,然而我们不想担心后期的Ray发射到不同高度的物体上,为了使之更加简单,创建quad(设置Mask)调整位置覆盖游戏水平面,并且移除meshrender组件。meshfilter 决定模型网格;meshrenderer 渲染模型网格。
- 因为我们不想Player随着时间推移越走越慢,所以将Drag and AngularDrag 设为Infinity(无穷大)。而后视实际情况限制position和rotation ,取消重力。
- AnimationController:
- Input.GetAxisRaw 与Input.GetAxis的区别参考:http://blog.csdn.net/ye_xingren/article/details/9307553
。大致是说,GetAxisRaw停即停,走立走,没有速度渐变现象。GetAxis有速度渐变现象。 - 归一化简单说就是将整个变化范围映射到0-1之间。
Vector3.Set():设置现有的Vector3的x、y、z组件。
Vector3.Normalize()和Vector3.Normalized:Vector3.Normalize()使向量的长度为1,当归一化的,一个向量保持相同的方向,但它的长度为1.0,注意,这个函数将改变当前向量,如果你想保持当前的向量不改变,使用normalized变量。如果这个向量太小而不能被归一化,将返回零向量。变量Vector3.Normalized,返回向量的长度为1(只读)。当归一化后,向量保持同样的方向,但是长度变为1.0。注意,当前向量不能改变,而是返回一个新的归一化的向量。如果你想归一化当前向量,使用Normalize函数。如果这个向量太小而不能被归一化,一个零向量将会被返回。我们在垂直和水平方向输入1,但vector是向量,结果大于1,故归一化。 实现游戏玩家Player随鼠标位置旋转,移动等等效果(划重点):
public class PlayerMovement : MonoBehaviour{ public float speed = 6.0f; Vector3 movement;//存储玩家移动方向的矢量 Animator anim;//animator组件的引用 Rigidbody playerRigidbody; int floorMask;//一个层蒙版,以便射线能仅仅投射到Floor层的游戏物体.之所以说int类型,因为层是由1~32表示,且下方代码的GetMask是返回值是int类型的函数 float camRayLength = 100f;//从相机进入场景的射线长度 void Awake() { 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;//创建射线投射碰撞变量来存储射线碰撞信息,RaycastHit 一个结构体。 if(Physics.Raycast(camRay/*射线的起点和方向*/,out floorHit/*包含碰到器碰撞的更多信息*/,camRayLength/*射线的长度。*/,floorMask/*投射射线,选择投射的层蒙版。*/)) { Vector3 playerToMouse =floorHit.point - transform.position; playerToMouse.y=0f; Quaternion newRotation =Quaternion.LookRotation(playerToMouse); playerRigidbody.MoveRotation(newRotation); } } void Animating(float h,float v)//动画状态切换。 { bool walking = h != 0f || v != 0f;//角色要在动 anim.SetBool ("IsWalking",walking); }}
相机跟随Player移动:
public class CameraFollow : MonoBehaviour {public Transform target;//相机跟随位置public float smoothing=5f;//相机移动速度Vector3 offset;void Start () { offset = transform.position - target.position;//相机到玩家的向量}void FixedUpdate () { Vector3 targetCamPos = target.position + offset;//玩家移动的新位置加上之前的向量差 //transform.position =target.position + offset; transform .position =Vector3.Lerp(transform.position ,targetCamPos,smoothing*Time.deltaTime);//相机平滑移动到新位置。Vector3.Lerp(从a到b,t)线性差值 }/*void LateUpdate(){ transform.position =target.position + offset;}*/}
参照RollBall案例的方法也可以达到类似效果,不过该案例通过改smothing值产生跟随效果。
为Zoombunny再添加sphereCollider是为了探测是否进入能伤害player的范围。
打开window下的navigation窗口后,添加 NavMeshAgent 导航网格代理组件。该组件附加于游戏中移动角色上,允许使用导航网格在场景中进行导航,实现自动寻路。(environment的static勾选,这就意味着当我们创建导航区域,烘焙导航网格,我们所指定的东西都将包含在内成为导航空间) 。烘焙的蓝色区域是可行走区域
public class EnemyMovement : MonoBehaviour
{
Transform player;
UnityEngine.AI.NavMeshAgent nav;
void Awake ()
{
player = GameObject.FindGameObjectWithTag ("Player").transform;
nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();
}
void Update ()//nav不是物理性质的
{
nav.SetDestination (player.position);//自动寻路
}canvas的三种render mode:
1:Screen Space-Overlay:填充整个屏幕,尽管屏幕窗口变化,不需要任何的摄像机,且UI出现在所有摄像机的最前面
2:Screen Space-Camera:这种模式需要绑定一个UICamrea,可透视
3:World Space:这种模式,UI和3d对象完全一样。比如有个对话泡沫从角色嘴边冒出。RectTransform详解:http://www.jianshu.com/p/dbefa746e50d
。。。
·如果做的项目不是很大或者画面不需要太精细,建议使用quad,反之用plane。
- Unity2017官方案例Survival Shooter tutorial 浅析学习
- 学习Unity官方教程-Survival Shooter tutorialの声明
- Unity2017官方案例Roll_Ball 浅析学习
- unity2017官方案例 SpaceShooter 浅析学习
- Unity 官方案例 Survival Shooter 复刻版
- Unity学习笔记一 - Survival Shooter Tutorial
- Unity学习笔记二 - Survival Shooter Tutorial
- Unity学习笔记三 - Survival Shooter Tutorial
- Unity学习笔记四 - Survival Shooter Tutorial
- Unity学习笔记五 - Survival Shooter Tutorial
- Unity学习笔记六 - Survival Shooter Tutorial
- Unity学习笔记七 - Survival Shooter Tutorial
- Unity学习笔记八 - Survival Shooter Tutorial
- Unity学习笔记九 - Survival Shooter Tutorial
- Unity实例.003官方示例Survival Shooter Tutorial核心代码学习
- unity官方demo学习:Survival Shooter
- [初学Untiy]Survival Shooter Tutorial
- Unity3D官方教程——Survival Shooter学习记录
- 通过MR读数据,往Hbase中写数据
- JS: 重新组织 mongoDB数据库中的 数据格式的方法 / 导入导出 / 附案例代码
- Unity3D图形性能优化
- Java——This关键字
- InvocationHandler 第一个参数 proxy
- Unity2017官方案例Survival Shooter tutorial 浅析学习
- maPhpStorm2016.3激活和汉化
- Css3二维变形
- maven基础之setting.xml常用配置
- JavaScript 中滚动的无缝滚动和间歇无缝滚动实现
- Android 陀螺仪传感器简单使用
- 最小迭代学习法
- window.onload的使用
- Cookie/Session机制详解