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原始碼
- 3D元宇宙鏈遊開發說明 鏈遊系統開發技術方案 3D鏈遊原始碼模式3D元宇宙原始碼模式
- 卡牌鏈遊NFT遊戲系統開發/原始碼/卡牌鏈遊/NFT遊戲原始碼
- 區塊鏈遊戲系統開發(Gamefi鏈遊開發案例)丨Gamefi鏈遊系統開發詳細及原始碼區塊鏈遊戲GAM原始碼
- Gamefi鏈遊系統開發(DAPP遊戲開發)丨Gamefi鏈遊系統開發(開發案例)丨原始碼GAMAPP遊戲開發原始碼
- NFT鏈遊系統開發,區塊鏈NFT卡牌遊戲原始碼區塊鏈遊戲原始碼
- NFT遊戲鏈遊系統開發技術詳細丨NFT遊戲鏈遊DAPP開發原始碼模式遊戲APP原始碼模式
- 鏈遊開發功能版/NFT鏈遊系統開發運營版/區塊鏈遊戲系統開發/成熟技術/原始碼案例區塊鏈遊戲原始碼
- islandswap鏈遊系統開發(開發說明)丨islandswap鏈遊遊戲系統開發功能遊戲
- NFT遊戲GameFi元宇宙(鏈遊遊戲)系統原始碼開發(詳情方案)遊戲GAM元宇宙原始碼
- 元宇宙3D鏈遊系統開發(說明分析),3D鏈遊系統開發(規則設計)元宇宙3D
- GameFi/NFT鏈遊遊戲系統技術開發/GameFi鏈遊開發/NFTGAM遊戲
- NFT數字藏品系統開發原始碼部署丨NFT鏈遊元宇宙遊戲系統開發原始碼搭建原始碼元宇宙遊戲
- NFT鏈遊/Stepn跑鞋鏈遊系統開發技術/Stepn跑鞋原始碼/Defi/NFT原始碼
- Demole NFT3D鏈遊系統開發模式(3D遊戲開發)3D模式遊戲開發
- 3D丨2D鏈遊系統開發實現技術方案及原始碼3D原始碼
- 紅酒鏈遊WineGometa系統模式開發原始碼詳情Go模式原始碼
- 元宇宙鏈遊系統開發原始碼(成熟技術)元宇宙原始碼
- GameFi+NFT鏈遊開發技術/NFT鏈遊遊戲系統程式設計開發程式碼示例GAM遊戲程式設計
- GameFi鏈遊開發/GameFi+NFT鏈遊遊戲系統DApp開發/Defi/nftGAM遊戲APP
- 智慧合約鏈遊開發詳情丨智慧合約鏈遊系統開發(開發方案)及原始碼分析原始碼
- NFT元宇宙鏈遊系統開發說明(原始碼示例)元宇宙原始碼
- NFT鏈遊系統開發流程原始碼部署方案(成熟技術)原始碼
- NFT鏈遊/NFT遊戲元宇宙開發/鏈遊系統開發設計詳情遊戲元宇宙
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- NFT元宇宙鏈遊開發|需求|遊戲|原始碼示例元宇宙遊戲原始碼
- stepn跑鞋鏈遊系統開發技術說明及案例原始碼原始碼
- GameFi鏈遊NFT遊戲開發示例丨GameFi鏈遊遊戲系統開發特點丨DEFI丨nftGAM遊戲開發
- islandswap鏈遊系統開發技術原理丨islandswap鏈遊系統開發詳解
- NFT元宇宙鏈遊/系統開發/NFT數藏/NFT鏈遊遊戲模式元宇宙遊戲模式
- NFT區塊鏈遊戲系統開發技術方案丨NFT區塊鏈遊戲系統開發原始碼詳解區塊鏈遊戲原始碼
- NFT鏈遊系統開發(模式定製)NFT元宇宙鏈遊系統開發方案模式元宇宙
- Stepn跑鞋跑步鏈遊系統開發/趣步系統開發/詳情案例/成熟技術/原始碼版原始碼
- NFT遊戲卡牌鏈遊系統開發(技術元件)遊戲元件
- NFT鏈遊遊戲/養成遊戲/農場合成遊戲系統合約開發程式碼示例遊戲
- NFT理途旅遊開發原始碼/理途旅遊系統原始碼開發/理途旅遊技術開發原理原始碼