unity学习笔记(持续更新)
1.点哪指向哪
if (Input.GetMouseButtonDown(0))
{
//相机向指定的物体发出射线,并返回
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//射线可以跟collider组件的物体发生碰撞
RaycastHit hit;//碰撞的信息
//表示是否碰到东西
if (Physics.Raycast(ray, out hit))
{
transform.LookAt(new Vector3(hit.point.x, transform.position.y, hit.point.z));
}
}
2.物体的旋转
#region 方法一
//设置炮台方向跟小球一个方向
//transform.forward = ball.position - transform.position;
#endregion
#region 方法二
// transform.LookAt(ball);
#endregion
//Vector3.Angle得到的夹角只会返回正夹角
#region 方法二 改旋转
//改旋转轴
// Vector3 ballPos = ball.position - transform.position;
// float angle = Vector3.Angle(ballPos,dir);
Vector3 axis = Vector3.Cross(dir, ballPos);
// dir = ballPos;
// //dir = new Vector3(ballPos.x, 0, ballPos.z);
// transform.Rotate(Vector3.up, angle);
// transform.Rotate(axis, angle);
//改旋转角度
Vector3 ballPos = ball.position - transform.position;
float angle = Vector3.Angle(ballPos,dir);
Vector3 axis = Vector3.Cross(dir, ballPos);
float result = Vector3.Dot(axis, Vector3.up);
//根据传入值的符号返回,如果传入的值为负,则返回-1,否则返回1
result = Mathf.Sign(result);
dir = ballPos;
angle *= result;
transform.Rotate(Vector3.up, angle);
3.键盘事件
键盘输入
Input.GetKey
长安一个键不放,每帧判断一次
Input.GetKeyDown
按下某个键,只判断一次
Input.GetKeyUp
松开某个键,只判断一次
if (Input.GetKeyUp(KeyCode.W))
{
Debug.Log("往前走");
}
if (Input.GetKeyDown(KeyCode.A))
{
transform.Translate(new Vec