Unity 3D 脚本编程与游戏开发 学习笔记

news/2024/7/7 23:46:43

学习笔记

  • 内容提要
  • Unity脚本概览
    • 控制物体移动
    • 触发器事件
  • Unity 基本概念与脚本编程
    • 物体、组件和对象
    • 创建物体
    • 实例——3D射击游戏

内容提要

全书从建立编程脚本和游戏框架为出发点,逐步阐述游戏开发中的核心概念,核心的物理系统和数学基础,然后针对游戏中的界面,动画,特效和音频以及Unity 3D中各个常用模块的使用方法进行讲解,并详细介绍了游戏开发中数据管理和资源管理。

Unity脚本概览

直接通过简单实例介绍,如何通过脚本修改物体位置,处理用户输入和检测碰撞的方法。

unity规定,能够挂在物体上的脚本文件必须是“脚本组件”(另有一种不是组件的脚本文件),脚本组件要继承自MonoBehaviour,且脚本代码中的class名称必须与文件名一致。

控制物体移动

对代码要有个基本的认识吧;然后unity的话第一次接触,那就了解一些常用的函数接口,比如这里用的Debug,Input,Translate等,简单几行代码就能实现一个基本的控制移动的效果了。重点提一下,这里的Time.deltaTime 指的是两帧之间时间间隔,这样就可以保证每秒移动的距离在不同帧率的情况下都是一样的了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveCase:MonoBehaviour
{
	//Start is called before the first frame update
	void Start()
	{
	}

	//Update is called once per frame
	void Update()
	{
		Debug.Log("Update Time:" + Time.time);
		float v = Input.GetAxis("Vertical");
		float h = Input.GetAxis("Horizontal");
		transform.Translate(h*10f*Time.deltaTime, v*10f*Time.deltaTime,0);
	}
}

触发器事件

知道了物体如何移动,下一步就得知道如何判断一个物体是否碰到另一个物体了。实际上,抛开高级游戏引擎提供的各种技术,直接判断物体之间的距离就足以实现碰撞检测,即两个物体之间的距离小于某个值,就是碰到了。现代游戏引擎给出了更统一,更简便的方法——使用触发器。触发器是一个组件,它定义了一个范围,当其他带有碰撞体组件的物体进入这个范围时,就会产生一个触发事件,脚本捕捉到这个事件的时候,就可以做出相应的处理。

产生触发事件的要求,一个是触发器(挂载collider组件,并勾选了 isTrigger),一个是碰撞体组件(挂在了collider组件,没有勾选isTrigger),同时挂载了刚体组件rigidbody,并勾选了 is kinematic;这样碰撞的基础条件就具备了。

using System.Collection;
using System.Collection.Generic;
using UnityEngine;

public class Coin: MonoBehaviour
{
	void OnTriggerEnter(Collider other)
	{
		Debug.Log(other.name);
		gameObject.SetActive(false);
	}
}

Unity 基本概念与脚本编程

用unity创建的游戏是由一个或多个场景组成的,默认Unity会打开 一个场景。

在游戏开发时,绝大部分操作都是在某一个场景中进行的,因此一开始不用太关心场景之间的关系,只需要关心在一个场景之内发生的事情。实际上,关键的概念只有GameObject(游戏物体),Component(组件)和父子关系3个。

Unity中坐标 X代表右,Y代表上,Z代表前

变换组件(Transform)
Position(位置),XYZ,所有值都是float,单位长度1米,对应多少个像素在游戏里有设置。
Rotation(朝向), 由于“旋转”这个词容易在“旋转的动作”和“已经旋转到的位置”之间混淆,因此在本书中会使用“朝向”一词,以表明它是物体目前具有的状态。

按照三维设计软件的惯例,Unity中朝向也是用三个角度来表示的,分别是绕X轴,y轴和z轴的旋转角度, 这种用3个角度表示朝向或旋转的方法叫欧拉角。

虽然Unity在编辑器面板上使用欧拉角表示朝向,但是在引擎内部是使用四元数表示朝向和旋转的。

物体、组件和对象

为避免未来的讨论产生混淆,先澄清一个基本问题:某个自己编写的脚本是一种组件类(class) ,挂载在物体上的脚本是一个实例化的组件,即一个对象(编程语言中的object)。

创建物体

利用预制体创建物体,要使用实例化方法Instantiate,创建环形排列的是个物体。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreateObj:MonoBehaviour
{
	public GameObject obj;
	void Start()
	{
		for(int i = 0; i++; i< 10)
		{
			Vector3 p = new Vector3(Mathf.Cos(i*2*Mathf.PI/10), 0, Mathf.Sin(i*2*Mathf.PI/10));
			Instantiate(obj,p,Quaternion.identity);
		}
		
	}
}

跟随主角的摄像机

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowCamera:MonoBehaviour
{
	public GameObject target;
	Vector3 dis;
	void Start()
	{
		dis = gameObject.transform.position - target.transform.position;	
	}

	void LateUpdate()
	{
		gameObject.transform.position = target.transform.position + dis;
	}
}

实例——3D射击游戏

  • 游戏总体设计

俯视角的设计游戏,玩家从侧上方俯视整个场景。


http://lihuaxi.xjx100.cn/news/1343009.html

相关文章

DES加密解密 Feistel算法网络结构 详讲

文章目录 简单知识导入&#xff1a;具体过程&#xff1a;IP置换&#xff08; 64 − > 64 64->64 64−>64&#xff09;轮函数--E扩展置换&#xff08; 32 − > 48 32->48 32−>48&#xff09;轮函数--与子密钥异或&#xff08; 48 − > 48 48->48 48−&…

软件测试要学习哪些技术才能月入15K

目录 前言 一、Linux必备知识 二、Shell脚本 三、互联网程序原理 四、Mysql数据库 五、抓包工具 六、接口测试工具 七、Web自动化测试Java&Pyhton 八、接口与手机自动化 九、敏捷测试&TestOps构建 十、性能测试&安全测试 总结&#xff1a; 前言 我一直…

【Vue】给 elementUI 中的 this.$confirm、this.$alert、 this.$prompt添加按钮的加载效果

文章目录 主要使用 beforeClose 方法实现 loading 的效果beforeClose MessageBox 关闭前的回调&#xff0c;会暂停实例的关闭 function(action, instance, done)1. action 的值为confirm, cancel或close。 2. instance 为 MessageBox 实例&#xff0c;可以通过它访问实例上的属…

【HCIA】06.静态路由

路由器的作用&#xff1a;通过路由器让不同广播域实现互联互通&#xff1b;路由可以指的是路由器&#xff0c;也可以是传递的一个动词&#xff0c;或者是一个路由条目信息。 在一个典型的数据通信网络中&#xff0c;往往存在多个不同的IP网段&#xff0c;数据在不同的IP网段之…

【调试】MNN库编译踩坑记录

简述 MNN是阿里的推理框架&#xff0c;号称很快&#xff0c;因此要编译试试。 文档地址&#xff1a; https://www.yuque.com/mnn/cn 仓库地址&#xff1a; https://github.com/alibaba/MNN 中文文档和英文文档有些许不同&#xff0c;本文按照中文文档进行编译。 编译主库 环…

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

Coremail亮相2023操作系统产业大会,荣获行业开拓奖

近日&#xff0c;由中国电子信息产业集团有限公司主办、麒麟软件有限公司承办的“麒麟遨天 聚创未来”2023操作系统产业大会在北京隆重举行。 Coremail作为邮件安全解决方案提供商受邀参加本次大会&#xff0c;荣获“2023优秀生态解决方案行业开拓奖”。 本次大会邀请了来自全国…

kaggle,球员接触检测

比赛链接 比赛目标 检测球员在NFL橄榄球比赛中所经历的外部接触。你将使用视频和球员跟踪数据来识别与接触的时刻&#xff0c;以帮助提高球员的安全。 评价指标 马修斯相关系数&#xff08;Matthews Correlation Coefficient&#xff0c;简称MCC&#xff09;是一种常用的二…