Unity中给Player设置第一人称视角的3个方法

1.

摄像机成为胶囊的子物体,摄像机上放代码:

using UnityEngine;
using System.Collections;

public class Sj : MonoBehaviour {
    public GameObject player;           //前台拖入胶囊
    Vector3 rot = new Vector3(0, 0, 0);   //先定义一个Vectory3类型的变量rot(0,0,0)
   public float speed;           //这个是鼠标灵敏度
    void Start() {

    }

    void Update() {
        float MouseX = Input.GetAxis("Mouse X")*speed;       
        float MouseY = Input.GetAxis("Mouse Y")*speed;
        rot.x = rot.x - MouseY;
        rot.y = rot.y + MouseX;  
        rot.z = 0;   //锁定摄像头移动的角度z轴,防止左右倾斜
        transform.eulerAngles = rot;   //所有方向设定好后,摄像头的角度=rot
        player.transform.eulerAngles = new Vector3(0, rot.y, 0);  //角色角度只能通过MouseX改变大小,也就是锁定rot.y
    }
}
场景加上碰撞器

Player胶囊身上加上如下代码:

using UnityEngine;
using System.Collections;

public class PlayerMove : MonoBehaviour {
    public float speed;
    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame
    void Update() {
        float MoveX = Input.GetAxis("Horizontal");
        float MoveY = Input.GetAxis("Vertical");
        transform.Translate(new Vector3(MoveX, 0, MoveY) *
            Time.deltaTime * speed);
        if (Input.GetButtonDown("Jump")) {
            Rigidbody rig = GetComponent();
            rig.AddForce(new Vector3(0, 0.5f, 0), ForceMode.Impulse);
        }
    }
}
这是用刚体做的

就可以移动了

2.给胶囊加上角色控制器

去掉胶囊控制器

代码:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public float speed = 6.0F;
    public float jumpSpeed = 8.0F;
    public float gravity = 20.0F;
    private Vector3 moveDirection = Vector3.zero;
    void Update() {
        CharacterController controller = GetComponent();
        if (controller.isGrounded) {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            if (Input.GetButton("Jump"))
                moveDirection.y = jumpSpeed;
            
        }
        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}

直接把官方的API文档放进去就行了,这是利用角色控制器做的


3.Unity3d自己已经附带了一个第一人称视角,我们只需要动动手指,导包即可

然后我们新建一个文件夹,以存放我们的包

双击进入文件夹,然后右键点击文件夹内任意位置弹出卷展栏,然后点击:

Import Package -> Charactor Controllor 

(即导入“角色控制包”)

Unity中给Player设置第一人称视角的3个方法_第1张图片

紧接着弹出了一个窗口,我们新不管他里面有什么,先点击ALL(如何不点他的话,unity3d可能会自己报错),然后再点击Import导出包。

       添加角色

稍等片刻,我们会发现文件夹下面出现了两个包,那就证明导入成功!


我们先不理Editor文件夹,进入Standard Assets->Character Controllers->First Person Controller (然后就看到这个:“First Person Controller”是一个胶囊,其实他就是第一人称视角控制器)

好的,我们直接把这个“First Person Controller”拖放到场景中,大功告成!(它的旁边还有一个叫“3rd Person Controller”,这是第三人称视角,也可以拖进去。)

注意事项:

第一人称视角与第三人称视角不可以同时出现在场景中!(否则会报错的!)

 

总结:1,2种方法,角色控制器是控制Player移动的,摄像机上的代码是弄第一人称视角的!摄像机放在Player的子物体

          第三个方法,不用把摄像机放在Player的子物体上,前两种需要把摄像机成为Player的子物体。


补充:加上这个代码,鼠标运行时不可见

void Start() {
        Cursor.visible = false;
    }
加上这个代码,限制视角的上扬下俯

if (rot.x<=-70) {
            transform.eulerAngles = new Vector3(-70, rot.y, 0);
        }
        if (rot.x >= 11) {
            transform.eulerAngles = new Vector3(11, rot.y, 0);
        }




你可能感兴趣的:(自学)