Unity3D:鼠标移动视角+键盘移动位置实现

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);
    }
}
发布了5 篇原创文章 · 获赞 1 · 访问量 348

猜你喜欢

转载自blog.csdn.net/weixin_44013036/article/details/103778364
今日推荐