向量在游戏开发中的应用(一)

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


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



具体实现代码如下:
[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using UnityEngine;
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使用的的开发工具是.0.1f1和VS2013,建议下载源码后用Unity5.0.1f1或者更高的版本打开。源码地址:http://download.csdn.net/detail/wenxin2011/9453669


同系列文章
「Unity游戏开发」向量在游戏开发中的应用(一)
「Unity游戏开发」向量在游戏开发中的应用(二)
「Unity游戏开发」向量在游戏开发中的应用(三)

我所有的技术分享文章均首发于我的个人博客: https://davidsheh.github.io
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值