1、获取垂直水平方向上的输入:
2、给刚体一个力:
3、摄像头45度俯视角:
Camera:
Scale: x(<span style="color: #800080">1) y(<span style="color: #800080">1) z(<span style="color: #800080">1)
4、摄像机跟随:
<span style="color: #0000ff">void<span style="color: #000000"> Start () {
<span style="color: #008000">//<span style="color: #008000">摄像机与跟随物体的初始相对位置
offset = transform.position -<span style="color: #000000"> player.transform.position;
}
<span style="color: #008000">//<span style="color: #008000"> Update is called once per frame
<span style="color: #0000ff">void<span style="color: #000000"> LateUpdate () {
<span style="color: #008000">//<span style="color: #008000">跟随物体的位置加上相对位置
transform.position = player.transform.position +<span style="color: #000000"> offset;
}
5、物体自己旋转(固定时间,跟幀率无关):
6、检测碰撞(且碰撞后对方消失):
7、设置Button里的Text值
8、移除刚体上的力:
9、背景滾动:
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> scrollSpeed;
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> tileSizeZ;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Vector3 startPosition;
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Start () {
startPosition </span>=<span style="color: #000000"> transform.position;
}
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Update () {
</span><span style="color: #0000ff">float</span> newPosition = Mathf.Repeat(Time.time *<span style="color: #000000"> scrollSpeed,tileSizeZ);
transform.position </span>= startPosition + Vector3.forward *<span style="color: #000000"> newPosition;
}
}
10、出边界后销毀:
</span><span style="color: #0000ff">void</span><span style="color: #000000"> OnTriggerExit(Collider other)
{
Destroy(other.gameObject);
}
}
11、把prefabs放入场景中:
Instantiate(object,position,rotation);
12、一定时间后销毁:
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> lifetime;
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Start () {
Destroy(gameObject,lifetime);
}
}
13、游戏开始等待一定时间,过程中时间间隔,每一关时间间隔:
{
<span style="color: #0000ff">yield <span style="color: #0000ff">return <span style="color: #0000ff">new<span style="color: #000000"> WaitForSeconds(startWait);
<span style="color: #0000ff">while (<span style="color: #0000ff">true<span style="color: #000000">) {
playerObject.GetComponent
<span style="color: #0000ff">for (<span style="color: #0000ff">int i = <span style="color: #800080">0; i < hazardCount; i++<span style="color: #000000">)
{
GameObject hazard = hazards[Random.Range(<span style="color: #800080">0<span style="color: #000000">,hazards.Length)];
Vector3 spawnPosition = <span style="color: #0000ff">new Vector3(Random.Range(-<span style="color: #000000">spawnValues.x,spawnValues.x),spawnValues.y,spawnValues.z);
Quaternion spawnRotation =<span style="color: #000000"> Quaternion.identity;
Instantiate(hazard,spawnPosition,spawnRotation);
<span style="color: #0000ff">yield <span style="color: #0000ff">return <span style="color: #0000ff">new<span style="color: #000000"> WaitForSeconds(spawnWait);
}
level++<span style="color: #000000">;
<span style="color: #0000ff">yield <span style="color: #0000ff">return <span style="color: #0000ff">new<span style="color: #000000"> WaitForSeconds(waveWait);
<span style="color: #0000ff">if<span style="color: #000000"> (gameOver)
{
restartButton.SetActive(<span style="color: #0000ff">true<span style="color: #000000">);
restart = <span style="color: #0000ff">true<span style="color: #000000">;
<span style="color: #0000ff">break<span style="color: #000000">;
}
}
}
14、加载场景:
15、物体倾斜:
16、随机旋转:
tumble在5左右。
17、开火触模板:
{
<span style="color: #0000ff">private <span style="color: #0000ff">bool<span style="color: #000000"> touched;
<span style="color: #0000ff">private <span style="color: #0000ff">int<span style="color: #000000"> pointerID;
<span style="color: #0000ff">private <span style="color: #0000ff">bool<span style="color: #000000"> canFire;
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Awake()
{
touched </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
canFire </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> OnPointerDown(PointerEventData eventData)
{
</span><span style="color: #0000ff">if</span> (!<span style="color: #000000">touched)
{
touched </span>= <span style="color: #0000ff">true</span><span style="color: #000000">;
pointerID </span>=<span style="color: #000000"> eventData.pointerId;
canFire </span>= <span style="color: #0000ff">true</span><span style="color: #000000">;
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> OnPointerUp(PointerEventData eventData)
{
</span><span style="color: #0000ff">if</span> (eventData.pointerId ==<span style="color: #000000"> pointerID)
{
canFire </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
touched </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">bool</span><span style="color: #000000"> CanFire()
{
</span><span style="color: #0000ff">return</span><span style="color: #000000"> canFire;
}
}
18、位置方向触模板:
{
<span style="color: #0000ff">public <span style="color: #0000ff">float<span style="color: #000000"> smoothing;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Vector2 origin;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Vector2 direction;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Vector2 smoothDirection;
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">bool</span><span style="color: #000000"> touched;
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">int</span><span style="color: #000000"> pointerID;
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Awake()
{
direction </span>=<span style="color: #000000"> Vector2.zero;
touched </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> OnPointerDown(PointerEventData eventData)
{
</span><span style="color: #0000ff">if</span> (!<span style="color: #000000">touched)
{
touched </span>= <span style="color: #0000ff">true</span><span style="color: #000000">;
pointerID </span>=<span style="color: #000000"> eventData.pointerId;
</span><span style="color: #008000">//</span><span style="color: #008000">set our start point</span>
origin =<span style="color: #000000"> eventData.position;
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> OnDrag(PointerEventData eventData)
{
</span><span style="color: #0000ff">if</span> (eventData.pointerId ==<span style="color: #000000"> pointerID)
{
</span><span style="color: #008000">//</span><span style="color: #008000">compare the difference between our start point and current pointer pos</span>
Vector2 currentPosition =<span style="color: #000000"> eventData.position;
Vector2 directionRaw </span>= currentPosition -<span style="color: #000000"> origin;
direction </span>=<span style="color: #000000"> directionRaw.normalized;
}
}
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> OnPointerUp(PointerEventData eventData)
{
</span><span style="color: #0000ff">if</span> (eventData.pointerId ==<span style="color: #000000"> pointerID)
{
</span><span style="color: #008000">//</span><span style="color: #008000">reset everything</span>
direction =<span style="color: #000000"> Vector2.zero;
touched </span>= <span style="color: #0000ff">false</span><span style="color: #000000">;
}
}
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Vector2 GetDirection()
{
smoothDirection </span>=<span style="color: #000000"> Vector2.MoveTowards(smoothDirection,direction,smoothing);
</span><span style="color: #0000ff">return</span><span style="color: #000000"> smoothDirection;
}
}
19、延迟重复执行:
20、向目标靠近:
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> dodge;
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> smoothing;
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">float</span><span style="color: #000000"> tilt;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Vector2 startWait;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Vector2 maneuverTime;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Vector2 maneuverWait;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Boundary boundary;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Transform playTransform;
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">float</span><span style="color: #000000"> currentSpeed;
</span><span style="color: #0000ff">private</span> <span style="color: #0000ff">float</span><span style="color: #000000"> targetManeuver;
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Rigidbody rb;
</span><span style="color: #0000ff">void</span><span style="color: #000000"> Start () {
rb </span>= GetComponent<Rigidbody><span style="color: #000000">();
GameObject playerObject </span>= GameObject.FindGameObjectWithTag(<span style="color: #800000">"</span><span style="color: #800000">Player</span><span style="color: #800000">"</span><span style="color: #000000">);
</span><span style="color: #0000ff">if</span> (playerObject != <span style="color: #0000ff">null</span><span style="color: #000000">) {
playTransform </span>=<span style="color: #000000"> playerObject.transform;
}
currentSpeed </span>=<span style="color: #000000"> rb.velocity.z;
StartCoroutine(Evade());
}
IEnumerator Evade()
{
</span><span style="color: #0000ff">yield</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span><span style="color: #000000"> WaitForSeconds(Random.Range(startWait.x,startWait.y));
</span><span style="color: #0000ff">while</span>(<span style="color: #0000ff">true</span><span style="color: #000000">)
{
targetManeuver </span>= Random.Range(<span style="color: #800080">1</span>,dodge) * -<span style="color: #000000">Mathf.Sign(transform.position.x);
</span><span style="color: #0000ff">if</span> (playTransform != <span style="color: #0000ff">null</span><span style="color: #000000">)
{
targetManeuver </span>=<span style="color: #000000"> playTransform.position.x;
}
</span><span style="color: #0000ff">yield</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span><span style="color: #000000"> WaitForSeconds(Random.Range(maneuverTime.x,maneuverTime.y));
targetManeuver </span>= <span style="color: #800080">0</span><span style="color: #000000">;
</span><span style="color: #0000ff">yield</span> <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span><span style="color: #000000"> WaitForSeconds(Random.Range(maneuverWait.x,maneuverWait.y));
}
}
</span><span style="color: #0000ff">void</span><span style="color: #000000"> FixedUpdate () {
</span><span style="color: #0000ff">float</span> newManeuver = Mathf.MoveTowards(rb.velocity.x,targetManeuver,Time.deltaTime *<span style="color: #000000"> smoothing);
rb.velocity </span>= <span style="color: #0000ff">new</span> Vector3(newManeuver,currentSpeed);
rb.position </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> Vector3(
Mathf.Clamp(rb.position.x,boundary.xMin,boundary.xMax),</span><span style="color: #800080">0.0f</span><span style="color: #000000">,Mathf.Clamp(rb.position.z,boundary.zMin,boundary.zMax)
);
rb.rotation </span>= Quaternion.Euler(<span style="color: #800080">0.0f</span>,rb.velocity.x *<span style="color: #000000"> tilt);
}
}
21、给按钮绑定事件: