標籤:unity
還有半小時就下班了,寫一下今天遇到的問題、處理方法以及一些自己的理解。理解的不一定對,還希望大家指正。
今天我做的效果是,hero的移動。
以前做過用的是transform.Translate(Vector3.forward*Time.deltaTime*Speed);
但是這樣做有些bug就是移動不持續,當然你也可以加上時間延時函數,一點點的類比動畫效果,太麻煩了(我就想這樣幹)。
後來,老師指導我加力,rigidbody.AddForce(new Vector3(1,0,0));我這樣想太單純了,這樣做的效果就是,hero倒了。
沒辦法,後來拿到了一段代碼
rigidbody.velocity = transform.forward * heroXSpeed*1.1f;
walkDistance -= heroXSpeed * Time.fixedDeltaTime*1.1f;
核心是第一句rigidbody.velocity群中有說是計算剛體速度向量(好官方),有說給物體一個初速度。反正就是這個意思。
不過這段話放在Update()函數裡:
void Update (){animation.Play ("walk");rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;}hero移動也有動畫
但是如果我寫一個觸發
void Update (){animation.Play ("walk");//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;if (Input.GetKey (KeyCode.D)) {rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;//rigidbody.velocity =new Vector3(1,0,0);}}這樣,當我按下D鍵,hero執行移動就沒有效果。
我又修改了一下代碼
void Update (){animation.Play ("walk");//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;if (Input.GetKey (KeyCode.D)) {rigidbody.velocity += transform.forward * heroXSpeed * 1.1f;//rigidbody.velocity =new Vector3(1,0,0);}}
加了一個+號,它就可以了。這樣,我就推論出來,Update()是一幀一幀的渲染,可以即時顯示效果,但是加入判斷之後就需要等待響應,無法做到即時的效果。
還有一種寫法是
// Update is called once per framevoid Update (){animation.Play ("walk");//rigidbody.velocity = transform.forward * heroXSpeed * 1.1f;if (Input.GetKey (KeyCode.D)) {//rigidbody.velocity += transform.forward * heroXSpeed * 1.1f;rigidbody.velocity =new Vector3(1,0,0);}}
這樣也可以移動,但是移動較快,和transform.Translate()效果差不多了。
註:heroXSpeed我取的是0.1f大家可以隨意
收拾收拾要下班了,啦啦啦。希望大家多多指教,畢竟我是新手,哈哈。