unity学习--003:角色控制器(中)

  在上篇 unity学习--003:角色控制器(上)中,看了点角色控制的基本实现方法,鼠标和键盘控制比较粗糙的实现。

  在这篇中,主要介绍几个unity封装的角色控制方法,

  然后预计在下篇中综合介绍几种主流的角色控制方法。

  话不多说,开搞:

  依旧是上次拖过来的几个模型

  

  不过,这次添加了地形,素材,和天空盒,自然光,至于怎么加的,请看这里  添加地形等

  不在黑黑的,心情也好点了,下面来介绍几种unity自带的角色控制操作。(这些方法都是unity自带的API)

  1、CharacterController.move()方法

    使用这个方法前需要向角色添加CharacterController组件

      

然后像角色中添加代码脚本

//速度
    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<CharacterController>();
        //判断是否着地
        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);
    }

  这里是改变角色的方向后再改变他的位置,显然这里的移动方向不受角色朝向的影响,是绝对位置,世界坐标系,

  2、CharacterController.simple()方法

public float speed = 3.0F;
    public float rotateSpeed = 3.0F;
    void Update()
    {
        CharacterController controller = GetComponent<CharacterController>();
        //角色转向
        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
        Vector3 forward = transform.TransformDirection(Vector3.forward);
        float curSpeed = speed * Input.GetAxis("Vertical");
        //简单移动
        controller.SimpleMove(forward * curSpeed);
    }

这里是简单移动,和上一方法不同的是,他是自身坐标系,方向随着角色方向变化,

还有这里不好实现跳跃,

  3、rigidbody.MovePosition()

private Vector3 speed =Vector3.zero;
	void FixedUpdate() {
        speed = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
		rigidbody.MovePosition(rigidbody.position + speed *3* Time.deltaTime);
	}

  通过刚体实现角色的移动,刚体和角色控制器有所不同,角色控制器包含刚体的一部分属性,并且不受力的影响

  这节会不断更新遇到的角色控制方法,在介绍完Camera后会尝试实现几种主流的操作方法

时间: 2024-12-20 15:49:16

unity学习--003:角色控制器(中)的相关文章

unity学习--003:角色控制器

今天研究模型控制器,探寻下怎么实现基本的控制模型方法 首先,我随便拉了几个小模型 这就是猪脚了.先添加常用的前后左右,就是WSAD,按wsad就使角色的transform组件变化下位置, private float MoveSpeed = 3f; void Start() { } void Update() { if(Input.GetKey(KeyCode.A)) { //改变角色X轴 transform.Translate(Vector3.right * -MoveSpeed * Time.

【Unity 3D】学习笔记三十八:角色控制器

角色控制器 在unity中,已经帮我们实现的上下左右跳等动作,并将他们封装成了角色控制器.角色控制器保存在unity标准资源包中,可以说是非常的强大.可以模拟第一或者第三人称视角.不受刚体的限制,非常适用于表现游戏中的主角运动.首先还是导入标准资源包.在project视图中点击右键,选择import package--character controller 第一人称 第一人称好比用自己的眼睛来观察游戏世界.其原理就是控制scene视图中的摄像机的移动,所以屏幕显示永远都是主角正前方的画面. 将

Unity手游之路&lt;七&gt;角色控制器

向原创致敬http://blog.csdn.net/janeky/article/details/17406095 我们要控制角色的移动,可以全部细节都由自己来实现.控制角色模型的移动,同时移动摄影机,改变视角.当然Unity也提供了一些组件,可以让我们做更少的工作,实现我们所期望的功能.今天我们就一起系统来学习相关的内容吧. Charactor Controller(角色控制器) "角色控制器允许你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体.角色控制器不受力的影响,仅仅当你调用Mov

【Unity】11.1 角色控制器 (Character Controller)

分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制.如果要创建类人角色,可使用角色控制器 (Character Controller).这可以是第三人称游戏 (Third Person Platformer) 中的主角色.FPS 射击者或任何敌人角色. 二.基本概念 第三人称游戏中的这些控制器由于无规律可循,所以无法遵守固定的物理规则,例如,让某辆车每小时跑 90 英里,

【Unity】4.4 添加角色控制器

分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 设计完毕基本的场景后,一般都需要先运行看看效果如何,即先让场景"动起来",以方便观察不同的位置,而不是仅仅观察固定摄像机位置的死板板的场景. 这就是角色控制器的功能(实际上还不仅仅是只有这些功能). Unity已经帮你设计好了角色控制器组件(Characters),你只需要导入它,然后就可以直接使用了. 二.导入Unity自带的脚色控制器 要让你设计的场景动起来,只需要导入Unity自带的Character

unity学习--005:模仿几种游戏操作方式的实现

结合前面的 角色控制和镜头控制 在这里实现几种综合的操作方式 1. CF类的 第一视角控制方式 此类操控方式将摄像机绑定猪脚头部模拟第一视角 移动方式以unity自带的CharacterController.Move()方法为基础进行改进. 首先给角色判定一个Camera和下面的C#脚本 public float speed = 3.0F; public float rotateSpeed = 3.0F; void Update() { CharacterController controlle

ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

转自:http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送表单实现的.具体使用中,主要使用以下三种方法. 1.通过Request.Form读取表单数据        2.通过FormCollection读取表单数据        3.直接读取表单数据对象 下边是我学习这些东西时的一点总结 1.通过Request.Form读取表单数据      首先定

C#版官方角色控制器脚本

将官方自带的角色控制器脚本,改写为C#版,以下为所有代码: CharacterMotor.cs  主要设置角色控制的系数,如运动,跳跃,移动,滑动等.第一人称与第三人称主角模型的移动与旋转的角度最后都是在这里计算的. CharacterMotor.cs  代码: 1 using UnityEngine; 2 using System.Collections; 3 4 /** 5 *主要设置角色控制的系数,如运动,跳跃,移动,滑动等.第一人称与第三人称主角模型的移动与旋转的角度最后都是在这里计算的

Unity Mecanim在大型mmo中的应用

Unity的新动画系统Mecanim出来也有一阵子了,我的第一个Unity项目就是使用这个动画系统.但是只是做了最基本的应用,没有做深入的研究. Mecanim的好处有三点:1.动画重定向,可以最大程度的复用动画资源   2.可视化编辑的状态机    3.Blend Tree可以方便的做动画融合,例如一边跑一边攻击. 但是对于我而言,Mecanim在使用上感觉有些蹩脚,最大的问题就是在可视化的状态机编辑上了. 这个状态机让动画编辑变得容易了,不需要一行代码就可以控制动作的流转,像Temple R