欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Roll A Ball

程序员文章站 2022-05-23 11:06:57
...

 Rolling A Ball是U3D官网入门教程的第一个 (地址戳这里),官网直接有学习视频看,作为一个入门级小demo,可以用来给熟悉一些U3D的开发操作。下面就我在入门学习的过程中遇到的问题和看法做个简单的记录吧。

代码上没什么难度,主要是一些类库不是很清楚,其次是思考方式的不同,和做网站开发的思路逻辑是不太一样的。

简单贴一些代码:

    private void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 vr3 = new Vector3(moveHorizontal,0.0f,moveVertical);
        rb.AddForce(vr3 * speed);
    }

说明一下AddForce:此时是根据用户的输入对Player对象施加一个在水平面的力,获取用户输入的方向,此处获得的moveHorizontal和moveVertical的值是在0-1之间,刚体获得力之后就会随之移动。(ps:为什么不直接更改对象的position,是为了让小球滚动起来)。

Roll A Ball

 transform.Rotate(new Vector3(15,30,45)*Time.deltaTime);

Rotate方法,让物体以一定的方向旋转起来,我觉得可以理解为给他一个这个向量方向的力让他在原地旋转(个人理解,因为我也不是很了解)

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Pick Up"))
        {
            other.gameObject.SetActive(false);
            count++;
            SetCountText();
            if (count == 12)
            {
                WinText.text = "You Win";
            }
        }
    }

这个地方是一个比较纠结的地方,即小球和立方体的碰撞,也就是Rigidbody和Collider的一些东西:  Roll A BallRoll A Ball

从刚体说起, Use Gravity这个是重力。物体是否受重力影响。Is Kinematic属性是确定刚体是否接受动力学模拟,此影响不仅包括重力感应,还包括速度、阻力、质量等的物理模拟。勾选了之后就无法对对象施加力(ps:AddForce方法就没用了),只能通过改变物体的position来进行移动。此处如果不勾选,物体会受重力作用下落,并且会穿过底部不会被底部阻挡,因为collider勾选了 Is Trigger,看到网上有人这样解释:当**此选项时,不会发生后续物理的反应。反之,发生后续的物理反应,Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。

再说Collider,就是之前说的Is Trigger选项,上方已经说过了,开关后他会调用不同方法触发。
触发信息检测:                                                                                                                            1.MonoBehaviour.OnTriggerEnter(Collider other) / MonoBehaviour.OnTriggerEnter2D(Collider2D other)当进入触发器
2.MonoBehaviour.OnTriggerExit(Collider other) / MonoBehaviour.OnTriggerExit2D(Collider2D other)当退出触发器
3.MonoBehaviour.OnTriggerStay(Collider other) / MonoBehaviour.OnTriggerStay2D(Collider2D other)当逗留触发器
碰撞信息检测:
1.MonoBehaviour.OnCollisionEnter(Collision collisionInfo)  / MonoBehaviour.OnCollisionEnter2D(Collision2D collisionInfo)当进入碰撞器
2.MonoBehaviour.OnCollisionExit(Collision collisionInfo)  / MonoBehaviour.OnCollisionExit2D(Collision2D collisionInfo)当退出碰撞器
3.MonoBehaviour.OnCollisionStay(Collision collisionInfo) / MonoBehaviour.OnCollisionStay2D(Collision2D collisionInfo) 当逗留碰撞器

然后就是MainCamera的问题了 这里需要让MainCamera跟随Player运动,在Start里计算两者的向量差,然后在LateUpdate里更新position。(测试在FixedUpdate和Update里调用效果一样,教程里为什么要在LateUpdate调用不是很清楚)。

基本就是这些东西了 ,现在还在学习阶段,有很多东西不是很清楚,同时希望自己可以把文章这个事情坚持下来。

相关标签: Unity3D