unity精通之路01(SpaceShooter01)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情


)

载入资源

这是我第一篇博客,主要记录和总结每次demo学习到的东西,这次是unity官方案例第一个demo,可以从unity中的Asset Store搜索SpaceShooter就能免费下载资源。

载入飞船

在Project文件夹中选中vehicle——playship并拖进Hierarchy重命名为Player,重置Transform属性,并为飞船添加刚体组件(Add Component->Physics->Rigidbody),主要用途是后续可以通过脚本使飞船获得外作用力,此外取消Use Gravity的勾选,因为不需要用到外力。接着为飞船添加碰撞组件Mesh Collider(添加方法和上面类似)主要目的是让飞船能与随机出现的阻碍物发生碰撞并在发生后使自身和碰撞物摧毁的事件。在Mesh Collider中的Mesh网络把Project->Model->player_collider拖进去。(简化模型,减少不必要的运算),同时还要勾选IS Trigger和Convex从而将Mesh Collider变为触发器。

1.通过脚本使飞船移动

在Project资源窗口中右键选择Create->C# Script创捷脚本,重命名为PlayerController双击进入VS编辑。
代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Playcontroler : MonoBehaviour {
public float speed; //设置一个速度变量
void FixedUpdate() //固定频率更新
{
float moveHorizontal = Input.GetAxis(“Horizontal”); //检测水平方向移动的键位
float moveVertical = Input.GetAxis(“Vertical”); //检测垂直方向移动的键位
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); //实例化3D向量,因为游戏是xz面移动,所以y值为0
GetComponent< Rigidbody>().velocity = movement * speed;
}
}

这样运行游戏,就能通过键盘控制飞船移动,而按哪些键来控制飞船就要看你在unity中的设置(Edit->Project Settings->Input)。
注意在输入键位名称要正确,不然unity识别不了会报错

2.把脚本和游戏对象绑定

在Project中选择脚本文件并拖进Hierarchy中的Player中,绑定成功能在Player的Inspector中看到脚本,并且能在unity中设定speed的值。注意脚本文件名字要和代码里继承MonoBehavior类的类名称一致,不然会报错

3.使飞船移动时不会超出游戏界面

执行了上面两步后运行游戏会发现,飞船能超出界面进行移动,为了使游戏能顺利进行,必须限制飞船的移动范围,添加类代码如下:

public class Boundary
{
public float xMax,xMin,zMax,zMin;
}

接着在public class Playcontroler : MonoBehaviour 中定义新变量

public Boundary boundary;

要将物体固定在范围内,可以使用unity提供的函数Mathf.Clamp的函数来实现,具体这函数的解说可以查看文档,添加如下代码:

GetComponent< Rigidbody>().position = new Vector3
(
Mathf.Clamp(GetComponent< Rigidbody>().position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(GetComponent< Rigidbody>().position.z, boundary.zMin, boundary.zMax)
);

从代码可以看出实例化Vector3所需要的就是x,y,z的数值,而Mathf.Clamp函数所需要的值也是每个方向上的最值。通过移动飞船到显示界面边缘就能得到boundary中的x,z的最值。

4.为飞船添加移动使能旋转的功能

为使游戏变得更生动,可以使用Euler函数,实现方法如下:

public float tilt=5.0f

在void FixUpate函数中加入

GetCompont< Rigidbody>().rotation=Quaternion.Euler(0.0f, 0.0f,GetComponent< Rigidbody>().velocity.x * -tilt);

通过改变Z的角度使飞船有旋转的功能

载入背景

创建一个平面(GameObject ——>3D Object——>Quad),重命名为Background,重置Transform,移除Mesh Collider,此时background垂直与飞船。将background旋转90度时背景和飞船平行(Rotation(90,0,0)),把纹理拖进background对象上,按照纹理分辨率比例来调整大小,防止失真,将shader模式为Unit/Texture。

创建电光弹

1.创建一个空的游戏对象

命名为Bolt,重置transform属性,加胶囊体组件和刚体组件,取消Rigidbody勾选Use Gravity,在Capsule Collider中勾选Is Trigger选为触发器,设置Direction属性值为Z-Axis,并设置Radius为0.04,Hegiht为0.65

2.创建一个平面Quad

该平面为Bolt的子对象,命名为VFX,重置Transform属性,将Rotation属性值为(90,0,0),去除Mesh Collider组件

3.新建Move.cs脚本绑定到Bolt上

代码如下:

void Start()
{
GetComponent< Rigidbody>().velocity=transform.forward*speed;
}

4.存储子弹预设体

新建一个预设prefabs,将子弹Bolt拖到Project中的prefabs中,完成子弹预设体创建,从Hierarchy视图中删除Bolt

5.用脚本控制飞船发射子弹

1)为Player新建一个空的子对象Shot Spawn,设置其position的值为(0,0,0.7),在这个位置发射子弹
2)创建新脚本,并绑定在Player对象上。
3)我们需要在脚本存储Bolt游戏对象,作为Instantiate(拷贝函数)的第一个参数
4)存储发射位置,作为实例化Bolt的位置
5)设置一定的发射频率
首先定义一下函数要的变量:

public float fireRate=0.5f;
public GameObect shot;
public Transform shotSpawn;
private float nextFire=0.0f;

其中shotSpawn也是GameObject类型,不过可以直接声明Transform类型,简化代码
然后重载PlayerController类的Update方法:

void Update()
{ if(Input.GetButton(“Fire1”) &&Time.time>nextFire)
{ nextFire=Time.time+fireRate;
Instantiate(shot,shotSpawn.position,shotSpawn.rotation);
}
}

6)为变量赋值,直接把Bolt拖到Player的Inspector上对应的shot变量,shot Spawn一样

6.管理子弹的生命周期

1)新建一个Cube对象,命名为Boundary,重置tansform组件
2)切换到Game窗口,调整Boundary对象的位置,大概想好子弹到哪里消失,就把Boundary边缘放到哪
3)设置Boundary对象的Box Collider组件为触发器,由于在场景中不需要显示Boudary对象,所以将Mesh Renderer组件移除
4)创建脚本DestroyByBoundary

void OnTriggerExit(Collider other)
{
Destroy(other.gameObject);
}

5)运行游戏调整Boundary位置

#第一部分先到这里,这专栏主要记录每个官方案例所学到我自认为比较常用的游戏功能,期待下一篇

Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(中) (上)部分主要介绍了素材的添加以及基本的移动与涉及功能,这部分关注事件的实现(如碰撞检测)。 传送门: 太空射击(Space Shooter)流程介绍与代码分析(上) 太空射击(Space Shooter)流程介绍与代码分析(中) 太空射击(Space Shooter)流程介绍与代码分析(下) 6.边界的设定 在上述过程中,若一直发射子弹,在Hierarchy中会一直出 阅读详情

相关推荐

Unity 3D 官方教程——Space Shooter学习记录

写到凌晨2点,结果今天一打开博客,整个Space Shooter文章全不见了,没有记录,没有回收站。 注意,我每写一小节都会立即保存文章。真不知道这CSDN博客是什么奇萌的风格。 还好昨晚写完后有备份,不然今天抑郁一天。 以下是正文。 ---------------------------------------------------- unity 官方教程Space Shooter ...

3019

Unity SpaceShooter太空打飞机游戏

一个太空射击类型的游戏,使用unity3d开发,可以为自学unity3d者提供一份源码

Unity3D]Unity3D官方案例SpaceShooter开发教程

1、先导入SpaceShooter的环境资源,将Models下的vehicle_playerShip放到Hierachy窗口,改名为Player.Rotation x改为270,为Player添加mesh collider组件,将vehicle_playerShip_collider放到Mesh属性里面,为Player添加刚体,去掉重力的勾选,将Prefebs中的engines_player放到H

陶程的博客 3531

Space-Shooter-Unity-tutorial.zip

Unity Space Shooter官方教程资源文件

Unity官方实例教程 Space Shooter(太空射击游戏)

Space Shooter 太空射击 传送门 Unity官方实例教程 Space Shooter(一) Unity官方实例教程 Space Shooter(二) Unity官方实例教程 Space Shooter(三) Unity官方实例教程 Space Shooter(四) Unity官方实例教程 Space Shooter(五) 前言 游戏截图 S

Android系统攻城狮 1万+

Unity官方实例教程 Space Shooter

前言 如何下载和导入资源 如何设置游戏视窗大小 添加了飞船和飞船喷射效果 Capsule Collider和Mesh Collider的用法 但是我们还没有为游戏添加任何的操作,现在还只是一个可以看,但不能玩的版本,所以今天我就让游戏可以玩起来! 你将学到什么? 如何控制飞船移动 如何限制飞船的

Vic 2387

unity精通之路01SpaceShooter02)

unity精通之路01SpaceShooter)02 创建小行星(主要学习预设体的克隆方法) 1)在Hierarchy视图中新建一个空的游戏对象Asteroid,重置其Transform组件。设置其Position为(0,0,10)。添加Rigidbody组件,取消勾选Use Gravity选项框。添加Capsule Collider组件,勾选Is Trigger选项。 2)从Project视图...

labylei的博客 251

Unity制作SpaceShooter游戏

unity窗口上方的标题栏里依次显示场景名-项目名-发布平台,当场景未保存时场景名显示为untitled,场景只能保存在Asset文件夹下,一般建议在其中新建一个_scenes文件夹。 在Edit->Project Settings->Player的Resolution中设定Game视窗的宽高。然后不要忘了选择我们设置好的宽高! MeshFilter获取我们的模型,MeshRenderer

UIUCGOGOGO的博客 786

探索未来游戏开发:Space Shooter ECS —— 一个由Intel和Unity联手打造的创新项目

探索未来游戏开发:Space Shooter ECS —— 一个由Intel和Unity联手打造的创新项目 1、项目介绍 在游戏开发的世界里,Space Shooter ECS是一个独特的开源项目,它将经典的太空射击游戏与现代的[Entity Component System (ECS)](https://docs.unity3d.com/manual ecs.html)架构相结合。这个项目由In...

gitblog_00008的博客 516

Space_Shooter

Unity工程,Space_Shooter_Starter_Kit_v1.12.unitypackage

Unity3D的SpaceShooter教程素材

Unity3D-SPACE SHOOTER教程学习资源 ---------------------------------------------------------------------- SPACE SHOOTER TUTORIAL Expand your knowledge and experience of working with Unity by creating a simple top down arcade style shooter. Using basic assets provided by Unity Technologies, built-in components and writing simple custom code, understand how to work with imported Mesh Models, Audio, Textures and Materials while practicing more complicated Scripting principles.

unity官方教程 space shooter 资源

unity官方教程 space shooter 资源, 开启unity,进行导入即可,包括音频, 预制,最终代码,模型,纹理 等资源

Unity小游戏【Space shooter】源码

这是我学习Unity过程中开发的小游戏,供感兴趣的初学者参考

SpaceShooter资源包

Unity官方案例精讲SpaceShooter资源包,加入了一些模型资源

Unity射击游戏开发教程:(35)轰炸敌人

声明变量对于这个动作,我决定尝试一些不同的东西,并使用协程来控制敌人何时改变方向。我们将使用布尔值来记录何时应该向左或向右移动。在update中,我们使用 if else 语句来检查左移布尔值是 true 还是 false。如果为 true,将使用 Vector3.left 将敌人平移向左移动,如果 bool 为 false,我们将使用 Vector3.right。在每个语句中,我们启动一个协程,将 bool 值切换为 true 或 false。协程。

yolo模型训练找我,AI游戏合作找我 1751

IK(反向动力学)简单原理与实现

IK(反向动力学) 反向运动学 (IK) 是一种设置动画的方法,它翻转链操纵的方向。它是从叶子而不是根开始进行工作的。 要了解 IK 是如何进行工作的,首先必须了解层次链接和正向运动学的原则。 简单演示 现在举个手臂的例子。要设置使用正向运动学的手臂的动画,可以旋转大臂使它移离肩膀,然后旋转小臂,手部等等,为每个子对象添加旋转关键点。 要设置使用反向运动学的手臂的动画,可以移动用以定位腕部的目标。手臂的上半部分和下半部分为 IK 解决方案所旋转,使称为末端效应器的腕部轴点向着目标移动。

MOV的博客 1万+

IK反向动力学

** 在我们的VR和AR的交互应用中,可以借助反向动力学来帮助确定角色动作 ** IK全称是Inverse Kinematics,反向动力学的意思。 相对于反向动力学,FK正向动力学( Forward Kinematics)就是我们常用的骨骼动画, 动画制作者将角色的构成部分通过层级节点规划,摆出一个类似骨架的形状,通过关节点与蒙皮表面的关联系数,动画制作者可以改便骨骼节点的位置、旋转角度,带动蒙皮形成的动画的一种动画制作方式。 在一套FK系统中,一般的规则是:层级里的一个父节点驱动任意子节点的运动。例

qq_31042143的博客 2876

反向动力学IK

在骨骼动画中,构建骨骼的方法被称为正向动力学,它的表现形式是,子骨骼(关节)的位置根据父骨骼(关节)的旋转而改变,用我们人体举例子:当我们抬起手臂时,是肩部关节带动的整个手臂的运动,用父子骨骼理解的话就是父带动了子。IK全称是Inverse Kinematics,翻译过来的意思就是反向动力学的意思,它和正向动力学恰恰相反它的表现形式是,子骨骼(关节)末端的位置改变会带动自己以及自己的父骨骼(关节)旋转。

Go_Accepted的博客 971

unity游戏开发——Animator动画】Animator反向动力学(IK)

正向动力学(FK):从父关节到子关节依次计算位置(比如肩膀→肘部→手腕)反向动力学(IK):从末端关节(如手或脚)反向计算父关节的位置和旋转简单来说,IK让你可以控制角色的手或脚放在特定位置,系统会自动计算手臂或腿的其他关节应该如何弯曲。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2103
下一篇: unity精通之路01(SpaceShooter02)
薛西佛斯
博客等级 码龄7年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值