成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Unity3D基礎(chǔ)教程:簡(jiǎn)單AI編寫(xiě)

開(kāi)發(fā) 游戲開(kāi)發(fā)
開(kāi)發(fā)環(huán)境:Window7、Unity3D 3.4.1、MB525defy、Android 2.2.1。將給大家介紹簡(jiǎn)單AI的編寫(xiě)。

 1.   Unity簡(jiǎn)單AI編寫(xiě)

由于這次介紹的AI很簡(jiǎn)單,代碼直接貼上,AI分成四個(gè)狀態(tài):思考,轉(zhuǎn)身,移動(dòng),攻擊,這里只是初步實(shí)現(xiàn),所以想實(shí)現(xiàn)簡(jiǎn)單點(diǎn)的操作,就像自動(dòng)范圍內(nèi)隨機(jī)移動(dòng),鎖敵攻擊,超出距離復(fù)位,近距離察覺(jué)等。

  1. Enemy_AI.js 
  2.  
  3. private var Regression : Vector3; 
  4. public var Player_Prefab : Transform; 
  5. public var Enemy_State : String; 
  6. public var Doing : boolean = true
  7. public var Range : float = 4.0
  8. public var Bullet : Transform; 
  9. public var Bullet_Prefab : Transform; 
  10. //初始化敵人方向和位置 
  11. function Start() 
  12. transform.localEulerAngles.y = Random.value * 360
  13. Regression = transform.position; 
  14. //敵人行動(dòng)模式 
  15. public var Thinking : boolean = true
  16. public var Thinking_Time : float = 1.0
  17. private var relativePos : Vector3; 
  18. private var rotation : Quaternion; 
  19. public var Facing : boolean = false
  20. public var Facing_Time : float  = 2.0
  21. public var Facing_Speed : float = 2.0
  22. public var Moving : boolean = false
  23. public var Moving_Speed : float = 0.5
  24. public var Moving_Time : float = 4.0
  25. public var Moving_Back : boolean = false
  26. public var Attacking : boolean = false
  27. private var Bullet_DO : boolean = true
  28. public var Bullet_CD : float = 0.2
  29. //隨機(jī)移動(dòng)方位 
  30. private var R_Position : Vector3; 
  31. function Update () 
  32. if(Attacking) 
  33. Enemy_State = "Attacking"
  34. Facing = true
  35. Moving = true
  36. //Doing = true; 
  37. Thinking = false
  38. var dist2 = Vector3.Distance(Regression, transform.position); 
  39. if(dist2 > 20
  40. relativePos = Regression - transform.position; 
  41. rotation = Quaternion.LookRotation(relativePos); 
  42. Attacking = false
  43. Moving_Back = true
  44. if(!Moving_Back) 
  45. var dist = Vector3.Distance(Player_Prefab.position, transform.position); 
  46. if(dist > 100
  47. Attacking = false
  48. return
  49. else if(dist < 5
  50. Attacking = true
  51. RayJudge(); 
  52. transform.localEulerAngles.x = 0
  53. transform.localEulerAngles.z = 0
  54. if(Thinking && !Attacking && !Moving_Back) 
  55. Enemy_State = "Thinking"
  56. if(Doing) 
  57. StartCoroutine(Think(Thinking_Time)); 
  58. Doing = false
  59. if(Facing) 
  60. Enemy_State = "Facing"
  61. if(Attacking) 
  62. relativePos = Player_Prefab.position - transform.position; 
  63. rotation = Quaternion.LookRotation(relativePos); 
  64. transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Facing_Speed * 4); 
  65. else if(Moving_Back) 
  66. transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Facing_Speed * 4); 
  67. else 
  68. transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Facing_Speed); 
  69. if(Doing) 
  70. StartCoroutine(Face(Facing_Time)); 
  71. Doing = false
  72. if(Moving) 
  73. Enemy_State = "Moving"
  74. if(Moving_Back) 
  75. transform.Translate(Vector3.forward * Time.deltaTime * Moving_Speed * 6); 
  76. else if(dist > 2
  77. if(Attacking) 
  78. transform.Translate(Vector3.forward * Time.deltaTime * Moving_Speed * 4); 
  79. else 
  80. transform.Translate(Vector3.forward * Time.deltaTime * Moving_Speed); 
  81. if(Doing && !Attacking) 
  82. StartCoroutine(Move(Moving_Time)); 
  83. Doing = false
  84. //前方鎖敵 
  85. function RayJudge() 
  86. var layerMask = 1 << 2
  87. layerMask = ~layerMask; 
  88. var hit : RaycastHit; 
  89. if(Physics.Raycast (transform.position, transform.TransformDirection(Vector3.forward), hit, 20,layerMask)) 
  90. var distanceToForward = hit.distance; 
  91. if(hit.transform.tag == "Player"
  92. Attacking = true
  93. if(Bullet_DO) 
  94. var Create = Instantiate (Bullet_Prefab, Bullet.position, Quaternion.identity); 
  95. Create.rigidbody.AddForce (Bullet.forward * 1000); 
  96. StartCoroutine(Wait(Bullet_CD)); 
  97. Bullet_DO = false
  98. function Wait(waitTime : float
  99. yield WaitForSeconds (waitTime); 
  100. Bullet_DO = true
  101. function Move(waitTime : float
  102. print("Move"); 
  103. if(Moving_Back) 
  104. yield WaitForSeconds (waitTime * 0.4); 
  105. else 
  106. yield WaitForSeconds (waitTime + Random.value * 2); 
  107. Thinking = true
  108. Moving_Back = false
  109. Moving = false
  110. Facing = false
  111. Doing = true
  112. function Face(waitTime : float
  113. print("Face"); 
  114. yield WaitForSeconds (waitTime + Random.value); 
  115. Facing = false
  116. Thinking = false
  117. Moving = true
  118. Doing = true
  119. function Think(waitTime : float
  120. print("Thinking"); 
  121. yield WaitForSeconds (waitTime + Random.value); 
  122. R_Position = Regression + Random.insideUnitSphere * Range; 
  123. R_Position.y = Regression.y; 
  124. relativePos = R_Position - transform.position; 
  125. rotation = Quaternion.LookRotation(relativePos); 
  126. Thinking = false
  127. Moving = false
  128. Facing = true
  129. Doing = true

工程截圖(這里是9個(gè)拿槍的敵人- - 藍(lán)色為控制角色,WASD控制行動(dòng))

Unity3D基礎(chǔ)教程:簡(jiǎn)單AI編寫(xiě)

2.Unity學(xué)習(xí)過(guò)程中的一些細(xì)節(jié)分析

1.獲取位置坐標(biāo):當(dāng)你translate.position獲取的不是物體在世界的坐標(biāo)時(shí)可以試試translate. localRotation

2.改變旋轉(zhuǎn)角度:這里多半是用translate.localRotation= Quaternion.Euler(x,y,z);

3.如何更改鼠標(biāo)指針圖片,這也是羽化以后可能遇到的問(wèn)題,這里只能簡(jiǎn)單分析下,首先把鼠標(biāo)默認(rèn)指針隱藏掉Screen.showCursor=flase;再用個(gè)粒子或者圖片代替,具體位置可以用Camera.main.ScreenToWorldPoint()和Input.mousePosition獲得。但有個(gè)問(wèn)題就產(chǎn)生了,UI會(huì)遮擋鼠標(biāo),鼠標(biāo)圖片用UI代替總感覺(jué)不妥。。。所以羽化還沒(méi)想出解決方法- -

4.有關(guān)過(guò)場(chǎng)Loading的制作,一張圖片還好說(shuō),換個(gè)Scene或者寫(xiě)個(gè)UI都能解決,動(dòng)態(tài)Loading的是用Application.LoadLevelAsync可以達(dá)到效果,或者是預(yù)加載,具體可以看看羽化無(wú)縫地圖研究博文里面的一個(gè)別墅例子。

5.也許有一天你也會(huì)遇到腳本用C#編寫(xiě)時(shí)遇到一些莫名其妙的錯(cuò)誤,所以這里羽化建議動(dòng)態(tài)腳本命令最好用js寫(xiě)。

原文鏈接:http://www.unitymanual.com/661.html

責(zé)任編輯:彭凡 來(lái)源: Unity3D教程手冊(cè)
相關(guān)推薦

2013-04-09 13:42:23

Unity3D基礎(chǔ)知識(shí)梳理

2013-04-25 09:56:24

unity3D手機(jī)游戲引擎

2013-04-25 10:03:07

unity3D手機(jī)游戲引擎

2013-06-19 08:52:48

Unity3D

2013-06-14 09:54:04

Unity3D

2013-04-25 13:27:11

unity3D手機(jī)游戲引擎

2012-12-24 08:46:50

iOSUnity3D

2013-06-17 09:12:31

Unity3D

2013-04-25 10:40:32

unity3D手機(jī)游戲引擎

2013-04-25 09:08:39

unity3D手機(jī)游戲引擎

2013-04-25 09:47:54

unity3D手機(jī)游戲引擎

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 08:45:19

iOSUnity3D

2012-12-24 09:20:48

AndoidUnity3D

2010-06-11 13:53:54

UML建模

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 09:09:27

AndoidUnity3D

2012-12-24 09:13:23

iOSUnity3D

2013-06-25 09:16:10

Unity3D

2013-04-25 00:06:06

unity3D手機(jī)游戲引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 免费看黄视频网站 | 亚洲精品久久 | 国产色| 九色porny自拍视频 | 超碰一区二区 | 国产精品免费一区二区 | www.夜夜草 | 丁香婷婷成人 | 亚洲高清电影 | 粉嫩av | 欧美区在线| 婷婷免费视频 | 成人午夜精品 | 91网站在线看 | 在线国产视频 | 午夜tv免费观看 | 91影院在线观看 | 99热视| 91精品国产乱码久久久久久久久 | av免费观看在线 | 美女视频. | 狠狠干av| 久久久久国产 | 精品视频一区二区三区四区 | 日日摸夜夜爽人人添av | 日韩av在线免费 | 精品综合在线 | 国产视频中文字幕 | 超碰网址 | 午夜日韩| 欧美成人a∨高清免费观看 91伊人 | 中文字幕丁香5月 | 精品免费av | 久久精品视频播放 | 国产精品久久久亚洲 | 日韩欧美黄色 | 午夜影视网 | 夜夜爽99久久国产综合精品女不卡 | 成人av一区 | 亚洲精品一区二区三区在线观看 | 国产欧美日韩一区二区三区在线观看 |