找回密码
 立即注册
查看: 822|回复: 11

初学unity,想问下为什么这里不用new初始化对象,就可以直接调用该类方法?

[复制链接]
发表于 2021-2-12 20:34 | 显示全部楼层 |阅读模式
初学unity,想问下为什么这里不用new初始化对象,就可以直接调用该类方法?
发表于 2021-2-12 20:38 | 显示全部楼层
好家伙,下面的都挺暴躁的。
new关键字常用于用于创建一个新的实例,在animation这个类里也可以。而阅读该代码后发现,anim变量通过this.anim=anim字段来获取了值,而该函数的参数必然是一个已经实例化的animation类,所以无需new新建。
简单说,你现在需要用某个东西(比如橡皮),用来做一件事(比如擦掉痕迹)。那么你是觉得你需要买一个新的(new新建),还是直接从铅笔盒拿出来(通过函数调用来引用现有类)使用呢。
……写完了才发现并没有写的更简单,就这么看吧意思意思。
发表于 2021-2-12 20:46 | 显示全部楼层
其他的回答都没明白你的痛点,为什么你会有这个问题,但我懂你,我真的懂你,因为我刚开始学Unity的时候也有这种问题,为什么实例不用new直接就能用?为什么脚本里面Update、Start等方法,没有直接调用,却能执行?
原因就在于,我们的编程思维还没有适应Unity的设计。最开始我做游戏开发的时候,是用的Python的pygame引擎,几乎要从0开始写程序,用到什么内容,就必须先创建(new)出来,再在自己写的死循环里去Update更新每一帧的画面。这是符合我们一开始学程序时的编程思维的,一步一步执行,每个实例我们知道怎么来的,每个步骤都是按照我们的思路来的。
因此,不适应Unity的原因是,Unity给我们封装得太好了,游戏的流程、各种组件、各种框架都已经搭建好,我们只要拖拽一下,稍微这点代码,就完成了原本要写很多行的功能。所以,你从自己的脚本来看,明明没有new出来啊,但其实Unity内部在游戏开始阶段已经new出来过了,并且会自动赋值,所以你用的是一个实例,而不是一个还没new出来的变量名。包括继承了MonoBehaviour的脚本,Unity内部会通过反射来调用内部的Update等方法,不用每一帧都要我们自己手动去调用一次Update,再tick一下。
所以,初学者学Unity时的疑问,很多时候是不懂Unity的机制,包括为什么拖拽一下就能对暴露出的字段赋值呢?因为Unity会给对应的资源生成meta文件,内容包含了引用、初始化的数值、ID等等,这些都是Unity给我们做好了的工作,让我们的游戏开发工作量大大减少,这是一个商业化引擎应该要具有的。
所以我们要跳出原本的思维惯性,理解和适应Unity的机制,也就没那么多疑问了
发表于 2021-2-12 20:50 | 显示全部楼层
构造函数里,不是给this.anim赋值了吗。
this.anim = anim;
发表于 2021-2-12 20:53 | 显示全部楼层
我以为是mono。。没想到就是单纯的c#。。。


emmm,这不就是类的实例变量,已经在构造函数中赋值了么。


建议先看下c#相关教程
发表于 2021-2-12 21:01 | 显示全部楼层
这个anim不是你外面传过来的么?
发表于 2021-2-12 21:10 | 显示全部楼层
没学过构造函数?没看到传进来的anim?
发表于 2021-2-12 21:11 | 显示全部楼层
上面那句this. anim= anim看见了吗,赋值了直接用这不是很正常吗?
自学不是瞎学,老老实实找本书把c#基础学了谢谢。
发表于 2021-2-12 21:11 | 显示全部楼层
你自己写一个类,然后你学它这样调用试试,然后你就会发现你陷入了一个循环,也就是无论如何,this.anim=anim当中后面的anim始终绕不开需要实例化。
这不是unity的问题,是基本功问题。
发表于 2021-2-12 21:13 | 显示全部楼层
说明你对编程基础还不是很理解啊,你这不是已经在构造函数里赋过值了么。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 14:46 , Processed in 0.432857 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表