自学Unity3D游戏开发(5)

        

(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字母。


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值