Unity实现第三人称角色控制
2017-10-20 20:12
971 查看
摄像机的控制:(挂载在摄像机的第一个父物体上)
public class CameraCtrl : MonoBehaviour
{
public GameObject rotateY;
public GameObject rotateX;
private Quaternion targetTransY;
private Quaternion targetTransX;
private float mouseY;
private float mouseX;
private float YAngleChange;
private float XAngleChange;
private float smoothSpeed = 10f;
void LateUpdate()
{
//if (Input.GetMouseButton(0))
//{
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
RotateByX(mouseY);
RotateByY(mouseX);
//}
}
void RotateByY(float xValue)
{
YAngleChange += xValue * smoothSpeed * Time.deltaTime * 90;
targetTransY = Quaternion.Euler(0, YAngleChange, 0);
rotateY.transform.localRotation = Quaternion.Slerp(rotateY.transform.localRotation, targetTransY, 2);
}
void RotateByX(float yValue)
{
XAngleChange -= yValue * smoothSpeed * Time.deltaTime * 90;
XAngleChange = Mathf.Clamp(XAngleChange, -70f, 40f);
targetTransX = Quaternion.Euler(XAngleChange, 0, 0);
rotateX.transform.localRotation = Quaternion.Slerp(rotateX.transform.localRotation, targetTransX, 2);
}
}
人物控制:(挂载在人物身上)
public class MoveCtrl : MonoBehaviour
{
private Vector3 offset;
public GameObject mainCameraFa;
public Camera mainCamera;
private float smooth = 5f;
private float speed = 5f;
void Start()
{
offset = mainCameraFa.transform.position - transform.position;
}
void Update()
{
mainCameraFa.transform.position = Vector3.Lerp(mainCameraFa.transform.position, transform.position + offset, Time.deltaTime * smooth);
// Vector3.ProjectOnPlane( Vector3 vector,Vector3 planeNormal)
//得到投影向量 为vector到以planeNormal为法向量的平面上。
Vector3 forward = Vector3.ProjectOnPlane(mainCamera.transform.forward, Vector3.up).normalized;
Vector3 right = Vector3.ProjectOnPlane(mainCamera.transform.right, Vector3.up).normalized;
if (Input.GetKey(KeyCode.W))
{
transform.position += forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
transform.position -= forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.D))
{
transform.position += right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position -= right * speed * Time.deltaTime;
}
}
}
public class CameraCtrl : MonoBehaviour
{
public GameObject rotateY;
public GameObject rotateX;
private Quaternion targetTransY;
private Quaternion targetTransX;
private float mouseY;
private float mouseX;
private float YAngleChange;
private float XAngleChange;
private float smoothSpeed = 10f;
void LateUpdate()
{
//if (Input.GetMouseButton(0))
//{
mouseX = Input.GetAxis("Mouse X");
mouseY = Input.GetAxis("Mouse Y");
RotateByX(mouseY);
RotateByY(mouseX);
//}
}
void RotateByY(float xValue)
{
YAngleChange += xValue * smoothSpeed * Time.deltaTime * 90;
targetTransY = Quaternion.Euler(0, YAngleChange, 0);
rotateY.transform.localRotation = Quaternion.Slerp(rotateY.transform.localRotation, targetTransY, 2);
}
void RotateByX(float yValue)
{
XAngleChange -= yValue * smoothSpeed * Time.deltaTime * 90;
XAngleChange = Mathf.Clamp(XAngleChange, -70f, 40f);
targetTransX = Quaternion.Euler(XAngleChange, 0, 0);
rotateX.transform.localRotation = Quaternion.Slerp(rotateX.transform.localRotation, targetTransX, 2);
}
}
人物控制:(挂载在人物身上)
public class MoveCtrl : MonoBehaviour
{
private Vector3 offset;
public GameObject mainCameraFa;
public Camera mainCamera;
private float smooth = 5f;
private float speed = 5f;
void Start()
{
offset = mainCameraFa.transform.position - transform.position;
}
void Update()
{
mainCameraFa.transform.position = Vector3.Lerp(mainCameraFa.transform.position, transform.position + offset, Time.deltaTime * smooth);
// Vector3.ProjectOnPlane( Vector3 vector,Vector3 planeNormal)
//得到投影向量 为vector到以planeNormal为法向量的平面上。
Vector3 forward = Vector3.ProjectOnPlane(mainCamera.transform.forward, Vector3.up).normalized;
Vector3 right = Vector3.ProjectOnPlane(mainCamera.transform.right, Vector3.up).normalized;
if (Input.GetKey(KeyCode.W))
{
transform.position += forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
transform.position -= forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.D))
{
transform.position += right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position -= right * speed * Time.deltaTime;
}
}
}
相关文章推荐
- unity中实现的第三人称摄像机控制脚本。
- 在unity的player角色控制中实现MVC模式
- 利用HttpModule和forms身份验证,实现角色验证控制
- 基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
- 基于角色的访问控制'的权限管理的数据库的设计实现
- [BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制
- 基于角色的安全控制的架构的实现实例
- 如何用提供程序实现角色控制
- 解决Unity方向键控制角色行走时,鼠标箭头会一直回到场景的中心点问题
- 基于授权和角色的访问控制的设计和实现(二)
- Unity学习笔记——利用脚本实现对一个物体的第三人称观察
- springboot+shiro+mybatis实现角色权限控制
- unity用方向键来控制角色上楼梯
- Unity_如何实现游戏中角色多段跳的效果(射线实现)
- 基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
- SpringMVC3.1.1+Spring3.1.1+Hibernate4+Velocity+EasyUI+ZTree实现RBAC基于角色的访问控制(一)
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- Unity 3D 中实现对物体 位置(position) 旋转(rotation) 大小(scale) 的全面控制
- SpringMVC3.1.1+Spring3.1.1+Hibernate4+Velocity+EasyUI+ZTree实现RBAC基于角色的访问控制(二)
- 基于角色-功能-资源的权限控制模型的设计与实现-引子