Unity3D鼠标移动视角+键盘移动位置实现
鼠标移动视角实现:
一、Ui操作
在物体下创建一个子摄像机,把它作为物体的眼睛,并调到一定高度
二、代码实现
将本脚本放到子物体Camera上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//将脚本放到子物体Camera上
public class MouseView2 : MonoBehaviour {
//Mouse direction
private Vector2 mD;
//The capsule parent!
private Transform myBody;
// Use this for initialization
void Start () {
myBody = this.transform.parent;
}
// Update is called once per frame
void Update () {
Vector2 mC = new Vector2
(Input.GetAxisRaw("Mouse X"),
Input.GetAxisRaw("Mouse Y"));
mD += mC;
//上下控制相机
//绕x轴旋转,旋转大小
this.transform.localRotation =
Quaternion.AngleAxis(-mD.y, Vector3.right);
//左右控制父级
//绕y轴旋转,旋转大小
myBody.localRotation =
Quaternion.AngleAxis(mD.x, Vector3.up);
}
}
解析:转向可以分为上下转动,以及左右转动。
上下转动:上下转动通常不能够让物体转动,不然物体造型会发生倾斜,像这个样子!
所以我们命令上下转动为摄像机,左右转动为父物体。
this.transform.localRotation 控制摄像机方向
this.transform.parent.localRotation 控制父物体方向
键盘移动位置实现:
一、Ui操作
添加CharacterController组件
二、代码实现
将本代码放到父物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControll : MonoBehaviour {
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
//md is move Direction
private Vector3 mD = Vector3.zero;
private void Update()
{
CharacterController controller = GetComponent<CharacterController>();
//CharacterController组件中自带检测是否在地面方法
if(controller.isGrounded)
{
//范围(-1,1)
float h = Input.GetAxis("Horizontal");
//范围(-1,1)
float v = Input.GetAxis("Vertical");
//获取单位向量
mD = new Vector3(h, 0, v);
//从自身坐标到世界坐标变换方向。
mD = transform.TransformDirection(mD);
//单位向量乘速度
mD *= speed;
//跳跃检测
if (Input.GetButton("Jump"))
mD.y = jumpSpeed;
}
mD.y -= gravity * Time.deltaTime;
////CharacterController组件移动方法
controller.Move(mD * Time.deltaTime);
}
}