您当前的位置: 首页 >  unity

幻世界

暂无认证

  • 0浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Unity开发小技巧】Unity控制人物行走的几种表现方式

幻世界 发布时间:2019-06-28 17:09:24 ,浏览量:0

目录

一:第三人称视角

1.左右键旋转,前后键前进后退

2.鼠标控制自动寻路

二:第一人称视角

1.相机设置为玩家子节点

2.鼠标自由视角 CharacterController

一:第三人称视角 1.左右键旋转,前后键前进后退
// Update is called once per frame
	void Update () {
        float ver = Input.GetAxis("Vertical");
        transform.position += transform.forward * ver * Time.deltaTime * 5;

        float hor = Input.GetAxis("Horizontal");
        transform.Rotate(transform.up * hor * Time.deltaTime * 100);
    }
-----------------------------------------------------------------------------
 private void Update()
    {
        if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //前
        {
            this.transform.Translate(Vector3.forward * m_speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //后
        {
            this.transform.Translate(Vector3.forward * -m_speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //左
        {
            this.transform.Translate(Vector3.right * -m_speed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //右
        {
            this.transform.Translate(Vector3.right * m_speed * Time.deltaTime);
        }
    }

2.鼠标控制自动寻路

参考之前的记录 Unity的自动寻路NavMessAgent系统(一)_幻世界-CSDN博客_最终幻想自动寻路

二:第一人称视角 1.相机设置为玩家子节点

左右键旋转,前后键前进后退,相机设置为目标子节点固定相对位置效果如上图

鼠标控制相机旋转,效果如上图

// 控制玩家移动
	void Update () {
        float ver = Input.GetAxis("Vertical");
        transform.position += transform.forward * ver * Time.deltaTime * 5;
    }
       控制相机视角
 //鼠标左键控制上下转动
        if (Input.GetMouseButton(0))
        {
            transform.Rotate(-Input.GetAxis("Mouse Y") * 2, 0, 0);
        }
        //鼠标右键控制左右转动
        if (Input.GetMouseButton(1))
        {
            transform.Rotate(0, Input.GetAxis("Mouse X") * 2, 0);
        }
2.鼠标自由视角 CharacterController

 两个脚本,PlayerMovement控制身体的位移,PlayerCamera控制自己的相机的旋转

 

public class PlayerMovement : MonoBehaviour
{
    public CharacterController controller;
    public float speed = 12f;
    public float gravity = 10f;
    public float jumpHeight = 2f;
    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;//地面layer
    Vector3 velocity;
    bool isGrounded;//是否落地
    float x;
    float z;
    // Update is called once per frame
    void Update()
    {
        x = Input.GetAxis("Horizontal");
        z = Input.GetAxis("Vertical");
        
        Vector3 move = transform.right * x + transform.forward * z;
        controller.Move(move * speed * Time.deltaTime);

        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
        if (isGrounded && velocity.y < 0)
        {
            velocity.y = -2f;
        }

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight  * gravity);
        }
        velocity.y -= gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
    }
}

 

public class PlayerCamera : MonoBehaviour
{
    private float mouseSensitivity = 300;
    private Transform playerBody;
    // Start is called before the first frame update
    void Awake()
    {
        Cursor.lockState = CursorLockMode.Locked;
        playerBody = transform.parent;
    }

    // Update is called once per frame
    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        playerBody.Rotate(Vector3.up * mouseX);

        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
        transform.localEulerAngles -= new Vector3(mouseY, 0f, 0f);

    }
}

关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.0452s