本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102


向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只知道向量的基本知识,但对于如何将所学到的向量知识运用到实际的游戏开发中却不知所措。我计划写几篇关于向量在游戏中的应用的文章,总结一下在实际工作中所遇到过的运用向量机智处理问题的技巧。接下来要写的东西都是记录在我的云笔记中,现在计划整理一下后分享出来。
对于向量的那些基本性质我不想说太多,有兴趣的读者可以自行查阅相关文档,这里只说向量的大小和方向。不知道读者朋友曾经玩过安卓上一款比较火的跳跃游戏没有,游戏名字叫《涂鸦跳跃》,英文名为「Doodle Jump」,游戏截图如下:

在玩《涂鸦跳跃》时,不知道你有没有想过这么一个问题:从下往上跳跃会直接穿过平台,从上往下掉不会穿过平台,这是如何实现的?
关于这个问题,我的思考是:可以利用小人运动的速度的方向来判定是否启用碰撞体,速度方向向上时禁用碰撞体,速度方向向下时启用碰撞体。可能我说的这个思路读者朋友还是不明觉厉,下面我用Unity3D写了一个小Demo来帮助理解我的思路。

先上动态效果图:

具体实现代码如下:

using UnityEngine;
using System.Collections; public class PlayerController : MonoBehaviour {
public Vector3 jumpForce = new Vector3(10, 35, 0);
private Rigidbody mRigidbody;
private BoxCollider boxCollider; // 是否处于碰撞状态
private bool stayCollision = false; void Awake ()
{
this.mRigidbody = this.GetComponent<Rigidbody>();
this.boxCollider = this.GetComponent<BoxCollider>();
} void Update ()
{
// 当刚体静止时,按空格键跳跃才有效
if(mRigidbody.IsSleeping() && Input.GetKeyDown(KeyCode.Space))
{
// 给刚体施加一个力,是其运动起来
this.mRigidbody.AddForce(jumpForce);
} if(this.mRigidbody.velocity.y > 0) // 速度方向向上
{
// 这里不能重复设置isTrigger,否则IsSleeping()方法会失效
// 这里具体原因不得而知,因为被官方封装起来了,
// 但是猜测是因为刚体规定自身方法没有调用时为休眠状态
if (!this.boxCollider.isTrigger)
this.boxCollider.isTrigger = true;
}
else if (!stayCollision) // Player没有发生碰撞
{
if (this.boxCollider.isTrigger)
this.boxCollider.isTrigger = false;
}
} void OnTriggerEnter(Collider collider)
{
stayCollision = true;
} void OnTriggerExit(Collider collider)
{
stayCollision = false;
}
}
在这个小案例中,运用了速度向量的方向来判断是向上碰撞还是向下碰撞。作为《向量在游戏开发中的应用》这个小系列文章的第一篇,就用这个非常简单的小案例来开始吧。后续会更精彩,但更新时间不定。

本Demo使用的的开发工具是Unity5.0.1f1和VS2013,建议下载源码后用Unity5.0.1f1或者更高的版本打开。源码地址:http://download.csdn.net/detail/wenxin2011/9453669


声明:本文欢迎转载和分享,但是请尊重作者的劳动成果,转载分享时请注明出处:http://www.cnblogs.com/davidsheh/p/5246213.html 。同时,码字实在不易,如果你觉得笔者分享的笔记对你有点用处,请顺手点击下方的推荐,谢谢!

[Unity游戏开发]向量在游戏开发中的应用(一)的更多相关文章

  1. [Unity游戏开发]向量在游戏开发中的应用(三)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...

  2. [Unity游戏开发]向量在游戏开发中的应用(二)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50972976 在上一篇博客中讲了利用向量方向的性质来解决问题.这篇博客将继 ...

  3. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  4. 【Unity】1.0 第1章 Unity—3D游戏开发和虚拟现实应用开发的首选

    分类:Unity.C#.VS2015 创建日期:2016-03-23 一.简介 Unity是跨平台2D.3D游戏和虚拟现实高级应用程序的专业开发引擎,是由Unity Technologies公司研制的 ...

  5. Unity 2D游戏开发教程之游戏精灵的开火状态

    Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...

  6. Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)

    Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...

  7. Unity3D游戏开发——编程实现游戏管理器

    本篇简介 本篇介绍了如何将上一篇的设计模式思想运用到实际的开发过程中. 脚本文件 (1)IGameManager:这个接口存在声明了一个属性(一个拥有getter函数的变量,属性的类型是Manager ...

  8. 《游戏脚本的设计与开发》-(RPG部分)3.8 通过脚本来自由控制游戏(一)

    注意:本系列教程为长篇连载无底洞.半路杀进来的朋友,假设看不懂的话.请从第一章開始看起.文章文件夹请点击以下链接. http://blog.csdn.net/lufy_legend/article/d ...

  9. 使用Html5+C#+微信 开发移动端游戏详细教程 :(三)使用html5引擎搭建游戏框架

    教程里的案例我们是通过H5游戏引擎开发,目前H5的游戏引擎比较好用的是白鹭,不过对于新手来说白鹭的开发环境和工具使用过于复杂,这里推荐一个国内大神编写的游戏引擎:lufylegend. 直接在页面引入 ...

随机推荐

  1. T-Sql(四)表关联和视图(view)

    今天讲下T-sql中用于查询的表关联和视图,我们平时做项目的时候会遇到一些复杂的查询操作,比如有班级表,学生表,现在要查询一个学生列表,要求把学生所属班级名称也查询出来,这时候简单的select查询就 ...

  2. C# 设置word文档页面大小

    我们知道,在MS word中,默认的页面大小是letter(8.5’’x11’’),除此之外,word还提供了其他一些预定义的页面大小,如Legal (5.4’’x14’’),A3 (11.69’’x ...

  3. 如何用 js 获取table 或者其他块状标签的 宽和高

    这个比较简单,总体思想,标签标记一个id,js获取id,就能用它的属性了.介绍两种方法.请看下面代码. 第一种 <script> function width_table_all() { ...

  4. PHP中MySQL操作

    本次使用的demo是MySQL的示例数据库employees,点击下载地址,注意在导入的时候,在employees.sql文件中,将source改成你当前的目录. PHP中的demo代码可以在ideo ...

  5. jQuery方法position()与offset()区别

    参考别人写得比较明白的,红色部分为重点吧: 使用jQuery获取元素位置时,我们会使用position()或offset()方法,两个方法都返回一个包含两个属性的对象-左边距和上边距,它们两个的不同点 ...

  6. Struts2 源码分析——Result类实例

    本章简言 上一章笔者讲到关于DefaultActionInvocation类执行action的相关知识.我们清楚的知道在执行action类实例之后会相关处理返回的结果.而这章笔者将对处理结果相关的内容 ...

  7. C#创建目录,文件名过滤特殊字符串,非法字符

    string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()) ...

  8. NoSQL

    Not Only Sql,弱一致性模型,非关系型.分布式.支持水平扩展的数据库设计模式,区别于传统关系型数据库严格的事务一致性和范式约束.分布式缓存是NoSQL一种实现形式. 参考:

  9. asp.net 301重定向代码

    /// <summary> ///重定向代码 /// </summary> /// <param name="sender"></para ...

  10. [译]Godot系列教程一 - 场景与节点

    场景(Scene)与节点(Node) 简介 先设想有那么一瞬间你自己不再是一名游戏开发者了,而是一名大厨! 你的装备换成了一套大厨的制服.不要考虑制作游戏的事情,你现在的职责是为你的顾客创建新的可口的 ...