【Unity3d工作日志】知识点20180517

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);

猜你喜欢

转载自blog.csdn.net/itsxwz/article/details/80346947