Unity3D 學(xué)習(xí)筆記 創(chuàng)建3d人物并讓其動(dòng)起來(lái)
2020年2月9日
17:03
學(xué)習(xí)內(nèi)容:b站傅老師的U3D黑魂復(fù)刻課程
# 創(chuàng)建地板,添加地板磚材質(zhì)
調(diào)整大小,調(diào)整貼圖
# 創(chuàng)建一個(gè)膠囊,并添加角色模型
取消膠囊模型的渲染,調(diào)整collider,添加rigidbody
# 創(chuàng)建輸入控制腳本
創(chuàng)建playerinput添加給Playerhandle(空膠囊)
定義輸入按鍵
[Header("-------------keys--------------")]
public string keyUp = "w";
public string keyDown = "s";
public string keyLeft = "a";
public string keyRight = "d";
定義信號(hào)
[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中計(jì)算
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);
}
驗(yàn)證按下按鍵時(shí),信號(hào)可以正確變化。
但是當(dāng)同時(shí)按下w和d或者是其他斜向運(yùn)動(dòng),速度最大值可以達(dá)到單一方向運(yùn)動(dòng)的根號(hào)2倍,需要將方塊映射到圓中。
因此添加一個(gè)新的映射方法
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中進(jìn)行計(jì)算
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;
可得正確效果