当前位置: 首页 > news >正文

unity3d——关于GetComponent<T>()

先看代码:

TankBaseObj obj = other.GetComponent<TankBaseObj>();if(obj != null){//说明是坦克打到坦克  受伤处理  固定不会受伤  移动的会受伤obj.Wound(fatherObj);}

TankBaseObj 是一个基类  wound是一个虚函数  子类已经重新实现   当你的游戏对象依附的是一个已经继承TankBaseObj的子类   然后 TankBaseObj obj = other.GetComponent<TankBaseObj>();  obj 就是子类的实例化  只不过 这里是用父类装子类的思想  但是他实际的引用还是子类对象 并且 子类已经重写虚函数Wound 所以这里掉用的就会是重写的函数方法

在Unity中,当你使用GetComponent<T>()方法获取组件时,你实际上是在尝试从游戏对象上获取类型为T的组件。在你的例子中,TTankBaseObj,这是一个父类。如果游戏对象上附加了一个继承自TankBaseObj的子类组件(比如TankChildObj),那么GetComponent<TankBaseObj>()将会成功返回这个子类组件的实例,因为子类实例也是父类类型的一个对象。

现在,关于你提到的Wound方法被重写的情况,这里有一些关键点需要理解:

  1. 虚方法和重写:如果TankBaseObj中的Wound方法被标记为virtual,并且子类(比如TankChildObj)中提供了这个方法的一个override实现,那么当通过父类类型的引用调用这个方法时,实际上会调用子类中的重写方法。这是C#中多态性的一个表现。

  2. 实际对象类型:在运行时,obj变量虽然被声明为TankBaseObj类型,但它实际上指向的是子类(如TankChildObj)的一个实例。因此,当调用obj.Wound(fatherObj);时,会调用该实例上重写的Wound方法。

  3. 编译时与运行时类型:在编译时,obj的类型是TankBaseObj,编译器只知道它可以调用TankBaseObj上定义的方法。但在运行时,obj实际指向的是一个具体的子类实例,所以运行时会根据这个实例的实际类型来确定调用哪个Wound方法。

举个例子,假设有以下类定义:

public class TankBaseObj : MonoBehaviour  
{  public virtual void Wound(GameObject attacker)  {  // 父类的受伤处理逻辑  Debug.Log("TankBaseObj Wound");  }  
}  public class TankChildObj : TankBaseObj  
{  public override void Wound(GameObject attacker)  {  // 子类的受伤处理逻辑  Debug.Log("TankChildObj Wound");  // 可能还会调用base.Wound(attacker)来执行父类的逻辑  }  
}

如果游戏对象上附加了TankChildObj组件,并且你通过GetComponent<TankBaseObj>()获取了这个组件,然后调用了Wound方法,那么将会输出TankChildObj Wound,因为实际调用的是TankChildObj中重写的Wound方法。

总结来说,当你通过父类类型的引用调用一个被子类重写的方法时,实际调用的是运行时对象类型中重写的方法。这是面向对象编程中多态性的一个基本特性。

相关文章:

unity3d——关于GetComponent<T>()

先看代码&#xff1a; TankBaseObj obj other.GetComponent<TankBaseObj>();if(obj ! null){//说明是坦克打到坦克 受伤处理 固定不会受伤 移动的会受伤obj.Wound(fatherObj);} TankBaseObj 是一个基类 wound是一个虚函数 子类已经重新实现 当你的游戏对象依附…...

Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)

1. Spring 中常见注解 还有Recourse&#xff1a;相当于AutowiredQualifier Value : 用于将配置文件中的值注入到Bean的字段中。 Bean : 用于在配置类中声明一个Bean。 Lazy : 用于延迟加载Bean。 2. SpringMVC 中常见注解 还有GetMapping PostMapping PutMapping DeleteMapp…...

Hms?: 1渗透测试

靶机&#xff1a;Hms?: 1 Hms?: 1 ~ VulnHub 攻击机&#xff1a;kail linux 2024 主机扫描阶段发现不了靶机&#xff0c;所以需要按DriftingBlues2一样手动配置网卡 1,将两台虚拟机网络连接都改为NAT模式&#xff0c;并查看靶机的MAC地址 2&#xff0c;攻击机上做主机扫描发现…...

1、Qt6 Quick 简介

一、Qt6 Quick 简介 1、Qt Quick简介 Qt Quick 是 Qt 6 中使用的用户界面技术的总称。它是在 Qt 4 中引入的&#xff0c;现在在 Qt 6 中进行了扩展。Qt Quick 本身是几种技术的集合&#xff1a; QML——用户界面标记语言JavaScript - 动态脚本语言Qt C - 高度可移植的增强型…...

大模型论文集-20241103

Investigating the catastrophic forgetting in multimodal large language models 研究问题 本文探讨了多模态大型语言模型&#xff08;MLLMs&#xff09;在学习新任务时的灾难性遗忘现象。研究者关注于在添加新数据集后&#xff0c;模型是否能够保留之前学到的知识而不忘记…...

GESP4级考试语法知识(计数排序-桶排序)

整数排列参考程序代码&#xff1a; #include<iostream> #include<cstring> using namespace std; int main() {int a[101],n,i,j,k;memset(a,0,sizeof(a)); //数组清0cin>>n; //输入数字个数for(i1;i<n;i) {cin>>k; //输…...

红队-shodan搜索引擎篇

如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.shodan原理与功能的介绍 Shodan Search Engine 它是专门搜网络设备的,只要联网的,只要有IP地址的都可以称为网络设备 1.shodan&#x…...

SQL 数据结构查询

1&#xff1a;查询变得结构。 SELECT COLID,SO.NAME,EP.VALUE,SO.LENGTH,MIN(ST.NAME) AS TYPE FROM SYS.EXTENDED_PROPERTIES EP RIGHT JOIN SYS.SYSCOLUMNS SO ON MAJOR_IDID AND COLIDMINOR_ID LEFT JOIN SYS.SYSTYPES ST ON ST.XTYPESO…...

《高频电子线路》—— 角度调制(调相、调频)

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 目录 角度调制&#xff08;调相、调频&#xff09; 角度调制的原因 调频VS调幅 角度调制的分类 本章重难点 调相 时域&#xff0…...

危机来临前---- 力扣: 876

危机即将来临 – 链表的中间节点 描述&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例&#xff1a; 何解&#xff1f; 1、遍历找到中间节点 &#xff1a; 这个之在回文链表中找…...

langchain调用chatgpt对文本进行编码

1.导包 from langchain_openai import OpenAIEmbeddings2.加载编码器 embeddings_model OpenAIEmbeddings(model"text-embedding-3-large",base_url"https://api.chatanywhere.tech/v1")3.编码 embeded_result embeddings_model.embed_documents([&qu…...

python manage.py

自定义命令python manage.py 文件夹建立&#xff1a;(Python Package)这个形式的包&#xff0c;里面会自动加载__init__.py文件 1.新建management文件夹(文件必须加载在新建APP下&#xff0c;不能建在初始APP下) 2.在里面创建名为&#xff1a;commands的文件夹 3.在其下创建名…...

qt QDoubleSpinBox详解

1、概述 QDoubleSpinBox是Qt框架中的一个控件&#xff0c;专门用于浮点数&#xff08;即小数&#xff09;的输入和调节。它提供了一个用户界面元素&#xff0c;允许用户在预设的范围内通过拖动滑块、点击箭头或使用键盘来递增或递减浮点数值。QDoubleSpinBox通常用于需要精确数…...

RK3229 Android9自定义一个按键实现长按短按

一、kernel修改 --- a/arch/arm/boot/dts/rk3229-evb-android.dtsib/arch/arm/boot/dts/rk3229-evb-android.dtsi-18,26 18,25 };gpio_keys {status "okay";compatible "gpio-keys";#address-cells <1>;#size-cells <0>;autorepeat;pinct…...

A*算法求第k短路

话不多说先上例题。。 acwing&#xff1a;178. 第K短路 给定一张 NN 个点&#xff08;编号 1,2…N1,2…N&#xff09;&#xff0c;MM 条边的有向图&#xff0c;求从起点 SS 到终点 TT 的第 KK 短路的长度&#xff0c;路径允许重复经过点或边。 注意&#xff1a; 每条最短路中至…...

CVPR’25截稿在即:今年的重大新规,你知道吗?

介绍会议&#xff1a; CVPR 2025全称是 IEEE/CVF Conference on Computer Vision and Pattern Recognition&#xff0c;即IEEE/CVF国际计算机视觉与模式识别会议。将于2025年6月11日至15日在美国田纳西州纳什维尔召开&#xff0c;CVPR是计算机视觉和模式识别领域的顶级会议。与…...

一文详解销售管理系统的功能、作用、选型

在当今竞争激烈的商业环境中&#xff0c;企业需要高效的工具来管理销售流程、提升客户关系和优化业务决策。销售管理系统&#xff08;Sales Management System&#xff09;正是这样一种工具&#xff0c;它通过整合客户信息、自动化销售流程和提供数据分析&#xff0c;帮助企业实…...

MySQL上RDS MySQL

初步想法是通过主从复制的方式进行&#xff0c;即ECS上的数据库设为主&#xff0c;RDS为从&#xff0c;等同步完成后&#xff0c;切换为RDS节点。创建实例后发现&#xff0c;RDS实例不支持server-id的自定义配置&#xff0c;这个想法就被否决了。但是aliyun和huaweiyun 都提供了…...

单体架构的 IM 系统设计

先直接抛出业务背景&#xff01; 有一款游戏&#xff0c;日活跃量&#xff08;DAU&#xff09;在两千左右&#xff0c;虽然 DAU 不高&#xff0c;但这两千用户的忠诚度非常高&#xff0c;而且会持续为游戏充值&#xff1b;为了进一步提高用户体验&#xff0c;继续增强用户的忠…...

kafka消费端常见故障及处理方法

文章目录 前言一、消费端某个进程已经crash1. 主要心跳相关配置2. 完整的消费者配置示例3. 调整参数的建议 二、客户端没有crash&#xff0c;但是消费阻塞1. 工作机制2. 示例配置3.运用在代码里3. 配置建议 前言 kafka消费端经常会出现一些故障&#xff0c;一起来分析一下故障…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中&#xff0c;为每个项目或成员手动配置大模型API密钥和…...

pan-baidu-download:百度网盘多线程下载加速器架构解析与性能优化指南

pan-baidu-download&#xff1a;百度网盘多线程下载加速器架构解析与性能优化指南 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download pan-baidu-download是一款基于Python开发的百度网盘命令行下载…...

Postgresql基础实践教程(九)

⭐️⭐️⭐️⭐️⭐️ 完整数据详见 练习数据免费 ⭐️⭐️⭐️⭐️⭐️ 七十二、WITH查询&#xff08;公用表表达式CTE&#xff09; 1. SELECT 中的 WITH 2. 递归查询 3. 公用表表达式的物化 4. WITH中的数据修改语句 WITH提供了一种在主查询中写辅助语句的方法。这些语…...

基于PIC32的嵌入式MIDI合成器:从波表合成到硬件实现

1. 项目概述&#xff1a;一个基于嵌入式微控制器的MIDI声音合成器如果你对电子音乐制作、嵌入式开发&#xff0c;或者DIY硬件合成器感兴趣&#xff0c;那么“REMI Synth”这个项目绝对值得你花时间深入了解。它本质上是一个数字单音MIDI控制的声音合成器&#xff0c;核心是一块…...

Redis 客户端连接详解

Redis 客户端连接详解 引言 Redis 是一款高性能的内存数据结构存储系统,常用于缓存、会话管理、实时排行榜等功能。客户端连接是 Redis 生态系统中的重要组成部分,本文将详细介绍 Redis 客户端连接的相关知识,包括连接方式、连接配置、连接管理等方面。 Redis 客户端连接…...

ZYNQ中断避坑指南:PL端信号线如何正确‘连线’到PS端处理函数?

ZYNQ中断系统深度解析&#xff1a;从硬件信号到软件响应的全链路实践 在嵌入式系统开发中&#xff0c;中断处理是实时响应的核心机制。对于ZYNQ这种集成了ARM处理器(PS)和可编程逻辑(PL)的异构计算平台&#xff0c;其中断系统既有传统处理器的特性&#xff0c;又具备FPGA灵活定…...

Midjourney V6锐化失控?3步诊断+5组--sref/--stylize协同参数公式,立竿见影修复模糊与锯齿

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney V6锐化失控的本质归因 Midjourney V6 引入的全新扩散架构与隐式细节增强机制&#xff0c;导致图像生成过程中高频纹理被过度强化&#xff0c;其根本原因并非参数误配&#xff0c;而是模型在…...

C语言有符号和无符号在内存中的存储方式区别小结

在 C 语言中&#xff0c;​有符号类型&#xff08;如 signed char、signed int&#xff09;和无符号类型&#xff08;如 unsigned char、unsigned int&#xff09;在内存中的存储方式本质上没有区别——它们都是以二进制位的形式存储数值的。两者的核心差异体现在对二进制位的解…...

如何永久保存微信聊天记录?WeChatMsg数据导出完整指南

如何永久保存微信聊天记录&#xff1f;WeChatMsg数据导出完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...

告别AssetBundle手动管理:Unity Addressables保姆级配置与本地服务器搭建实战

Unity Addressables全流程实战&#xff1a;从资源管理到热更新闭环如果你曾经被AssetBundle的依赖关系折磨得焦头烂额&#xff0c;或者为资源热更新方案纠结不已&#xff0c;那么Addressables可能就是你在寻找的解决方案。这套由Unity官方推出的资源管理系统&#xff0c;不仅保…...