我想用 Unity 在 C# 中制作一个具有正常物理特性的类似 Minecraft 的游戏(例如,当你推动冰块时,冰块会滑到地板上)。
现在我正试图在被击中时摧毁一个玻璃立方体。我已经有了 .fbx(使用 Blender 创建的立方体爆炸动画),当我将它拖到场景中并播放它时效果很好,但我只想在某个时间播放它。这不仅仅是一部动画。它在 .fbx 中有对象
我的玻璃立方体是一个游戏对象。我有一个 GenMap 类(MonoBehaviour),我阅读了一个配置文件来了解立方体的位置和立方体的类型(污垢/冰/玻璃/石头)。
如果它是一个玻璃立方体,我会在另一个 .cs 中添加一个可破坏类的组件。
在这个类中,我有一个 OnCollisionEnter 函数来破坏我的立方体并播放动画。
我的问题是我现在不知道如何获取我的 .fbx。
我尝试了一个公共 Transform 对象并将我的 .fbx 拖到 Unity 中,但是由于我使用 addComponent("Breakable") 我的公共变量在生成时在我的对象上为空。我知道当我添加组件时,我附加了 .cs 而不是我手动分配的公共变量
void AttachTextureToObject(GameObject obj, int type) //Assign a texture to an object
{
_meshrenderer = obj.GetComponent("MeshRenderer") as MeshRenderer;
switch (type)
{
case 1:
_meshrenderer.material.mainTexture = textureG; //textureGrass i initialised in a special function
break;
case 2:
_meshrenderer.material.mainTexture = textureD;
break;
case 3:
_meshrenderer.material.mainTexture = textureS;
break;
case 4:
_meshrenderer.material.mainTexture = textureW;
break;
case 5 :
_meshrenderer.material.mainTexture = textureI;
obj.collider.sharedMaterial = materialI;
break;
case 10: //glass type
obj.AddComponent("SurfaceReflection"); //add a shader to get glass "texture"
obj.AddComponent("Breakable"); //add my class breakable
obj.renderer.material.shader = shaderG;
obj.collider.sharedMaterial = materialI;
break;
}
}
//不同的.cs
public class Breakable : MonoBehaviour
{
public Transform breaking_cube; //when i hit play the .sc attached to my gameobject is null and if i drag my .fbx manually and hit my cube i see the animation
Transform current_cube;
bool broke = false;
void Start() //when i addComponent i initialize the current cube to itself
{
current_cube = this.transform;
breaking_cube = Resources.Load("Blender/broken_cube") as Transform; //this doesn't work
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.GetComponent<Rigidbody>())
{
broke = true;
Destroy(current_cube);
Transform broken_cube = Instantiate(breaking_cube, transform.position, Quaternion.identity) as Transform;
current_cube = broken_cube;
if (broke)
{
if (!current_cube.transform.animation.isPlaying)
{
//i will destroy my gameobject when i finish
}
}
}
}
}
我尝试添加组件动画并添加我的 .fbx 但由于它不仅仅是动画,它也不起作用。
我最近开始使用 Unity,所以我可能错过或误用了一个功能。我不知道我是否足够清楚,但是如果您需要屏幕截图或其他内容,请告诉我。