自学Unity3D游戏开发(5)

xiaoxiao2021-02-28  116

        

(1)移动脚本代码

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

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

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

#pragma strict function Start () { } function Update () { } Start()函数是在场景一开始运行时开始执行,写在里面的命令只执行一次。

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

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

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

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

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

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

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

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

manyou.cs using UnityEngine; using System.Collections; public class ScreptName : MonoBehaviour { public int speed1 = 25; //水平面运动的速度 // Use this for initialization void Start () { } // Update is called once per frame void 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.cs using UnityEngine; using System.Collections; public class ScreptName : MonoBehaviour { public int speed1 = 25; //水平面运动的速度 // Use this for initialization void Start () { } // Update is called once per frame void 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字母。

到这里为止,视角的基本操作就结束了。

转载请注明原文地址: https://www.6miu.com/read-25611.html

最新回复(0)