自学Unity3D游戏开发(5)

来源:互联网 发布:汇鑫通网络支付 编辑:程序博客网 时间:2024/05/31 18:44

        

(1)移动脚本代码

        之前我们运行起来的程序只能从一个固定的角度观看,不能操控视角变换,这一部分我们写一个脚本来控制主摄像机的移动。

Unity3D常用的脚本是javascript和C#(C shape)。二者差别并不是很大,很多函数都是一样的


javascript脚本的默认内容是下面几行代码:

#pragma strictfunction Start () {}function Update () {}

Start()函数是在场景一开始运行时开始执行,写在里面的命令只执行一次。

Update()函数是每调用一帧执行一次,可以理解为可重复调用,实时调用的函数,即当程序运行时,此函数就会不断调用来改变游戏中的状态,直至游戏结束。



C#脚本比javascript脚本就要复杂一些了

using UnityEngine;using System.Collections;public class ScreptName : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
首先应该写出此脚本使用了什么“包”,using关键词后面跟包名,学过一些编程语言的同学会更了解,在C++及java语言的编程中,前面都要引用一些包。简单来说,包里包含了已经写好各类API接口和函数,方便开发人员的使用。

然后是public class 脚本名:MonoBehaviour(){}

这是一个类,所有的代码要写在这里面,而class后跟的名字是类名,类名要和脚本名一致

类里也有两个初始函数,和javascript的作用一样的,这里就不过多介绍了


小源主要根据C#脚本来讲解。

下面是实现场景漫游所需写的脚本内容。

manyou.csusing UnityEngine;using System.Collections;public class ScreptName : MonoBehaviour {        public int speed1 = 25;    //水平面运动的速度        // Use this for initializationvoid Start () {}        // Update is called once per framevoid Update () {        //此处有两种方法        //方法一float x=Input.GetAxis("Horizontal")*Time.deltaTime*speed1;         float z = Input.GetAxis ("Vertical") * Time.deltaTime * speed1;    transform.Translate (x, 0, z);                                    //三个参数分别代表x,y,z轴方向的变化        //方法二                if (Input.GetKey (KeyCode.A)) {   //if判断,当满足按下键A时,进行括号内的操作                        transform.Translate(0, 0, -speed1 * Time.deltaTime);  }  if (Input.GetKey (KeyCode.W)) {                        transform.Translate(-speed1 * Time.deltaTime, 0, 0);  }  if (Input.GetKey (KeyCode.D)) {                        transform.Translate(0, 0, speed1 * Time.deltaTime);  }  if (Input.GetKey (KeyCode.S)) {                        transform.Translate(speed1 * Time.deltaTime, 0, 0);  }}}

上面两种方法,选其一即可,相信大家能轻松猜测到各种函数的用途
值得一提的是,Horizontal和Vertical是Unity3D中Edit->Project settings->Input中规定的操作,可以在这个路径打开Input看一下。

注意一点KeyCode.A只接受大写字母,如果写成KeyCode.a是会报错的。
(2)镜头旋转及升高降低
第一部分的代码只是使摄像机前后左右移动,下面我们要用代码实现镜头的旋转和升高降低。

manyou.csusing UnityEngine;using System.Collections;public class ScreptName : MonoBehaviour {        public int speed1 = 25;    //水平面运动的速度        // Use this for initializationvoid Start () {}        // Update is called once per framevoid Update () {                //此处有两种方法                //方法一float x=Input.GetAxis("Horizontal")*Time.deltaTime*speed1;         float z = Input.GetAxis ("Vertical") * Time.deltaTime * speed1;    transform.Translate (x, 0, z);                                    //三个参数分别代表x,y,z轴方向的变化                //方法二                if (Input.GetKey (KeyCode.A)) {   //if判断,当满足按下键A时,进行括号内的操作                        transform.Translate(0, 0, -speed1 * Time.deltaTime);  }  if (Input.GetKey (KeyCode.W)) {                        transform.Translate(-speed1 * Time.deltaTime, 0, 0);  }  if (Input.GetKey (KeyCode.D)) {                        transform.Translate(0, 0, speed1 * Time.deltaTime);  }  if (Input.GetKey (KeyCode.S)) {                        transform.Translate(speed1 * Time.deltaTime, 0, 0);  }                //旋转  if (Input.GetKey (KeyCode.Q)) {  transform.Rotate (0, -speed2 * Time.deltaTime, 0, Space.Self);  }  if (Input.GetKey (KeyCode.E)) {                        transform.Rotate(0, speed2 * Time.deltaTime, 0, Space.Self);  }  if (Input.GetKey (KeyCode.Z)) {                        transform.Rotate(-speed2 * Time.deltaTime, 0, 0, Space.Self);  }  if (Input.GetKey (KeyCode.C)) {                         transform.Rotate(speed2 * Time.deltaTime, 0, 0, Space.Self);  }  //升高降低镜头  if (Input.GetKey (KeyCode.H)) {  transform.Translate (0, speed3 * Time.deltaTime, 0);  }  if (Input.GetKey (KeyCode.N)) {  transform.Translate (0, -speed3 * Time.deltaTime, 0);  }}}
左右旋转使用了Q,E字母,上下旋转使用了Z,C字母,升高降低使用了H,N字母。

到这里为止,视角的基本操作就结束了。以后还会进一步细学第一人称的脚本编写,即镜头方向跟着鼠标移动。

 
原创粉丝点击