unity3d 学习摸索(一) 实例化GameObject 并调整其角度

要unity3d在地图上画多个箭头模型,箭头是用3dmax 制作导入的。要一次复制出多个模型,我只想到用实例化,instantiate 函数,

staticfunctionInstantiate (original : Object, position :Vector3, rotation :Quaternion) : Object

第1个参数:对象名称,第2个参数:对象的位置,第3个参数对象的角度

我主要是对quaternion 四元组理解不好,不用直接调用角度,后来只摸索出来用下面的方法调整角度

(代码先寻找名字为 "mark" 的GameObject ,然后实例化)

脚本为js的,放在主摄像机上,hierarchy 里面建立一个一个名字为“mark"的gameobject就行,gameobject或者为cube、plane什么的都行。

private var go : GameObject;
private var clone : GameObject;
private var temp : Vector3;
private var temp1 : Quaternion;

function Start()
{
  var i : int = 0;;
  go = GameObject.Find("mark");

  go.active = false;
 
 for (var child : Transform in go.transform) {
    ++i;
    child.active = false;
    child.parent.active = false;
    }

  temp = go.transform.position;	`
  temp.x += 10;
  temp.z += 10;
  temp1 = Quaternion.identity;  
  
  for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
    {
      temp.x += 10;
      temp.z += 10;
      temp1.eulerAngles = Vector3(90,30 + (j * 50),0);
      clone = Instantiate(go , temp , temp1);
      
    }
}

主要是 temp1.eulerAngles = Vector3(90,30 + (j * 50),0); 这代码调整实例化对象的角度。

temp1 = Quaternion.identity; 这一句可以省略;

此段代码用来隐藏 go 及其go 的所有子对象,我不知道Unity有函数直接实现此功能么,如果哪位大虾知道,请告诉我,谢谢啦。

go.active = false;
 for (var child : Transform in go.transform)
 { ++i; 
  child.active = false; 
  child.parent.active = false;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中,可以使用PrefabUtility类来获取未实例化GameObject预制体上的组件。 下面是一个简单的示例,演示如何获取未实例化GameObject预制体上的组件: 1. 首先,打开Unity编辑器并创建一个新场景。 2. 在项目视图中创建一个新的预制件。 3. 选择预制件并在Inspector视图中添加一个新组件。例如,您可以添加一个名为“TestComponent”的C#脚本。 4. 在TestComponent脚本中添加以下代码: ``` using UnityEngine; public class TestComponent : MonoBehaviour { public int testValue = 0; } ``` 5. 然后,将预制件拖动到场景中。 6. 选择预制件并在Inspector视图中更改TestComponent的testValue属性。例如,您可以将其设置为5。 7. 打开脚本编辑器并创建一个新的C#脚本。将以下代码添加到脚本中: ``` using UnityEngine; using UnityEditor; public class GetPrefabComponent : MonoBehaviour { public GameObject prefab; void Start() { TestComponent testComponent = PrefabUtility.GetPrefabAssetType(prefab) == PrefabAssetType.Regular ? PrefabUtility.GetPrefabInstanceHandle(prefab).GetComponent<TestComponent>() : null; if (testComponent != null) { Debug.Log("TestComponent testValue: " + testComponent.testValue); } else { Debug.Log("TestComponent not found on prefab"); } } } ``` 8. 在场景中创建一个新的空对象,并将GetPrefabComponent脚本添加到该对象上。 9. 在GetPrefabComponent脚本组件中,将prefab属性设置为您创建的预制件。 10. 您现在可以运行场景,并查看控制台中的输出。如果一切正常,您应该会看到以下消息: ``` TestComponent testValue: 5 ``` 这表明您成功获取了未实例化GameObject预制体上的TestComponent组件,并检索了其testValue属性。 希望这个示例能够帮助您了解如何在Unity中获取未实例化GameObject预制体上的组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值