zoukankan      html  css  js  c++  java
  • [Unity3D]简单的物体运动和外力作用

    下面简单学习一下在Unity中物体的移动。

    和上面两篇文章相同,我们先创建一个简单的场景以便测试。

    PS:场景可以建在同一个Project中,在Project面板点击场景文件进行切换即可。

    物体有:点光源一个,小方块一只。

    效果如下:

    然后将js文件拖到Hierarchy面板的立方体上实现绑定。我们现在要实现的就是让场景中的立方体延X轴移动。

    在Project中右击新建一个JS脚本Creat->Javascript

    键入代码:

    [javascript] view plaincopyprint?

    1. function Update () 
    2.     transform.Translate(Vector3(1,0,0)); 
    function Update ()
    {
    	transform.Translate(Vector3(1,0,0));
    }

    运行一下,我们可以看到,立方体嗖的一声不见了。

    甚至快的我都没看到它是怎么消失的!这样可不行。

    需要修改代码让它慢一点。

    [javascript] view plaincopyprint?

    1. function Update () 
    2.     transform.Translate(Vector3(1,0,0)*Time.deltaTime); 
    function Update ()
    {
    	transform.Translate(Vector3(1,0,0)*Time.deltaTime);
    }
    运行一下,这会它老实了,慢慢的移动了。

    这是怎么回事呢。接下来我们一步一步的将代码分解。

    transform:场景中的每一个对象都有一个transform,用来储存和控制物体的位置,旋转和缩放。

    Translate:是transform的函数,用来移动物体。它接受一个三维向量(Vector3)参数来移动。其实它还有第二个参数,就是按照自身坐标轴移动还是按照世界坐标轴移动。这里暂且不表。

    Vector3:表示3D的向量和点。3个参数分别代表了向量x,y,z。

    transform.Translate(Vector3(1,0,0));这句代码的意思就是,让被绑定的物体,也就是场景中的立方体,向x轴的方向移动1个单位.

    Time.deltaTime:是一个时间增量,我想应该是这一帧的时间。像flash中的一秒30帧,每帧多少秒之类的。在这个程序中它的值是0.016左右。原本移动一个单位,现在乘以0.016,那肯定慢了。也就是说,它的作用其实就是减慢移动的速度。

    但是仅仅这样简单的移动很难满足我们的需求,下面简单的学习一下如何给这个方块一个外力的作用。

    说白了就是,一脚把他踹出去!

    我们新建一个Scene,然后添加方块和地板形成如下场景:

    然后我们新建一个JS脚本命名为GiveForce。

    在脚本的
    start方法中添加以下代码:

    [javascript] view plaincopyprint?

    1. function Start() 
    2.     rigidbody.AddForce(Vector3(0,0,500)); 
    function Start()
    {
    	rigidbody.AddForce(Vector3(0,0,500));
    }
    然后可以运行一下看看效果,哇哦~没有反应 - -

    原来是忘了把这个脚本拖到Cube对象上。。

    拖上去之后便会看到小方块被一脚踹出去啦。

    至此,我们的简单移动和外力移动便实现了。

    下面我们来模拟一个发射炮弹的事件。

    我们先创建好子弹和坦克,然后创建一个Prefab放置在Project中,并将炮弹拖到Prefab上面。

    接下来新建一个JavaScript文件,命名为Fire,代码如下:

    [javascript] view plaincopyprint?

    1. var FirePoint:Transform; 
    2. var Bullet:Rigidbody; 
    3. function Update () { 
    4. if(Input.GetKey(KeyCode.Space)){ 
    5. var clone:Rigidbody; 
    6.         clone = Instantiate(Bullet,FirePoint.position,FirePoint.rotation); 
    7.         clone.velocity = transform.TransformDirection(Vector3.forward*100); 
    8.     } 
    var FirePoint:Transform;
    var Bullet:Rigidbody;
    
    function Update () {
    	if(Input.GetKey(KeyCode.Space)){
    		var clone:Rigidbody;
    		clone = Instantiate(Bullet,FirePoint.position,FirePoint.rotation);
    		clone.velocity = transform.TransformDirection(Vector3.forward*100);
    	}
    }

    本文转自:http://blog.csdn.net/wxg694175346/article/details/8290387

  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/dacheng/p/2977311.html
Copyright © 2011-2022 走看看