Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(遇到的问题与解决方法)

遇到的问题与解决方法

    • 问题1 Non-convex MeshCollider
    • 问题2 Application.LoadLevel 已过时
    • 问题三 GUIText赋值
    • 问题四 UIText的位置

问题1 Non-convex MeshCollider

飞机的碰撞器使用的是网格碰撞器Mesh Collider 但是默认的mesh太过于精细会消耗比较多的资源,所以我使用了素材中一个简化版的mesh。于是报出了这个错误“Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported in Unity 5.”
如果勾选Rigidbody中的 is kinematic的话此时该物体位置就不会受物理驱动控制,而只能由transform控制,键盘输入将不起作用。所以要勾选convex,也只有勾了convex才能启用该组件下的trigger。

问题2 Application.LoadLevel 已过时

原本教程中重启游戏的方法是

Application.LoadLevel(Application.LoadedLevel())

但是在新版本中的unity中这个方法已经过时。可采取的替代方法有两种。
方法一:

UnityEngine.SceneManagement.SceneManager.LoadScene(0);

方法二:

UnityEditor.SceneManagement.EditorSceneManager.LoadScene(0);

如果采用方法二的话打包会出错——使用了Editor中的方法。所以还是使用方法一比较省心。

问题三 GUIText赋值

原教程中使GUIText赋值,然而我根本找不到GUIText,上网查了一下是没了。用GameObject->UI->Text代替。所以基本思路是对Text物体下的Text组件下的text属性赋值= =
这里用一个截图更能说明:
Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(遇到的问题与解决方法)_第1张图片

UI下的物体都是作为Canvas画布下的子物体。
要对标签赋值只要找到标签这个GameObject然后获得它的组件,再访问属性。比如以下这段代码:

GameObject.Find("Score").GetComponent<Text>().text = "Score:" + score;

找到名为Score的GameObject,获得它类型为Text的组件,然后对text属性赋值。
注意是GetComponent而不是GetComponents,后者会返回一个集合。

问题四 UIText的位置

父物体Canvas有三种渲染模式 大意是Screen Space - Overlay屏幕最前端、Screen Space - Camera相机最前端、World Space世界物体。
Unity3D游戏开发--基础游戏 SpaceShooter学习笔记(遇到的问题与解决方法)_第2张图片
前两种transform跟随屏幕、相机变化,无法人为修改。世界物体是相当于一个GameObject可以修改transform,随着渲染模式的不同,其他组件的参数也有所影响。
这里我是使用屏幕最前端,然后子物体相对于画布Canvas的位置就是子物体在游戏屏幕前的位置。
因为这个游戏没有相机移动,其实使用相机最前端也一样,只是要指定渲染摄像机。

你可能感兴趣的:(自学笔记,Unity3D自学)