今天做了一个人物点击鼠标移动的Demo,还有方向键的移动。
人物点击鼠标移动自然要用到NavMeshAgent寻路组件了:
首先我先说说把人物素材导入进去遇到的问题:
1.导入进去的时候人物模型是白的,没有皮肤,即使把材质球贴了也一样,这样我才发现是模型的缩放比例太小了,才0.01,正常是0.5,0.01导致了两个问题,第一,模型的材质贴图显示不出来,二,模型拖到场景视图上根本看不见。所以要记得改改缩放比例Scale Factor这个
2.一开始我倒进来的动画类型是Generic,然后我在角色中添加动画组件,在代码中写播放动画,结果代码提示动画不存在。我就把模型和所有的动画都改成Legacy,结果是所有的动画都自动倒进Animation组件中去了,而且在代码中也能识别了,真不错.
上网查了一下Unity 动画类型,才发现Legacy是老的动画系统,下面有一篇关于动画系统的分析写得不错,有空我再学习学习
http://www.360doc.com/content/13/1216/12/12282510_337556448.shtml
接着说说,我在做人物自动寻路的问题:
正确步骤是这样子的,对地板plane属性面板的static勾上,然后Layer 选择default(我这里选择的是第八层,随便取个名字abc 因为我在后面的寻路代码中加入了射线的参数mask==1<<8,这里的8是后面的第八层,后面我再解释),当然你选择default括号的不用再看了,只是如过要使用我的代码可能要注意一下了呵呵。。。。继续,然后直接bake一下,会生成蓝色的地板,提示你要保存场景,保存完了就地板的就制作好了。然后再给主角添加一个寻路组件NavMeshAgent组件,整个寻路步骤就此完成
我遇到的问题是属性面板旁边的那个Navigation选项卡经常会不见了,只要在菜单栏windows上面选择Navigation就出现了。
人物自动寻路代码如下:
playerControl.cs:
using UnityEngine;
using System.Collections;
public class PlayerControl : MonoBehaviour
{
//这个代表要寻路的主角
NavMeshAgent m_player;
//这个是主角的动作动画
Animation m_animation;
//主角在跑时候的速度
public float speed;
//照相机要跟上主角移动
Transform m_Camera;
public float m_MoveFactor = 4.0f;
public float m_RotateFactor = 10.0f;
Vector3 nowPosition;
void Start()
{
//通过这个函数可以找到套在主角身上的所有组件,这次找的是寻路组件哈
m_player = GetComponent();
//获取主角身上的动画数组
m_animation = animation;
//获取照相机的位置-----transform是位置信