图解unity下gameobject和transform的区别和关联

本文深入解析Unity中游戏对象(GameObject)与Transform组件之间的关系,包括如何获取和使用它们,以及它们之间的引用关系。通过示例代码验证理论,帮助开发者更好地理解和应用Unity引擎中的核心概念。

概念:

gameobject :当前游戏对象的实例

transform:当前游戏对象的transform组件

从概念可以看出,两者是不同的两个东东,在unity中每个游戏对象都是一个gameobject,而每个gameobject都包含各种各样的组件,但从这点可以看出transform是gameobject的一个组件,控制着gameobject的位置,缩放,和旋转,而且每个gameobject都有而且必有一个transform组件。关系如图所以

途中。阴影方块是组件,大方块是gameobject,一个gameobject包含多个组件



2:gameobject.transform,是获取当前游戏对象的transform组件。也就是上图中那个transform.如图




所以在start函数中 gameobject.transform 和this.transform,指向的都是同一个对象。即:gameobject.transform == this.transform == transform



3:transform.gameobject:可以这么理解为:获取当前transform组件所在的gameobect.即为下图关系:


所以在start函数中()transform.gameobject == this.gameobject == gameobect


通过上面讲解可以看出,gameobject.transform 获取当前对象的gameobect.而transform.gameobect指向的就是当前游戏对象,所以他们可以无限的引用下去

意思就是。gameobject.transform == this.transform == gameobject.transform.gameobject.tranform == tranform.gameobect.transform

测试代码:

void Start () {
	
		m_gameOject = this.gameObject;
		m_transFrom = this.transform;
		
		print ("gameOject.name ==>" + m_gameOject.name);
		print ("gameOject.transform.name ==>"+m_gameOject.transform.name);
		print ("gameOject.transform.gameobject.name ==>"+m_gameOject.transform.gameObject.name);
		print ("gameOject.transform.gameobject.tramsform.name ==>"+m_gameOject.transform.gameObject.transform.name);

		print ("transform.name ==>"+m_transFrom.name);
		print ("transform.gameobject.name ==>"+ m_transFrom.gameObject.name);


	}

通过print打印测试,可以看出,打印出来的名字都是当前游戏对象的名字。上面解释的关系得到了验证



### 关于Unity实现简易连连看游戏 在Unity3D中开发一款简易的连连看游戏涉及多个关键技术点,包括但不限于关卡设计、C#编程基础、碰撞检测、交换逻辑、消除动画以及UI设计与交互[^1]。以下是基于这些技术要点的一个简化版连连看游戏的设计思路: #### 1. 游戏场景搭建 创建一个新的Unity项目,并设置好基本的游戏场景。可以使用Grid布局来定义游戏中的方格位置。 ```csharp public class GridManager : MonoBehaviour { public GameObject tilePrefab; // 方块预制体 public int gridSizeX, gridSizeY; void Start() { GenerateGrid(); } void GenerateGrid() { for (int y = 0; y < gridSizeY; y++) { for (int x = 0; x < gridSizeX; x++) { Instantiate(tilePrefab, new Vector3(x, y, 0), Quaternion.identity); } } } } ``` 上述代码展示了如何生成一个简单的网格结构。 #### 2. C#脚本编写 为了处理玩家点击事件判断两个物品是否能够匹配,需要为每个方块对象附加相应的脚本。 ```csharp using UnityEngine; public class TileController : MonoBehaviour { private bool isSelected = false; public SpriteRenderer spriteRenderer; public Color selectedColor = Color.yellow; void OnMouseDown() { if (!isSelected) { spriteRenderer.color = selectedColor; isSelected = true; } else { ResetSelection(); } } void ResetSelection() { spriteRenderer.color = Color.white; isSelected = false; } } ``` 此部分实现了当用户单击某个瓷砖时改变其颜色的功能。 #### 3. 消除逻辑 对于两块选定的砖之间的路径查找算法(通常称为“连线”),可以通过A*寻路或其他简单方法完成验证是否存在合法连接线。 #### 4. 动画效果 利用Unity内置Animator组件或者手动调整Transform属性制作平滑过渡动画展示消失过程。 #### 5. UI界面 最后一步就是构建友好的用户体验界面(UI),比如计分板、剩余时间显示等等。 以上仅提供了一个非常基础框架概念图解;具体实施过程中可能还需要考虑更多细节问题如性能优化等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值