1.课程内容总览
可以学到的知识:
1.Unity一些基础设置。
2.2D场景的搭建,预制体制作。
3.2D动画的制作。
4.图片图集的有关知识。
5.碰撞器,触发器,碰撞检测与触发检测。
6.2D游戏渲染的一些知识。
7.简单敌人AI的编写。
8.UGUI有关内容,场景切换等等。
2.工程创建,素材导入与介绍
3.场景搭建,素材的处理
4. 游戏中预制体的制作,2D动画的制作
5.控制玩家的移动
void Update () {
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
}
6.控制图片的移动切换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
public float moveSpeed = 3;
public Sprite[] tankSprites;//上 右 下 左
private SpriteRenderer sr;
private void Awake()
{
sr = GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update () {
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprites[3];
}else if (h > 0)
{
sr.sprite = tankSprites[1];
}
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprites[2];
}
else if (v > 0)
{
sr.sprite = tankSprites[0];
}
}
}
7.碰撞器的添加,解决抖动问题
给适当的物体添加boxcollider 2D.使用FixedUpdate来解决抖动问题
private void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprites[3];
}
else if (h > 0)
{
sr.sprite = tankSprites[1];
}
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprites[2];
}
else if (v > 0)
{
sr.sprite = tankSprites[0];
}
}
8.移动优先级的添加,2D渲染层级问题
9.坦克的攻击方法
//坦克的攻击方法
private void Attack()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(bulletPrefab, transform.position, transform.rotation);
}
}
10.子弹的朝向问题
private Vector3 bulletEulerAngles;
//坦克的攻击方法
private void Attack()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//子弹产生的角度:当前坦克的角度+子弹应该旋转的角度
Instantiate(bulletPrefab, transform.position, Quaternion.Euler(transform.eulerAngles + bulletEulerAngles));
}
}
11.子弹朝向问题的解决,移动方法的编写
//坦克的攻击方法
private void Attack()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//子弹产生的角度:当前坦克的角度+子弹应该旋转的角度
if(sr.sprite == tankSprites[2])
{
bulletEulerAngles = new Vector3(0, 0, -180);
}else if (sr.sprite == tankSprites[3])
{
bulletEulerAngles = new Vector3(0, 0, 90);
}else if(sr.sprite == tankSprites[1])
{
bulletEulerAngles = new Vector3(0, 0, -90);
}
Instantiate(bulletPrefab, transform.position, Quaternion.Euler(transform.eulerAngles + bulletEulerAngles));
}
}
//坦克的移动方法
private void Move()
{
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
if (v < 0)
{
sr.sprite = tankSprites[2];
//bulletEulerAngles = new Vector3(0, 0, -180);
}
else if (v > 0)
{
sr.sprite = tankSprites[0];
}
if (v != 0)
{
return;
}
float h = Input.GetAxisRaw("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
if (h < 0)
{
sr.sprite = tankSprites[3];
//bulletEulerAngles = new Vector3(0, 0, 90);
}
else if (h > 0)
{
sr.sprite = tankSprites[1];
//bulletEulerAngles = new Vector3(0, 0, -90);
}
}
12.攻击CD的加入,触发器与碰撞器的区别
private float time = 0.4f;
private float timer = 0;
void Update () {
if (timer >= time)
{
Attack();
}
else
{
timer += Time.deltaTime;
}
}
给子弹添加Box Collider2D和刚体组件,创建Bullet脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour {
public float moveSpeed = 10;
// Update is called once per frame
void Update () {
transform.Translate(transform.up * moveSpeed * Time.deltaTime, Space.World);
}
private void OnTriggerEnter2D(Collider2D collision)
{
}
}