文章目录
独立搭建出一个简单场景,并基于该场景开发一个简单的第一人称3D游戏

本次教学Demo已上传github:https://github.com/waitKey1/Unity-Game-Demo,有需要自取
模型与音效unity包百度链接:
链接:https://pan.baidu.com/s/1Sh77qhYaan_mZ6MpTVwPog?pwd=xvz8
提取码:xvz8
注:以上百度链接可以完全不用下载,下面有详细获取与场景模型搭建方法
这是界面中各个窗口的默认摆放位置,也是项目刚打开时候的样子

不过由于这样子摆放,平常工作的时候不是很方便。
1、场景窗口有些太偏,工作不是很舒服
2、游戏播放场景被折叠起来,不能实时看到游戏情况
所以,我们需要对各个窗口进行一下移动,让其看起来更舒服

鼠标左键点击窗口名,拖拽移动窗口,左键提起放下窗口

随便拖拽就可以形成以上这样的效果
有时候窗口玩坏了怎么办?一键复原!
Window–>Layouts–>Default




移动并调整下各个窗口的宽高
令各个窗口摆放位置一般如下

向Unity世界发出一声HelloWorld吧,Unity世界在此刻将为你缓缓展开!



最终目标图如下:

(1)创建Cube,Sphere,Capsule,Cylinder,Quad依次排列
对象移动方式:

(2)创建Plane放在中间
(3)创建一个Text

(4)创建一颗树
都摆放好即可完成创建与移动练习!
在对Cube的Transform组件修改之前需求先练习一下如下技巧。


界面有些嘈杂,我们将其他不是Cube和初始的Camera和Light的对象删掉吧
Scene窗口纵深前进后退的方法:鼠标滚轮滚动 或 Alt+鼠标滚轮滚动,向前滚动窗口画面前进。向后滚动,窗口画面后退。
注:直接滚动,窗口视图是向中心前进。Alt+鼠标滚动则可以选择窗口视图向哪个方向前进
Scene窗口上下左右移动的方法:鼠标滚轮摁住拖拽,鼠标前移,画面向上、鼠标左移,画面向左等等,其他方向同理
Scene窗口以当前位置为旋转原点的角度旋转的方法:鼠标右键摁住拖拽,鼠标前移,画面向上旋转、鼠标左移,画面向左旋转等等,其他方向同理
Scene窗口以窗口中心位置为旋转原点的角度旋转的方法:Alt+鼠标左键摁住拖拽,鼠标前移,画面向上旋转、鼠标左移,画面向左旋转等等,其他方向同理
Scene窗口聚焦某个或某些对象在窗口中心的方法:选定目标对象/对象们,键盘按F
Transform组件是整个Unity中重要的组件之一,之后也是接触最多,且属性改变带来的视觉效果也很明显,所以对Unity组件熟悉,可以从Transform组件开始。



Poition:在坐标系中的位置
Rotation:对象旋转的角度,逆时针为正,顺时针为负
Scale:对象的大小


恭喜完成针对物体的操作课程!
在正式场景搭建前,还有一个功模块Gizmo 导航器,需要学习:
导航器位置

透视视图与正交视图
Scene窗口中的视图是透视视图还是正交视图,可以在Gizmo 导航器中设置

三视图
y轴:Top
z轴:Front
x轴:Right

在正式开始布置场景前,还需要注意:如何复制物体、光照设置、主摄像头、如何利用切换视图搭建场景

- 选定物体后 ctrl+d
注:复制物体后,Scene窗口下的视图可能没有任何变化,这是因为二者重叠了。选定复制出来的物体,再移动一下就看到有两个了。



注1:选定光源后,按E,然后视情况调整
注2:光源的位置,与大小,对光照效果没有任何影响,只需要调整角度即可

如何在只能看到二维的画面情况下,搭建出完美符合自己审美要求的三维场景?三视图!





我们开始搭建场景吧,以第二个图为主,中间的亭子就用一个胶囊体代替。
将第二个图片,另存为在电脑里面
新建一个imgs的文件夹

将地图参考图 导入Unity3d项目



完成北面墙壁的效果图如下:




为了让整个墙与地面成为一个整体,可以自由缩放,旋转而不影响结构,我们需要将其制成一个prefab 预制体。



迷宫预制体完成
注:预制体相当于一个自定义的一个结构,可以进行Unity自带的立方体,椭圆,球一样的操作。以后发射子弹,自动生成敌人等都需要用到这种技巧。
游戏地图制备好了,第二步就是创建一个玩家Player。
玩家角色 是游戏的灵魂之一,单独的场景无法与游玩的人进行交互。需要通过玩家这一身份与场景进行交互,这样更有代入感一些。

我们就定义一个正方体为Player。当然也可以是其他的形状,或者人什么的。
创建一个叫Scripts文件夹
在Scripts文件夹内创建C# Script

文件命名为:MoveControl(移动控制)

注:文件名字与类名字必须一致,如果创建文件后,只修改文件名就会报错,需要两个都改
编写程序
从之前的学习可以看出,只要修改物体的Transform组件中的position属性即可实现,修改物体位置的效果。
综上,编程目标:让按键与修改目标物体的position属性绑定,形成一个交互效果。

具体实现代码以及注解如下:
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class MoveControl : MonoBehaviour
{
// Start is called before the first frame update
//注:所有的有小数的数字后面都要加f,表示是float数据类型
public float speed = 8.0f;
public float Rotatespeed = 60.0f;
void Start()
{
Application.targetFrameRate = 60;//设置帧率为60帧率
//注:设置帧率为60帧,表示游戏会尽量把帧率往60帧靠近,不是固定60帧
}
// Update is called once per frame
void Update()
{
KeyControl();
}
private void KeyControl()
{
//Translate是transform组件中自带的修改自身position属性的函数,在原有的基础上进行加处理
//Time.deltaTime :记录每帧的用时
//distance(一帧 移动距离)=speed(速度) * Time.deltaTime(一帧时间)
//Translate(x,y,z,type):加的x,y,z值,由于一般设定z轴为前方,所以加z即可,Space.Self表示使用自身坐标系,这个下一章教材会讲解
if (Input.GetKey(KeyCode.W))
{
this.transform.Translate(0, 0, speed * Time.deltaTime, Space.Self); //W 前进
Debug.Log(speed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
this.transform.Translate(0, 0, -speed * Time.deltaTime, Space.Self);//S 后退
}
//Rotate是transform组件中自带的修改自身属性的函数,在原有的基础上进行加处理
//逆时针为减法,顺时针加法
//y轴是top,旋转一般是人头往左或往右,所以一般我们默认以y轴为旋转轴
if (Input.GetKey(KeyCode.A))
{
this.transform.Rotate(0, -Rotatespeed * Time.deltaTime, 0,Space.Self);//A逆时针旋转
}
if (Input.GetKey(KeyCode.D))
{
this.transform.Rotate(0, Rotatespeed * Time.deltaTime, 0, Space.Self);//A逆时针旋转
}
}
}




点击Player的Position,然后Ctrl+C复制
然后再点击Main Camera的Position Ctrl+V粘贴
完成!


https://www.aigei.com/music/class/romantic_3/






修改Speed:影响玩家的速度
修改Rotatespeed:影响玩家的旋转速度
File —> Build Settings
打开导出设置



如果你能跟着做到这里,那么恭喜!Unity成功入门了,下一节将开始更深入的各项功能与组件的使用,以及实现各类基础功能的脚本书写练习,模型导入与导出,最终实现一个使用Unity开发的星战游戏Demo!
下期预告,星战前夜!

无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg