unity3D技术分享Unity3D与游戏开发

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

2020-02-22  本文已影响0人  Never肥宅

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;

可得正确效果

上一篇 下一篇

猜你喜欢

热点阅读