unity提供了现成的package,可以实现CounterStrike中First Person的效果,
unity集成开发环境下使用:Project视图--》Import Package--》Character Controller
我要解决的是抛开unity集成开发环境完全用script实现。
第一步:在集成环境下打开工程,只为了加载unity自带的Character Controller的相关代码到Asset目录下
。
第二部:退出集成环境,将"First Person Contrller.prefab"打包成assetbundle
BuildPipeline.BuildAssetBundle(AssetDatabase.LoadMainAssetAtPath("Assets/Standard Assets/Character Controllers/First Person Controller.prefab"),
null, "Assets/Resources/FirstPersonController.unity3d", BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
第二步:加载到场景
url="file:///E:/danny/nnn/qqf/Assets/Resources/FirstPersonController.unity3d";
WWW www2 = WWW.LoadFromCacheOrDownload(url, 1);
Instantiate(www2.assetBundle.mainAsset,transform.position,Quaternion.identity);
2012-5-14-10:38
todo: First Person胶囊人和我导入的fbx的尺寸不匹配。
17:36
在unity集成环境下可点击导入的fbx修改scale factor。但这应该也是为集成环境下import服务的。
plugin/Editor/FBXPostProcessor.cs that was fixing the GlobalScale to 1:
class FBXPostprocessor : AssetPostprocessor { // This method is called just before importing an FBX.
void OnPreprocessModel() {
ModelImporter mi = (ModelImporter)assetImporter;
mi.globalScale = 1;
}
5-15-7:10
既然胶囊已经加载进去了,那么得到此gameobject修改尺寸不就完事了?
高度变到合适:
foreach(GameObject gameObj in GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[]){
if(gameObj.name.Contains("First Person Controller")){
gameObj.transform.localScale = new Vector3(transform.position.x,(float)0.2,transform.position.z);
}
}
05-16 09:18
发现还是有些“动力学”在起作用,我加一个plane先。让胶囊掉不下去
05-16 15:19
现在脚本环境下,unit scale统一缩小到了0.01,可能这会导致运行奇怪,
还是先到unity集成环境下,用原始尺寸试试看,保持胶囊两米,fbx导入时扩大到米。
05-18 7:00
可以漫游了!
if(gameObj.name.Contains("First Person Controller")){
gameObj.transform.position.y = 12;
gameObj.transform.position.z = -50;
gameObj.rigidbody.drag = 0; //去掉阻力避免拖不动
}
else{
gameObj.AddComponent(BoxCollider);//保证能支撑住first person
}
目前问题,人的视角始终过高,需要调低。
05-18 9:22
可能是fbx里面的零件看了是三角体,实际还是长方体,所以高度还没协调好,这个可能需要和设计方讨论。
先搞定fly mode吧,发现重力为0后,可以更畅通一点了。
05-22
todo: do not let first person go out of the environment