您的位置:首页 > 移动开发 > Unity3D

unity 跑酷游戏开发笔记

2014-09-05 23:29 465 查看
   跑酷游戏制作笔记

2014.9.5

学了unity有一段时间了。想想也是要多锻炼自己的编程功夫了。开始想做rpg的游戏。不过感觉应该耗时会有点久。现在时间又有点紧,想想就还是先做跑酷的吧。之后有时间在做rpg的游戏。

跑酷类的我没有看过相关的教程什么的。所以不太清楚别人的是怎么开发的。我现在也有一些开发的思路。大神们如果看到我的有什么错误欢迎提出来。不过就不要喷我了。。我毕竟也是一个新手。就打算写点东西留着,以后在碰到相关的也可以有个资料查询下。

说了半天了。都没有一点有用的。好吧。现在开始正式进入话题!



这是我先创建的一个场景。下面的是两个cube主要我是拿cube当路了。毕竟自己不是美工。。自己做路比较费劲的。就请原谅哈。。。

好的。我这个人物是从网上下来的。网上有很多可爱的模型的。基本都可以用的。



我把创建场景带的主摄像机放到这个模型里了。也就是让这个模型当这个相机的父类。

这么做的原因是可以让这个主摄像机一直跟随角色运动。至于那些摄像机相关的脚本我还真的不太会。可能以后碰到相关的我在研究吧。

我做人物的方式和别人的有些不同。我现在也不清楚到底哪个方式好。有些人是给模型添加刚体和碰撞器之后同过rigidbody.velocity 这个给物体一个方向的力。但是我有时候用不好。之后看到一个方式。是给模型添加角色控制器(CharacterController),

我的模型下面添加的东西:

如图:



**当你给模型添加好characterController 后物体是不会受重力影响的。也就是说物体会在空中无法落到你添加的cube上的。这个时候就要开始写代码了。

我属性方面的声明上我就是以后用的什么在添加什么了。第一次打算写一个完整的游戏。思路不太清晰的。。请各位见谅

 

#region 属性

Private float speed = 3;//速度

public int TabRun ;//切换跑,冲刺,跳

   private Vector3 moveDirection = Vector3.zero;

   private int jumpSpeed = 3;//跳跃

   private float gravity = 10.0f;

private boolm_panduanjump = true;

public intdisplacement = 0;//左右位移

#endregion

Ps:#region ……#endregion这个可以把包围在内的代码缩小。看着也会整齐很多的。

  #region 对象

    public Transform m_transform; //自己的对象

    private CharacterController m_controller;//角色控制器

    private Animation m_animation;//动画组件

    

    #endregion

    #region 动画

    private string m_run = "run";//跑

    private string m_sprint ="sprint";//冲刺

    private string m_jump = "jump";//跳

    #endregion

动画这里我就先在最前面定义了。感觉这样定义好了。以后用的时候看着也会很方便的。因为感觉有时候网上下的资源,动画的名字千奇百怪。。

Void Start(){

m_transform =this.transform;// 这里先给transform赋值。听说这样会省资源

m_controller =GetComponent<CharacterController>();//获取角色控制组件

        m_animation =GetComponent<Animation>();//获取动画组件

}

下面就是这个角色脚本的最主要的了。移动脚本

#region //角色移动

    /// <summary>

    /// TabRun 是整数类型 通过这个类型的值判断是跑,冲刺还是跳。

    /// 这里还会判断左右位移

    /// </summary>

    void Move() {

        Vector3 m_forward =m_transform.TransformDirection(Vector3.forward);

        #region 判断跑,冲刺,跳

        //判断跑,冲刺,跳

        switch (TabRun) {

            case 1:

           m_animation.CrossFade(m_run);

           m_controller.SimpleMove(m_forward * speed);

            break;

            case 2:

           m_animation.CrossFade(m_sprint);

           m_controller.SimpleMove(m_forward * speed);

            break;

            case 3:

                

              

                if(m_controller.isGrounded)

                {

                    if(m_panduanjump)

                    {

                       moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical"));

                       //moveDirection = transform.TransformDirection(moveDirection);

                        //moveDirection *= speed;

                       moveDirection = m_forward * speed;

                       m_animation.CrossFade(m_jump);

                       moveDirection.y = jumpSpeed;

                        //m_controller.SimpleMove(m_forward * speed);

                       m_panduanjump = false;

                    }

                    else {

                        TabRun= 1;

                       m_panduanjump = true;

                    }

            }

             moveDirection.y-= gravity * Time.deltaTime;

            m_controller.Move(moveDirection * Time.deltaTime);

            break;

        }

        #endregion

        #region 判断左右位移

        //判断左右位移

        switch(displacement){

            case -1:

                if(displacement ==-1)

                {

                    m_transform.position=new Vector3(-0.83f,m_transform.position.y, m_transform.position.z);

                   displacement = 2;

                }

                break;

            case 0:

                if(displacement == 0) {

                    m_transform.position=new Vector3(0,m_transform.position.y,m_transform.position.z);

                   displacement = 2;

                }

                break;

            case 1:

                if(displacement == 1) {

                    m_transform.position=

newVector3(0.67f,m_transform.position.y,m_transform.position.z);

                }

                break;

        }

        #endregion

 

    }

    #endregion

第一天的做好了。明天开始做跑到的无限循环。。打算都做好了后。在看看网上的跑酷教程。看看自己有什么不足的要改进的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: