天天看點

真Unity3d_人物搖杆操作

一開始。。。。。一卡一頓的,人物很飄

public Vector3 TickMove(){
			float fThisMoveSpeed = EntityFSMMoveSpeed;
			Vector3 sThisSyncDir = EntityFSMDirection;
			if (m_pcGOSSI.fLastSyncSecond == 0) {
				m_pcGOSSI.fLastSyncSecond = Time.realtimeSinceStartup;
//				sThisSyncDir.z +=45;
			}
			float fSyncSecond = m_pcGOSSI.fLastSyncSecond;
			RealEntity.PlayerRunAnimation();
			Vector3 realPos2D = new Vector3(objTransform.position.x, 60, objTransform.position.z);


			//float fAngle = Vector3.Angle(sThisSyncDir, m_pcGOSSI.sLocalSyncDir);
			//位置計算
			float fThisRealTimeSinceStartup = Time.realtimeSinceStartup;
			//float fThisFrameTimeSpan = fThisRealTimeSinceStartup - m_pcGOSSI.fLastSyncSecond;
			float fThisFrameTimeSpan = fThisRealTimeSinceStartup - fSyncSecond;
			float fThisSyncDist = fThisMoveSpeed * fThisFrameTimeSpan;
	
			Vector3 sNewPos = sThisSyncDir * fThisSyncDist + realPos2D;
			if (sNewPos.magnitude > 0)
			{

				objTransform.position = sNewPos;
			}


			GameMethod.GetMainCamera.FixedUpdatePosition();
			m_pcGOSSI.fLastSyncSecond = fThisRealTimeSinceStartup;
			return sThisSyncDir;

		}
           

加了時間因子之後

雙線程渲染

(一開始tickmove()方法放在某觸發器下,發現并不均勻,現在放在LateUpdate事件裡面即可,因為LateUpdate的時間因子是固定的,移動起來看上就不卡了)

例如:currentTime += Time.deltaTime; //這裡的deltaTime是固定的

由于45度鏡頭,需要再調整方向夾角()

(很久之前寫的,寫的很爛,效果不對,哈哈哈,不要用)

public void TickRotate(Vector3 sThisSyncDir){
			sThisSyncDir = 15 * sThisSyncDir;//乘大15并沒有什麼作用,暫時發現這句代碼沒用的,隻是測試用	

			Quaternion DestQuaternion = Quaternion.LookRotation(sThisSyncDir);

			Quaternion sMidQuater = Quaternion.Lerp(objTransform.rotation, DestQuaternion, 3 * Time.deltaTime);//在from和to之間插值旋轉.
			objTransform.rotation = sMidQuater;

		}
           
public Vector3 TickMove(){
			float fThisMoveSpeed = EntityFSMMoveSpeed;
			Vector3 sThisSyncDir = EntityFSMDirection;
			if (m_pcGOSSI.fLastSyncSecond == 0) {
				m_pcGOSSI.fLastSyncSecond = Time.realtimeSinceStartup;
//				sThisSyncDir.z +=45;
			}
			float fSyncSecond = m_pcGOSSI.fLastSyncSecond;
			RealEntity.PlayerRunAnimation();
			Vector3 realPos2D = new Vector3(objTransform.position.x, 60, objTransform.position.z);

			//Vector3 sThisSyncDir = realPos2D;
			//Vector3 sThisSyncDir = sCrossPoint - realPos2D;
			//sThisSyncDir.y = 0;
			//sThisSyncDir = this.ConvertVector3ToDir (sThisSyncDir);//轉換角度
			//不使用機關向量,搖杆幅度越大,應該速度會越快
			sThisSyncDir.Normalize();
			sThisSyncDir = Quaternion.AngleAxis(-45, Vector3.up) * sThisSyncDir;

			//float fAngle = Vector3.Angle(sThisSyncDir, m_pcGOSSI.sLocalSyncDir);
			//位置計算
			float fThisRealTimeSinceStartup = Time.realtimeSinceStartup;
			//float fThisFrameTimeSpan = fThisRealTimeSinceStartup - m_pcGOSSI.fLastSyncSecond;
			float fThisFrameTimeSpan = fThisRealTimeSinceStartup - fSyncSecond;
			float fThisSyncDist = fThisMoveSpeed * fThisFrameTimeSpan;
	
			Vector3 sNewPos = sThisSyncDir * fThisSyncDist + realPos2D;
			if (sNewPos.magnitude > 0)
			{

				objTransform.position = sNewPos;
			}


			GameMethod.GetMainCamera.FixedUpdatePosition();
			m_pcGOSSI.fLastSyncSecond = fThisRealTimeSinceStartup;
			return sThisSyncDir;

		}
           

缺少打擊感

對于mmoa,王者榮耀之流的遊戲,重在操作流暢和技能準确性,以及伺服器和網絡的穩定,對實際鏡頭效果需求不大,一般的鏡頭即可

最終預計采用《武士2》的後搖鏡頭

參考資料:

北京unity3d創業團隊,對技術有研究,VR,C#等。。。。不錯的說

http://blog.csdn.net/sxbluebird/article/details/43225401

繼續閱讀