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

news/2025/2/12 3:48:36/

学习笔记

  • 内容提要
  • 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 updatevoid Start(){}//Update is called once per framevoid 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://www.ppmy.cn/news/880851.html

相关文章

【Rust 基础篇】Rust 自定义迭代器

导言 在 Rust 中&#xff0c;自定义迭代器可以帮助我们根据特定需求实现符合自己逻辑的迭代过程。自定义迭代器是通过实现 Iterator trait 来完成的。本篇博客将详细介绍如何在 Rust 中自定义迭代器&#xff0c;包括自定义迭代器的定义、必要的方法和一些常见的使用场景。 自…

解“冰刃”的使用方法

冰刃——IceSWord是一斩断黑手的利刃 。它适用于windows 2000/XP/2003操作系统&#xff0c;用于查探系统中的幕后黑手(木马后门)并作出处理&#xff0c;当然使用它需要用户有一些操作系统的知识。  在对软件做讲解之前&#xff0c;首先说明第一注意事项&#xff1a;此程序运行…

华硕ROG冰刃6双屏原厂预装Windows11系统工厂恢复带ASUSRecovery恢复功能

华硕工厂恢复系统 &#xff0c;安装结束后带隐藏分区以及机器所有驱动软件,奥创 文件地址: https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 文件格式&#xff1a;5个底包(HDI KIT COM MCAFEE EDN) 1个引导工具TLK 支持ASUSRECOVERY型号 冰刃7双屏…

【前端技巧】CSS常用知识碎片(九)

CSS常用知识碎片&#xff08;九&#xff09; mask-image属性 带有半透明的PNG图像的遮罩效果 .mask-image {mask: no-repeat center / contain;mask-image: url(bird.png); }SVG图形遮罩效果 .mask-image {mask-image: url("data:image/svgxml,%3Csvg viewBox0 0 3232…

亲测有效!!解决MySQL8误删root账号无法登录的问题

亲测有效&#xff01;&#xff01;解决MySQL8误删root账号无法登录的问题 前言1. 进入cmd ,停止MySQL服务 net stop mysql2. 输入&#xff1a; mysqld --console --skip-grant-tables --shared-memory3.另外开一个cmd&#xff0c;使用mysql直接无密登录 mysql -u root –p&…

ElasticSearch简单介绍以及基本概念阐述

文章目录 一、ES是什么二、ES主要功能1、实时数据搜索和分析&#xff1a;2、分布式架构&#xff1a;3、全文搜索&#xff1a;4、实时数据分析&#xff1a;5、多种数据类型支持&#xff1a;6、实时监控和可视化&#xff1a;7、安全性和访问控制&#xff1a;8、多种集成和扩展&am…

第三方api对接怎么做?淘宝1688api接口怎么对接?

在今天的互联网上&#xff0c;第三方API对接是必不可少的。这种技术将不同的应用程序/服务连接在一起&#xff0c;创造了无限的可能性。 第三方api对接怎么做&#xff1f; 1、与支付公司签约 首先&#xff0c;通过正规的渠道&#xff0c;如支付公司官网或正规服务商&#xf…

HT合泰单片机入门教程(第五章 PWM)

文章目录 系列文章目录前言一、新建工程二、PWM相关了解1.PWM了解2.硬件电路了解 三、PWM实现1.代码实现 总结 系列文章目录 第一章 HT单片机环境搭建 第二章 点亮第一个LED灯 第三章 按键 第四章 定时器 第五章 PWM 第六章 时基中断 第七章 LCD 前言 PWM 信号把模拟信号…