zoukankan      html  css  js  c++  java
  • [Unity游戏开发]向量在游戏开发中的应用(一)

    本文已同步发表在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 。同时,码字实在不易,如果你觉得笔者分享的笔记对你有点用处,请顺手点击下方的推荐,谢谢!

    作者:Sheh伟伟
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    python之numpy多维数组
    运用python绘图
    关于爬取babycenter.com A-Z为顺序的所有英文名及其详细属性
    Python 之列表切片的四大常用操作
    没点B树,怎么搞懂数据库索引底层原理(B+Tree)
    App弱网测试与常用模拟工具
    白盒测试理解与示例 与Jacoco
    APP弱网测试 抓包软件就能用于模拟弱网(Fiddler、Charles)
    获取系统属性值
    互联网常用架构-还需继续扩展学
  • 原文地址:https://www.cnblogs.com/davidsheh/p/5246213.html
Copyright © 2011-2022 走看看