1.8 从0开始学习Unity游戏开发--编写物体组件

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

上篇文章我们初步的接触了怎么创建游戏物体的功能组件代码,这篇文章我们将会详细的讲解这个代码是怎么被Unity使用的,以及我们如何编写在Inspector上可以展示参数的功能组件。

Unity反射调用声明周期函数

在上一章中,我们先硬灌输了一个Start函数会被Unity在适当的时机调用的知识,但是这并不符合我们的常识,一个函数被调用,肯定有类似这样一个代码:

classA.Start();

但是Unity中我们的组件类里面却并不需要这样的代码就能被Unity调用,甚至这个Start函数还是private访问控制的,正常手段根本无法从外部调用。

所以Unity使用的是C#语言的特性:反射(Reflection)。

听起来好像很厉害,其实就是编译器记录了你编写的代码的内容,然后代码可以通过反射这样一个功能知道你写了哪些函数,哪些变量,甚至调用函数,改变变量的值等操作。

是不是还没懂?没事,我们手动来实现一下,因为涉及到指针,C#不太直观,我们换回C++来做示例:

class Test
{
private:
    void Func() {}
};

Test t;
t.Func();  // <-- 错误,你无法调用到private下的成员函数

这里我们新定义一个Test类,给了一个Func成员函数,但是是private访问控制的,所以正常情况,我们无法通过Test的实例调用到这个Func函数。

另一方面,如果了解了函数指针,我们是能知道类的成员函数也是有指针的,所以我们只需要将类的成员函数作为指针保存在一个我们够得到的地方,这样我们就可以调用了,让我们来一些魔法:

#include <iostream>

class Test
{
public:
    // 为了方便,我们将Func函数指针的类型换个名字叫MemberFunctionPointerType
    typedef void (Test::*MemberFunctionPointerType)();
    // 定义一个public函数来获取私有的成员函数指针
    MemberFunctionPointerType GetFuncPointer() { return &Test::Func; }
private:
    void Func() { std::cout << "Hello world!"; }
};

int main() {
    Test t;
    auto memberFunc = t.GetFuncPointer();
    // 调用获取到的私有函数指针
    (t.*memberFunc)();
    return 0;
}

运行这个代码,你可以看到输出

Unity控制物体显示和隐藏 Unity控制物体显示和隐藏 今天碰到一个比较特殊的问题,刚开始一直没解决网上找了很多博客也没找到答案,后来在QQ群友的帮助下得以解决,借此机会正好来总结 一下。在开发过程中常常需要对物体进行隐藏和显示操作,包括对UI和物体的控制,以下的实验均为UGUI的前提下。 思路提示 其实整体的思路无非就是两种, 一种是直接暴力的将这个物体设置为未激活状态,这样上边的脚本也就不能运行了,如果想再... 阅读详情

相关推荐

Unity中让一个物体通过方向键来移动的操作

方法1:需要添加刚体 using UnityEngine; using System.Collections; public class NewBehaviourScript1 : MonoBehaviour {     public float movespeed;         void Start()     {     }         

YaoLifeng的博客 1万+

C#代码创建物体unity )

创建物体

qq_57388481的博客 2690

unity入门学习(递归查找子物体、生命周期函数、Light灯光组件、克隆游戏物体

递归查找子物体unity生命周期函数,Light灯光组件,游戏组件获取与控制,坦克发射子弹

qq_51733598的博客 1174

Unity 如何自定义一个组件 让其可以在面板Inspector被创造(1

灰常简单!只需三步! Firstly 创建一个c#文件(我这里取名为ScriptableUtility2) 内容为 using UnityEngine; using UnityEditor; public static class ScriptableUtility2 { //为创建自定义类型 public static void CreateAsset&lt;T&gt;...

橘子味奥利奥 1291

Unity3d C# 创建 物体

using UnityEngine; using System.Collections; public class create : MonoBehaviour { // Use this for initialization public GameObject newObject; void OnGUI() { ...

weixin_33834910的博客 862

Unity 入门指南:开启你的游戏开发之旅

无论你是编程新手还是经验丰富的开发者,Unity 都提供了直观的工具和庞大的社区支持,助你将创意变为现实。在 Scene 视图操作:使用鼠标右键 + WASD 键(类似 FPS 游戏)移动视角,或者使用变换工具(移动 Move / 旋转 Rotate),将摄像机调整到一个合适的角度,能看到 Player 和 Ground(例如,稍微俯视)。你的游戏开发梦想,就从这里启程。页面,确认你的操作系统(Windows 或 macOS)满足对应 Unity 版本的需求(CPU、内存、显卡、磁盘空间)。

J1917的博客 3310

(三)unity 3D 学习-按名称、标签访问其它物体

var textA:int=0; function Update () { gameObject.Find("Text").GetComponent(GUIText).text="按名称显示"+textA; gameObject.FindWithTag("textB").GetComponent(GUIText).text="按标签显示"+textA; } q

qq125527661的专栏 2002

Unity】如何优雅地移动物体-8个方法

游戏开发中,如何移动物体?是我们需要思考的事情。 Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。 那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。

兜兜的博客 1万+

Unity游戏开发004:如何在Unity中对物体进行基本操作

昨天我们学习Unity中坐标系的概念,今天我们将继续学习如何在Unity中对物体进行基本操作。这些操作工具位于Unity界面左侧的工具栏中,熟练掌握这些工具是顺利进行场景编辑和游戏开发的关键。Unity左侧的工具栏提供了多种操作工具,帮助你在场景中对物体进行移动、旋转、缩放等操作。手形工具(Q):用于拖拽视角,可以通过按下鼠标中键达到相同效果。移动工具(W):通过拖动坐标轴的操作杆,调整物体的位置。选中时操作杆会变色,两个操作杆可以组合成一个平面进行平面内移动。旋转工具(E)

2301_79175212的博客 1741

Unity2D】从零开始游戏开发——小狐狸Chapter1.

为了控制小狐狸的移动,需要在代码层面和小狐狸建立起联系,因此,添加一个刚体对象Rigidbody 2D,保存代码后Untiy的Script元素中会出现rb的刚体对象,之后,将小狐狸的刚体元素拖拽即可完成链接;编写移动逻辑代码,通过Input.GetAxis(“Horizontal”)获取键盘的输入并映射为whichside的三个值-101,再通过刚体的velocity属性来修改,其中。添加至我的资源后,打开unity,Window–>My Asset,找到该素材文件后下载,后import到项目中即可;

weixin_46120503的博客 2926

unity】高亮物体

脚本及效果文件下载: 链接:https://pan.baidu.com/s/1UU1j976qK_dfPA4PKr8W4w 提取码:yy04 使用方法 1.导入unitypackage 2.在Main camera上添加 HighlightingEffect脚本 3.给需要高亮的物体添加 HighlightableObject脚本 4.编写High.cs脚本并将其挂载到任一物体(比如Light)上,脚本如下: ...

DJames23的博客 3233

Unity小技巧】unity移动物体的探究——使用8个不同方法

游戏开发中,如何移动物体?是我们需要思考的事情。Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4150

Unity3D 开发教程:从入门到精通

Unity3D 是一款由 Unity Technologies 开发的跨平台游戏引擎,支持 2D 和 3D 游戏开发。它提供了强大的图形渲染、物理模拟、动画系统等功能,使开发者能够快速创建高质量的游戏。场景视图:用于编辑场景中的对象。游戏视图:用于预览游戏运行时的效果。层级面板:显示当前场景中的所有游戏对象。检查器面板:用于查看和编辑选中对象的属性。通过本教程,你已经掌握了 Unity3D 的基本使用和开发流程。未来可以深入学习 Unity 的高级功能,如网络编程、虚拟现实开发等。

孤客科技 7184

1.7 从0开始学习Unity游戏开发--物体的组成

前篇我们简单的入门了对于一个游戏场景(Scene)如何使用编辑器进行编辑,这是我们进行游戏内容创作的重要工作流程,但是目前为止,我们能操作的最小单位也只是物体,并没有深入到物体本身,本篇我们将借助Inspector面板和代码来讲解组成游戏世界的物体,到底是什么,以及我们如何进行操纵。

仰望星空 744

unity入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

在新建完成后会在创建的目录下生成相关工程文件如图所示:Assets: 资源(场景脚本模型)Library: 库(系统)Logs: 日志Packages: 导入的包ProjectSettings: 工程设置Temp: 临时文件(文件过大可以删除部分缓存)UserSettings: 设置未完工暂无题外话初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:2023届全国高校毕业生预计达到1158万人,就业形势严峻;

A1_3_9_7的博客 3185

初识Unity(十步做好你的第一个unity小游戏)

初识unity,通过一个小游戏的制作带你了解unity,产生兴趣。

Adamwen520的博客 1万+

Unity】入门

Unity已广泛运用到各个领域: - 游戏(VR/AR.......- 影视 - 工业仿生/模拟 - 数字孪生 - 全息投影 - ······

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2408
上一篇: 1.7 从0开始学习Unity游戏开发--物体的组成
下一篇: 1.9 从0开始学习Unity游戏开发--构建游戏包体
火龙
博客等级 码龄16年 49粉丝 33原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值