今天总结的东西有点多,也很重要(包括了物理,数学函数以及勾股定义的应用,不得不说Unity3D真牛)
同时也实在想不清楚今晚我是不是自己变聪明了(小小自恋下) 居然能记下这么多东西 嘿嘿
一、首先 ,有两段代码都可表示围绕一个东西旋转代码
- //定义一个旋转速度
- float trunspeed=25.0f;
1.模型自己设置好以自身为中心点,那么旋转代码如下
- //设置围绕Y轴旋转
- //gameObject.transform.Rotate(new Vector3(0,trunspeed*Time.deltaTime*Input.GetAxis("Horizontal"),0));
2.如果模型没有设置以自身为中心点 ,那么我们将如何实现自身旋转呢?
首先,创建一个Capsule对象 然后拖到要旋转物体上 记下它的坐标
然后,请看下面代码
- //设置围绕一个新的东西(new Vector3(0f,-0.7387342f,3.401296f))以Y轴(new Vector3(0f,1.0f,0f),)旋转
- gameObject.transform.RotateAround(new Vector3(0f,-0.7387342f,3.401296f),
- new Vector3(0f,1.0f,0f),
- trunspeed*Time.deltaTime*Input.GetAxis("Horizontal"));
通过上述2种方法即可实现都以自身为中心旋转啦
二、好了,接下来我将总结的是如何用代码创建一个具有钢体属性的实体对象
首先,定义3个变量
- //申明一个钢体对象
- public Rigidbody tempBasketball;
- //声明一个游戏对象
- public Transform hand;
- //继续声明一个钢体
- Rigidbody Basketball;
然后,在程序中的Start ()方法中输入如下代码
- //创建一个对象 经典代码 设置一个具有钢体对象的物体在 合适的坐标 合适的角度
- Basketball=Instantiate(tempBasketball,hand.position,hand.rotation) as Rigidbody;
- //绑定改对象到父节点上(我们这里指我们运动员的右手上)
- Basketball.transform.parent=hand;
- //初始化设置该对象不具备重力
- Basketball.rigidbody.useGravity=false;
好了,通过以上代码即可实现创建一个钢体对象,这里需要注意的是hand为一个空的GameObject 而他的实体则在 tempBasketball就有了,
所以我们只管在场景窗口中设置好这个空的GameObject 的坐标及角度就ok啦。
三、接下来我将总结的是 如何设置一个篮球具有物理特性
首先,我们来分析下这个篮球,
1.它向下掉,说明有重力,那么我们将给它加上 Component-> Phyisc->Rigidbody(钢体属性)。
2.它碰到地面就不会再向下掉了,那么我们将给它加上一个Component-> Phyisc->Sphere Collider(球形碰撞体)。
3.它碰到地面会弹跳,说明它具有弹性,那么我们将给它加上一个弹性材质
( 导入材质 Assets->Import Package-> Phyisc Materials
然后在碰撞体属性Material中选择Bouncy(弹性材质) 设置Biunciness能量减少 )
话说,万法归一 ,其他物体对象只要这样分析设置 基本完全可以设置出他们不同的物理特性了。
四、好了,通过前面代码及物理特性设置 现在总结下如何将一个篮球投出去
重点也在这里 将用到数学函数及勾股定义。
- //投出篮球脱手
- Basketball.transform.parent=null;
- //脱手后篮球具有重力特性
- Basketball.rigidbody.useGravity=true;
- //脱手后篮球以抛物线飞出去的速度
- Basketball.rigidbody.velocity=new Vector3(0f,3.1f,-6f);
上面表示我们站着不动 投出一个篮球,可是如果我们旋转角度投篮当如何呢?
- //定义选择角度
- float angles;
- //定义x,z轴的速度
- float speedX,speedZ;
- //获取旋转角度 减180表示我所设置的运动员本身就旋转了180,减掉就是准确的旋转角度
- angles=gameObject.transform.eulerAngles.y-180;
- //<font color="#ff0000"><b>x的速度=初始速度* Mathf.Tan->数学函数 ,angles*Mathf.Deg2Rad->(角度转换弧度)</b></font>
- speedX=-3.1F*Mathf.Tan(angles*Mathf.Deg2Rad);
- //<b><font color="#ff0000">x的速度=初始速度*Mathf.Cos->沟谷定义 ,angles*Mathf.Deg2Rad->(角度转换弧度)</font></b>
- speedZ=-6F/Mathf.Cos(angles*Mathf.Deg2Rad);
- //脱手后篮球以抛物线飞出去的速度
- Basketball.rigidbody.velocity=new Vector3(speedX,3.1f,speedZ);
ok,搞定运行游戏
1.可以清楚看到投出篮球抛物线的样子
2.撞击篮板反弹到篮筐(物理特性很真实吧)
3.在篮筐滚了一圈 (物理特性很真实吧)
4.进球
原文:unitymanual.com