1.
摄像机跟随人物移动(第一人称)
思路:摄像机与物体保持一定的高度差、方向、距离
初始值:
mCamTrans = Camera.main.transform;
Vector3 startPos = transform.position;
startPos.y += mCamHeight;
mCamTrans.position = startPos;
mCamTrans.rotation = transform.rotation;
mCamAng = mCamTrans.eulerAngles;
人物移动:
If(Input.GetKey(KeyCode.W/S/A/D)
{
mPlayer.transform.Translate(Vector3.forward/back/left/right * Time.deltaTime * mSpeed);
}
摄像机跟随:
float y = Input.GetAxis("Mouse X");
float x = Input.GetAxis("Mouse Y");
mCamAng.x -= x;
mCamAng.y += y;
mCamTrans.eulerAngles = mCamAng;
mCamTrans.position = new Vector3(this.transform.position.x, mCamTrans.position.y, this.transform.position.z);
float camy = mCamAng.y;
this.transform.eulerAngles = new Vector3(this.transform.eulerAngles.x, camy, this.transform.eulerAngles.z);
Vector3 startPos = transform.position;
startPos.y += mCamHeight;
mCamTrans.position = startPos;
2.
功能:Button的两种状态由两张图表现(普通状态,选中状态)
思路:普通状态图由Button的Image组件决定;选中状态图有Button处于Transition->Sprite Swap模式下的Highlighted Sprite决定
普通状态图:
mBtn.Getcomponent<Image>().sprite = Resources.Load(“Textures/normalImg”,typeof(Sprite)) as Sprite;
选中状态图:
Sprite _si = Resources.Load(“Textures/selectedImg”,typeof(Sprite)) as Sprite;
SpriteState _ss = new SpriteState();
_ss.highlightedSprite = _si;
_ss.pressedSprite = null;
_ss.disabledSprite = null;
mBtn.Getcomponent<Button>().spriteState = _ss;
3.
功能:3d模型跟随鼠标移动
思路:实时获取鼠标位置,转换屏幕坐标为世界坐标,赋值给3d模型
mObj.transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition + new Vector3((float)offsetX,offsetY,offsetZ);
ps:当offsetX/Y/Z = 0时,通过预制件实例化出来的3d模型position与主摄像机position一致,且不跟随鼠标移动,所以需要设置偏移量
4.
功能:2d的UI组件跟随3d的物体,显示在物体的中心点。
思路:把物体的世界坐标转换为屏幕坐标,赋值给2dUI的RectTransform的pisition,z轴为0
Vector3 _objScreenPos = Camera.main.WorldToScreenPoint(_obj.transform.position);
mUI.Getcomponent<RectTransform>().position = new Vector3(_objScreenPos.x,_objScreenPos.y,0);