自学Unity3D总结:旋转、代码创建对象及物理,勾股定义

今天总结的东西有点多,也很重要(包括了物理,数学函数以及勾股定义的应用,不得不说Unity3D真牛)

同时也实在想不清楚今晚我是不是自己变聪明了(小小自恋下) 居然能记下这么多东西  嘿嘿
一、首先 ,有两段代码都可表示围绕一个东西旋转代码

  1. //定义一个旋转速度
  2. float trunspeed=25.0f;

1.模型自己设置好以自身为中心点,那么旋转代码如下

  1. //设置围绕Y轴旋转
  2. //gameObject.transform.Rotate(new Vector3(0,trunspeed*Time.deltaTime*Input.GetAxis("Horizontal"),0));

2.如果模型没有设置以自身为中心点 ,那么我们将如何实现自身旋转呢?

首先,创建一个Capsule对象 然后拖到要旋转物体上  记下它的坐标
然后,请看下面代码

  1. //设置围绕一个新的东西(new Vector3(0f,-0.7387342f,3.401296f))以Y轴(new Vector3(0f,1.0f,0f),)旋转
  2. gameObject.transform.RotateAround(new Vector3(0f,-0.7387342f,3.401296f),
  3. new Vector3(0f,1.0f,0f),
  4. trunspeed*Time.deltaTime*Input.GetAxis("Horizontal"));

通过上述2种方法即可实现都以自身为中心旋转啦

二、好了,接下来我将总结的是如何用代码创建一个具有钢体属性的实体对象

首先,定义3个变量

  1. //申明一个钢体对象
  2. public Rigidbody tempBasketball;
  3. //声明一个游戏对象
  4. public Transform hand;
  5. //继续声明一个钢体
  6. Rigidbody Basketball;

然后,在程序中的Start ()方法中输入如下代码

  1. //创建一个对象 经典代码  设置一个具有钢体对象的物体在 合适的坐标 合适的角度
  2. Basketball=Instantiate(tempBasketball,hand.position,hand.rotation) as Rigidbody;
  3. //绑定改对象到父节点上(我们这里指我们运动员的右手上)
  4. Basketball.transform.parent=hand;
  5. //初始化设置该对象不具备重力
  6. 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能量减少 )

话说,万法归一 ,其他物体对象只要这样分析设置 基本完全可以设置出他们不同的物理特性了。

四、好了,通过前面代码及物理特性设置 现在总结下如何将一个篮球投出去


重点也在这里  将用到数学函数及勾股定义。

  1. //投出篮球脱手
  2. Basketball.transform.parent=null;
  3. //脱手后篮球具有重力特性
  4. Basketball.rigidbody.useGravity=true;
  5. //脱手后篮球以抛物线飞出去的速度
  6. Basketball.rigidbody.velocity=new Vector3(0f,3.1f,-6f);

上面表示我们站着不动 投出一个篮球,可是如果我们旋转角度投篮当如何呢?

  1. //定义选择角度
  2. float angles;
  3. //定义x,z轴的速度
  4. float speedX,speedZ;
  5. //获取旋转角度  减180表示我所设置的运动员本身就旋转了180,减掉就是准确的旋转角度
  6. angles=gameObject.transform.eulerAngles.y-180;
  7. //<font color="#ff0000"><b>x的速度=初始速度*    Mathf.Tan->数学函数      ,angles*Mathf.Deg2Rad->(角度转换弧度)</b></font>
  8. speedX=-3.1F*Mathf.Tan(angles*Mathf.Deg2Rad);
  9. //<b><font color="#ff0000">x的速度=初始速度*Mathf.Cos->沟谷定义    ,angles*Mathf.Deg2Rad->(角度转换弧度)</font></b>
  10. speedZ=-6F/Mathf.Cos(angles*Mathf.Deg2Rad);
  11. //脱手后篮球以抛物线飞出去的速度
  12. Basketball.rigidbody.velocity=new Vector3(speedX,3.1f,speedZ);

ok,搞定运行游戏

1.可以清楚看到投出篮球抛物线的样子
2.撞击篮板反弹到篮筐(物理特性很真实吧)
3.在篮筐滚了一圈  (物理特性很真实吧)
4.进球

原文:unitymanual.com

你可能感兴趣的:(自学Unity3D总结:旋转、代码创建对象及物理,勾股定义)