43746人加入学习
(204人评价)
【旧版】Unity初级案例 - 愤怒的小鸟

制作完成于 2018-1-22 本教程基于 Unity 2017.2开发

价格 免费

9.DynamicKinematic;Spring Joint 2D 禁用;

[展开全文]

09-小鸟的飞出

其实就是使【Spring Joint 2D 组件】失活

 

1.获取到组件

        public SpringJoint2D sp;

在Awake()下进行获取

       private void Awake()
    {
        sp = GetComponent<SpringJoint2D>();
    }

 

2.鼠标抬起,失活

 private void OnMouseUp() //鼠标抬起
    {
            isClick = false;      
           sp.enabled = false;

        }

    }

 

3.小鸟飞出速度过快

  小鸟【Rigidbody 2D】中的【Body Type】参数改成【kinematic】

   3-1:在脚本里更改

  protected Rigidbody2D rg;

       private void Awake()
    {
        sp = GetComponent<SpringJoint2D>();

         rg = GetComponent<Rigidbody2D>();
    }

 

   3-2:鼠标按下

        private void OnMouseDown()//鼠标按下
    {
            isClick = true;

            rg.isKinematic = true;

            //Kinematic :运动
    }

 

鼠标抬起

private void OnMouseUp() //鼠标抬起
    {
      
            isClick = false;
            rg.isKinematic = false; 

           sp.enabled = false;    //粘贴到Fly()中      

    }  
 

4.小鸟飞出后的操作

 void Fly()
    {
 
        sp.enabled = false;
   
    }

4-1:让电脑零点1、2秒时间计算

需要用到【Invoke函数】

Invoke("方法名",多长时间调用)

 

 private void OnMouseUp() //鼠标抬起
    {

            isClick = false;
            rg.isKinematic = false;
            Invoke("Fly", 0.1f);     

    }
 

 

 

 

 

 

[展开全文]

Invoke(方法,时间);//延迟

[展开全文]

//小鸟飞出=鼠标松开,弹簧组件关闭

SpringJoint.enabled = false;

//小鸟飞过快=刚体Body Type->isKinematic

rigidbody2D.isKinematic = true;

[展开全文]

Onmouthdown

onmouthup

 

[展开全文]

Awake  启动时调用次函数

[展开全文]

小鸟的废除

让组件失活      鼠标抬起的时候,将组件失火。

kinematic 是否开启物理学,不会受到物理的重力影响,刚体脱离物理的重力。不受物理控制。

rigibody2d. iskinectmatic  不受物理的影响?

2d物体需要移动,但不接受力的作用,

dynamic 全套的运动属性,

kinematic 仅在非常明确的用户控制下进行移动。不受重力和作用力影响,kinematic 只能通过transfrom 影响,不会受到其他物理效果。

static 静态不懂得。 

意思是在松开之后,0.1s后开始计算弹簧给的力,之前不jin'xin

[展开全文]

Rigidbody:

Body Type  :Dynamic  

                     Kinematic :开启动力学,不受 

[展开全文]

小鸟的发出

 

private SpringJoint2D sp;

private Rigidbody2D rg;

private void Awake(){

    sp=GetComponent<SpringJoint2D >();

    rg=GetComponent<Rigidbody2D >();

}

void Fly(){

  sp.enable=false;

}

鼠标按下时开启动力学

private void OnmouseDown(){

     isClick =true;

     rg.isKinematic=true;

}

鼠标抬起时关闭动力学

private void OnmouseUp(){

     isClick =true;

     rg.isKinematic=false;

    //设置飞出的延时

  Invoke(“方法名Fly”,o.1f(时间(不要太长)))

}

//飞出

在Spring Joint2D

在Rigidbody2D 的Body Type设置成Kinematic开启动力学不受物理控制  

设置延时调用 用到 Invoke(“方法名Fly”,o.1f(时间(不要太长)))

[展开全文]

让SpringJoint2D弹簧组件失活,小鸟即可飞出

rg.isKinematic = true;//开启动力学,不受物理控制

[展开全文]

因为在拖拽小鸟的过程中,小鸟的位置是由代码中的position自定义所确定,所以该过程中应该将小鸟设置为isKinematic

[展开全文]

private SpringJoint2D sp;

private void Awake(){

sp=GetComponent<SpringJoint2D>();

}

private Rigidbody2D rg;

rg=Getcomponent<rigidbody2D>();

 

void Fly(){

 

}

[展开全文]

让小鸟飞出去就是让Spring Joint2d失活

就是在鼠标抬起之后让这个组件没有用

但是飞出去之后速度有点大

在Rigidbody 2d里面有一个Body Type

Body Type里面有一个Kinematic

Kinematic:是否开启动力学

开启之后就不会受到一些物理元素的控制了,比如不会受弹簧的那个力的影响了,这样飞出去之后速度就不会很大

所以得让Spring Joint2d失活在在Kinematic开启的后面

这时候需要一个延时函数

延时函数:Invoke("方法名",时间值)

时间值是float类型

 

Spring Joint2d里的Damping Radio

Damping Radio:阻尼系数

阻尼系数越大弹簧弹力越不明显

范围是0到1

[展开全文]

当我们想要获取 物体相应的组件

在vs stdio 中先声明一个跟组件一样的变量 

用getcomponent 去调用相应的组件

组件应该是private的访问类型

我想知道 getcomponent这个函数的

<>()中的所对应的形参

啥叫不受物理控制

应该是不受物理组件控制

 

[展开全文]

spring jonint

awake

 

FLy()

 

[展开全文]

让小鸟失活就可以飞出

awake获取SpringJiont2D组件

SpringJiont2D函数,调用设定enabled为false的时候就失活飞出

 

rigidbody type的kinematic是动力学,不进行物理计算

[展开全文]

授课教师

SIKI学院老师

课程特色

图文(1)
下载资料(1)
视频(44)