美文网首页unity3D技术分享Unity3D与游戏开发
Unity3D 学习笔记(一) 创建3d人物并让其动起来

Unity3D 学习笔记(一) 创建3d人物并让其动起来

作者: Never肥宅 | 来源:发表于2020-02-22 17:39 被阅读0次

    Unity3D 学习笔记 创建3d人物并让其动起来

    2020年2月9日

    17:03

    学习内容:b站傅老师的U3D黑魂复刻课程

    # 创建地板,添加地板砖材质

    调整大小,调整贴图

    # 创建一个胶囊,并添加角色模型

    取消胶囊模型的渲染,调整collider,添加rigidbody

    # 创建输入控制脚本

    创建playerinput添加给Playerhandle(空胶囊)

    定义输入按键

    [Header("-------------keys--------------")]

    public string keyUp = "w";

    public string keyDown = "s";

    public string keyLeft = "a";

    public string keyRight = "d";

    定义信号

    [Header("--------------signals----------------")]

    [SerializeField]

    private float Dup;

    [SerializeField]

    private float Dright;

    [SerializeField]

    private float velocityDup;

    [SerializeField]

    private float velocityDright;

    private float targetUp;

    private float targetRight;

    在update中计算

    void Update()

    {

    targetUp = (Input.GetKey(keyUp)?1.0f:0.0f) - (Input.GetKey(keyDown)?1.0f:0.0f);//是否向上

    targetRight = (Input.GetKey(keyRight)?1.0f:0.0f) - (Input.GetKey(keyLeft)?1.0f:0.0f);//是否向右

    Dup = Mathf.SmoothDamp(Dup,targetUp,ref velocityDup,0.1f);

    Dright = Mathf.SmoothDamp(Dup,targetRight,ref velocityDright,0.1f);

    }

    验证按下按键时,信号可以正确变化。

    但是当同时按下w和d或者是其他斜向运动,速度最大值可以达到单一方向运动的根号2倍,需要将方块映射到圆中。

    因此添加一个新的映射方法

    private Vector2 SquareToCircle(Vector2 input)

    {

    Vector2 res= Vector2.zero;

    res.x = input.x*Mathf.Sqrt(1-(input.y *input.y) /2);

    res.y = input.y*Mathf.Sqrt(1-(input.x *input.x) /2);

    return res;

    }

    添加新变量

    public float Dmag;

    public Vector3 Dvec;

    在update中进行计算

    Vector2 tempDAxis = SquareToCircle(new Vector2(Dright,Dup));

    Dmag = Mathf.Sqrt(tempDAxis.x * tempDAxis.x +tempDAxis.y * tempDAxis.y);

    Dvec = tempDAxis.x * transform.right + tempDAxis.y * transform.forward;

    可得正确效果

    相关文章

      网友评论

        本文标题:Unity3D 学习笔记(一) 创建3d人物并让其动起来

        本文链接:https://www.haomeiwen.com/subject/gkekqhtx.html