3D遊戲鏈遊系統開發(原始碼)
using
UnityEngine;
public
class
Leg : MonoBehaviour
{
//可編輯
[SerializeField]
public Transform leg;
[SerializeField]
private Transform foot;
[SerializeField]
private Transform legRoot;
[SerializeField]
private Transform IK_Target;
[SerializeField]
private
float length;
[SerializeField]
private Leg otherLeg;
[SerializeField]
private Transform rayOrigin;
[SerializeField]
private LayerMask layer;
//內部欄位
private
float legX;
private
float legY;
private
bool isLerp;
private Vector2 target;
private
float shmTime;
//公共欄位
[HideInInspector]
public
bool Active;
private
void Update()
{
//腿的弧度
float x_adj = legRoot.position.x - legX;
float y_opp = legRoot.position.y - legY;
float legRad = Mathf.Atan2(y_opp, x_adj);
//腳的弧度
float tempX = legRoot.position.x - Mathf.Cos(legRad) * length;
float tempY = legRoot.position.y - Mathf.Sin(legRad) * length;
x_adj = tempX - IK_Target.position.x;
y_opp = tempY - IK_Target.position.y;
float footRad = Mathf.Atan2(y_opp, x_adj);
//腿的位置
legX = IK_Target.position.x + Mathf.Cos(footRad) * length;
legY = IK_Target.position.y + Mathf.Sin(footRad) * length;
//最終定位
leg.SetPositionAndRotation(
new Vector2(legX, legY), Quaternion.Euler(
new Vector3(
0,
0, legRad * Mathf.Rad2Deg)));
foot.SetPositionAndRotation(
new Vector2(IK_Target.position.x, IK_Target.position.y), Quaternion.Euler(
new Vector3(
0,
0, footRad * Mathf.Rad2Deg)));
//射線,尋找蜘蛛的下一次落腳點
RaycastHit2D hit = Physics2D.Raycast(rayOrigin.position, -rayOrigin.up,
5, layer);
if (hit)
{
target = hit.point;
Debug.DrawRay(rayOrigin.position, rayOrigin.up * (hit.point - (Vector2)rayOrigin.position) -
new Vector2(
0,
0.1f), Color.red,
0.05f);
}
//根據條件來控制蜘蛛的步伐
if (Mathf.Abs(target.x - IK_Target.position.x) >
0.7f) { isLerp =
true; }
if (isLerp && Active)
{
IK_Target.position = Vector2.MoveTowards(IK_Target.position, target +
new Vector2(
0.1f,
0), Time.deltaTime *
3);
shmTime += Time.deltaTime;
IK_Target.position +=
new Vector3(
0, Mathf.Cos(shmTime) *
1.5f) * Time.deltaTime;
//簡諧運動做為蜘蛛抬腿運動的數學模型
}
if (Vector2.Distance(IK_Target.position, target +
new Vector2(
0.1f,
0)) <
0.1f)
{
isLerp =
false;
shmTime =
0;
//協調蜘蛛的另一支腿
Active =
false;
otherLeg.Active =
true;
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009264/viewspace-2897080/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 3D鏈遊系統開發(功能詳情)丨3D鏈遊系統開發(流程原始碼)3D原始碼
- 鏈遊系統開發流程 元宇宙3D鏈遊系統開發(開發邏輯) 元宇宙3D鏈遊開發成品原始碼元宇宙3D原始碼
- 3D鏈遊開發功能,3D鏈遊系統開發技術分析及原始碼3D原始碼
- Gamefi鏈遊系統開發(DAPP遊戲開發)丨Gamefi鏈遊系統開發(開發案例)丨原始碼GAMAPP遊戲開發原始碼
- 3D元宇宙鏈遊開發說明 鏈遊系統開發技術方案 3D鏈遊原始碼模式3D元宇宙原始碼模式
- 區塊鏈遊戲系統開發(Gamefi鏈遊開發案例)丨Gamefi鏈遊系統開發詳細及原始碼區塊鏈遊戲GAM原始碼
- 卡牌鏈遊NFT遊戲系統開發/原始碼/卡牌鏈遊/NFT遊戲原始碼
- NFT遊戲鏈遊系統開發技術詳細丨NFT遊戲鏈遊DAPP開發原始碼模式遊戲APP原始碼模式
- NFT鏈遊系統開發,區塊鏈NFT卡牌遊戲原始碼區塊鏈遊戲原始碼
- NFT遊戲GameFi元宇宙(鏈遊遊戲)系統原始碼開發(詳情方案)遊戲GAM元宇宙原始碼
- 鏈遊開發功能版/NFT鏈遊系統開發運營版/區塊鏈遊戲系統開發/成熟技術/原始碼案例區塊鏈遊戲原始碼
- NFT區塊鏈遊戲系統開發技術方案丨NFT區塊鏈遊戲系統開發原始碼詳解區塊鏈遊戲原始碼
- Demole NFT3D鏈遊系統開發模式(3D遊戲開發)3D模式遊戲開發
- NFT數字藏品系統開發原始碼部署丨NFT鏈遊元宇宙遊戲系統開發原始碼搭建原始碼元宇宙遊戲
- islandswap鏈遊系統開發(開發說明)丨islandswap鏈遊遊戲系統開發功能遊戲
- 元宇宙3D鏈遊系統開發(說明分析),3D鏈遊系統開發(規則設計)元宇宙3D
- GameFi/NFT鏈遊遊戲系統技術開發/GameFi鏈遊開發/NFTGAM遊戲
- NFT元宇宙鏈遊開發|需求|遊戲|原始碼示例元宇宙遊戲原始碼
- GameFi鏈遊開發/GameFi+NFT鏈遊遊戲系統DApp開發/Defi/nftGAM遊戲APP
- 元宇宙鏈遊系統開發原始碼(成熟技術)元宇宙原始碼
- 雜湊遊戲原始碼開發搭建丨hash雜湊遊戲競猜原始碼搭建丨雜湊遊戲系統開發遊戲原始碼
- HASH雜湊遊戲原始碼丨HASH雜湊遊戲系統開發丨HASH雜湊遊戲開發成品原始碼部署原始碼遊戲開發
- GameFi+NFT鏈遊開發技術/NFT鏈遊遊戲系統程式設計開發程式碼示例GAM遊戲程式設計
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- NFT鏈遊遊戲/養成遊戲/農場合成遊戲系統合約開發程式碼示例遊戲
- NFT鏈遊/Stepn跑鞋鏈遊系統開發技術/Stepn跑鞋原始碼/Defi/NFT原始碼
- HASH雜湊遊戲競猜模式系統開發方案(原始碼部署)區塊鏈雜湊遊戲開發多種遊戲介紹模式原始碼區塊鏈遊戲開發
- NFT鏈遊/NFT遊戲元宇宙開發/鏈遊系統開發設計詳情遊戲元宇宙
- 雜湊遊戲系統丨雜湊遊戲系統開發(演示版)丨雜湊遊戲開發原始碼及案例遊戲開發原始碼
- GameFi鏈遊NFT遊戲開發示例丨GameFi鏈遊遊戲系統開發特點丨DEFI丨nftGAM遊戲開發
- 3D丨2D鏈遊系統開發實現技術方案及原始碼3D原始碼
- NFT元宇宙鏈遊系統開發說明(原始碼示例)元宇宙原始碼
- 紅酒鏈遊WineGometa系統模式開發原始碼詳情Go模式原始碼
- 雜湊遊戲競猜系統開發原始碼(DEMO)hash遊戲競猜系統開發瞭解方案遊戲原始碼
- The Beacon鏈遊NFT遊戲開發系統搭建技術遊戲開發
- 元宇宙的系統原始碼構建、遊戲開發元宇宙原始碼遊戲開發
- 雜湊競猜遊戲(馬蹄鏈)系統模式開發程式碼示例(原始碼部署)遊戲模式原始碼
- 智慧合約鏈遊開發詳情丨智慧合約鏈遊系統開發(開發方案)及原始碼分析原始碼