Unityのプライマリケース-AngryBirds:4:11線の繰り返しと鳥の回転速度の急激な増加の問題を解決します+12鳥が飛び出すテール効果を追加します+13シーンを統合し、線のパチンコではできない問題を解決します表示される

コンテンツ

まず、目的

1.不思議:怒っている鳥:作り方

2.次回確認できるように、学習メモを作成します。

2.リファレンス

1.SIKIアカデミー

3.注意

1.バージョン

操作:1:11繰り返し線と鳥の回転速度が急激に増加する問題を解決する

1.GameManager

1.鳥

1.実行結果:完了

 操作:2:12飛び出す鳥の追跡効果を追加します

1.後続のプラグインリソースをインポートします

1.参照URL:ユニティ武器のトレーリング効果

1.鳥はコンポーネントを追加します

 1.TestMyTrail:

1.鳥:コード

1.前の鳥を削除し、新しい鳥+ GameManagerを作成して、もう一度ドラッグします

1.実行結果:成功

操作:3:13シーンを統合し、破線のパチンコが表示されない問題を修正します

1.画像リソースの切り抜き:木製のブロック画像を見つけます

1.ウッドブロック加工

1.木製ブロックの特殊効果処理

1.ウッドブロックが再度処理されます

1.新しい長い木製ブロックプレハブを作成します

1.新しい石のプレハブを作成します

1.空の背景を配置し、すべてのプレーヤーのレイヤーをプレーヤーに置き換えます

1.草を追加します

1.線画を表示できないように、空の背景のレイヤーを変更します

 1.実行結果:成功


まず、目的

1.不思議:怒っている鳥:作り方

2.次回確認できるように、学習メモを作成します。

2.リファレンス

1.SIKIアカデミー

ログイン-SiKiAcademy-人生は無限大、学習は無限大!

良い:学ぶためのURL

3.注意

1.バージョン

  1. Unity2017.2.0f3
  2. VS2019
  3. UnityHUB 2.5.6

操作:1:11繰り返し線と鳥の回転速度が急激に増加する問題を解決する

1.GameManager

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 【Author:xzy;Time:2021-12-29】【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
/// Function:小猪身上的代码
/// </summary>
public class GameManager : MonoBehaviour
{
    /// <summary>List:所有的小鸟【10游戏逻辑的判定,实现多只小鸟的飞出:添加】</summary>
    public List<Bird> birds;

    /// <summary>List:所有的猪【10游戏逻辑的判定,实现多只小鸟的飞出:添加】</summary>
    public List<Pig> pigs;

    /// <summary>单例【10游戏逻辑的判定,实现多只小鸟的飞出:添加】</summary>
    public static GameManager _instance;

    /// <summary>Vector3:初始化位置【11解决重复划线和小鸟轮换速度突然变大的问题:添加】</summary>
    private Vector3 originPos;

    private void Awake()
    {
        _instance = this;//单例

        if (birds.Count>0)
        {
            originPos = birds[0].transform.position;//【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
        }
    }

    void Start()
    {
        Initialized();//【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
    /// Function: 小猪碰撞检测
    /// </summary>
    private void Initialized()
    {
        for (int i = 0; i < birds.Count; i++)
        {
            //初始化时候,让第一个小鸟能够被弹,其余的都不能
            if (i == 0)
            {
                birds[i].transform.position = originPos;     //第一只小鸟位置在初始化位置【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
                birds[i].enabled = true;
                birds[i].sp.enabled = true;
            }
            else
            {
                birds[i].enabled = false;
                birds[i].sp.enabled = false;
            }
        }
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
    /// Function: 下一只小鸟
    /// </summary>
    public void NextBird()
    {
        if (pigs.Count > 0)
        {
            if (birds.Count > 0)
            {
                //下一只飞吧
                Initialized();
            }
            else
            {
                //输了
            }
        }
        else
        {
            //赢了
        }
    }

}

1.鳥

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 【Author:xzy;Time:2021-12-28】
/// Function:小鸟身上的代码
/// </summary>
public class Bird : MonoBehaviour
{
    /// <summary>bool:是否点击</summary>
    private bool bIsClick = false;

    /// <summary>float:计算鸟和弹弓的距离的最大值</summary>
    public float fMaxdis = 3;

    /// <summary>SpringJoint2D:鸟身上弹簧的组件</summary>
    [HideInInspector]
    public SpringJoint2D sp;

    /// <summary>Rigidbody2D:鸟身上的物理组件</summary>
    [HideInInspector]
    private Rigidbody2D rg;

    /// <summary>Transform:弹弓右边的位置,目的:方便计算鸟和弹弓的距离</summary>
    public Transform rightPos;

    /// <summary>Transform:弹弓左边的位置,目的:方便划线【课程08弹弓画线操作:添加】</summary>
    public Transform leftPos;

    /// <summary>LineRenderer:弹弓右边的划线组件【课程08弹弓画线操作:添加】</summary>
    public LineRenderer right;

    /// <summary>LineRenderer:弹弓左边的划线组件【课程08弹弓画线操作:添加】</summary>
    public LineRenderer left;

    /// <summary>GameObject:特效【10游戏逻辑的判定,实现多只小鸟的飞出:添加】</summary>
    public GameObject boom;

    private void Awake()
    {
        sp = this.GetComponent<SpringJoint2D>();//获取小鸟的弹簧组件
        rg = this.GetComponent<Rigidbody2D>();//获取小鸟身上的物理组件
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-28】
    /// Function: 鼠标按下
    /// </summary>
    private void OnMouseDown()
    {
        bIsClick = true;
        rg.isKinematic = true;//按下小鸟,让其物理组件的动力学开启,从dynamic到kinematic
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-28】
    /// Function: 鼠标抬起
    /// </summary>
    private void OnMouseUp()
    {
        bIsClick = false;
        rg.isKinematic = false;//松开小鸟,让其物理组件的动力学关闭
        Invoke("Fly", 0.1f);//定时器:唤醒 小鸟飞出的逻辑
                
        right.enabled = false;//禁用画线组件【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
        left.enabled = false;
    }

    private void Update()
    {
        if (bIsClick)
        {
            //鼠标按下,进行位置的跟随,屏幕坐标转换为世界坐标
            transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);

            //进行位置限制
            if (Vector3.Distance(transform.position, rightPos.position) > fMaxdis)
            {
                Vector3 pos = (transform.position - rightPos.position).normalized;  //单位化向量:获取方向,鸟的向量减去右边弹弓的位置的向量
                pos *= fMaxdis; //最大长度的向量
                transform.position = pos + rightPos.position;
            }

            Line();
        }
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】
    /// Function: 处理松开小鸟飞出的逻辑
    /// </summary>
    void Fly()
    {
        sp.enabled = false;//松开小鸟,取消掉弹簧组件,小鸟就会飞出
        Invoke("Next", 5);//定时器:一段时候后调用Next方法
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【课程08弹弓画线操作:添加】
    /// Function: 画线
    /// </summary>
    void Line()
    {       
        right.enabled = true; //开启画线组件【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
        left.enabled = true;

        right.SetPosition(0, rightPos.position);//画线:右边的起始位置:右边弹弓位置
        right.SetPosition(1, this.transform.position);//画线:右边的终点位置:小鸟位置

        left.SetPosition(0, leftPos.position);
        left.SetPosition(1, this.transform.position);
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
    /// Function: 下一只小鸟被弹
    /// </summary>
    private void Next()
    {
        GameManager._instance.birds.Remove(this);//移除列表中此时小鸟元素
        Destroy(this.gameObject);//摧毁这个小鸟
        Instantiate(boom, this.transform.position, Quaternion.identity);//产生特效
        GameManager._instance.NextBird();//下一只小鸟出现
    }
}

1.実行結果:完了

 操作:2:12飛び出す鳥の追跡効果を追加します

1.後続のプラグインリソースをインポートします

1.参照URL:ユニティ武器のトレーリング効果

Unityの武器トレーリング効果-jzssuanfa-ブログパーク

 

1.鳥はコンポーネントを追加します

子オブジェクトを鳥に追加し、 Trailという名前を付けて、 WeaponTrail.csスクリプトとメッシュレンダラーコンポーネントを追加します。素材はPocketRPGTrailsが提供する素材で、設定は次の図のようになります。

 

 1.TestMyTrail:

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 【Author:xzy;Time:2021-12-29】【12 - 添加小鸟飞出的拖尾效果:添加】【参考:https://www.cnblogs.com/jzssuanfa/p/6764467.html】
/// Function:小猪身上的代码
/// </summary>
public class TestMyTrail : MonoBehaviour
{
    public WeaponTrail myTrail;//【12 - 添加小鸟飞出的拖尾效果:添加】

    private float t = 0.033f;//【12 - 添加小鸟飞出的拖尾效果:添加】
    private float tempT = 0;//【12 - 添加小鸟飞出的拖尾效果:添加】
    private float animationIncrement = 0.003f;//【12 - 添加小鸟飞出的拖尾效果:添加】

    //【12 - 添加小鸟飞出的拖尾效果:添加】
    void LateUpdate()
    {
        t = Mathf.Clamp(Time.deltaTime, 0, 0.066f);

        if (t > 0)
        {
            while (tempT < t)
            {
                tempT += animationIncrement;

                if (myTrail.time > 0)
                {
                    myTrail.Itterate(Time.time - t + tempT);
                }
                else
                {
                    myTrail.ClearTrail();
                }
            }

            tempT -= t;

            if (myTrail.time > 0)
            {
                myTrail.UpdateTrail(Time.time, t);
            }
        }
    }

    //【12 - 添加小鸟飞出的拖尾效果:添加】
    void Start()
    {
        // 默认没有拖尾效果
        myTrail.SetTime(0.0f, 0.0f, 1.0f);
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【12 - 添加小鸟飞出的拖尾效果:添加】
    /// Function: 拖尾开始
    /// </summary>
    public void StartTrail()
    {
        //设置拖尾时长
        myTrail.SetTime(2.0f, 0.0f, 1.0f);
        //開始进行拖尾
        myTrail.StartTrail(0.5f, 0.4f);
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【12 - 添加小鸟飞出的拖尾效果:添加】
    /// Function: 清除拖尾
    /// </summary>
    public void ClearTrail()
    {
        //清除拖尾
        myTrail.ClearTrail();
    }


}

 

1.鳥:コード

 

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 【Author:xzy;Time:2021-12-28】
/// Function:小鸟身上的代码
/// </summary>
public class Bird : MonoBehaviour
{
    /// <summary>bool:是否点击</summary>
    private bool bIsClick = false;

    /// <summary>float:计算鸟和弹弓的距离的最大值</summary>
    public float fMaxdis = 3;

    /// <summary>SpringJoint2D:鸟身上弹簧的组件</summary>
    [HideInInspector]
    public SpringJoint2D sp;

    /// <summary>Rigidbody2D:鸟身上的物理组件</summary>
    [HideInInspector]
    private Rigidbody2D rg;

    /// <summary>Transform:弹弓右边的位置,目的:方便计算鸟和弹弓的距离</summary>
    public Transform rightPos;

    /// <summary>Transform:弹弓左边的位置,目的:方便划线【课程08弹弓画线操作:添加】</summary>
    public Transform leftPos;

    /// <summary>LineRenderer:弹弓右边的划线组件【课程08弹弓画线操作:添加】</summary>
    public LineRenderer right;

    /// <summary>LineRenderer:弹弓左边的划线组件【课程08弹弓画线操作:添加】</summary>
    public LineRenderer left;

    /// <summary>GameObject:特效【10游戏逻辑的判定,实现多只小鸟的飞出:添加】</summary>
    public GameObject boom;

    /// <summary>TestMyTrail:拖尾【12 - 添加小鸟飞出的拖尾效果:添加】</summary>
    private TestMyTrail myTrail;

    private void Awake()
    {
        sp = this.GetComponent<SpringJoint2D>();//获取小鸟的弹簧组件
        rg = this.GetComponent<Rigidbody2D>();//获取小鸟身上的物理组件
        myTrail = GetComponent<TestMyTrail>();//获取组件【12 - 添加小鸟飞出的拖尾效果:添加】
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-28】
    /// Function: 鼠标按下
    /// </summary>
    private void OnMouseDown()
    {
        bIsClick = true;
        rg.isKinematic = true;//按下小鸟,让其物理组件的动力学开启,从dynamic到kinematic
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-28】
    /// Function: 鼠标抬起
    /// </summary>
    private void OnMouseUp()
    {
        bIsClick = false;
        rg.isKinematic = false;//松开小鸟,让其物理组件的动力学关闭
        Invoke("Fly", 0.1f);//定时器:唤醒 小鸟飞出的逻辑
                
        right.enabled = false;//禁用画线组件【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
        left.enabled = false;
    }

    private void Update()
    {
        if (bIsClick)
        {
            //鼠标按下,进行位置的跟随,屏幕坐标转换为世界坐标
            transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position += new Vector3(0, 0, -Camera.main.transform.position.z);

            //进行位置限制
            if (Vector3.Distance(transform.position, rightPos.position) > fMaxdis)
            {
                Vector3 pos = (transform.position - rightPos.position).normalized;  //单位化向量:获取方向,鸟的向量减去右边弹弓的位置的向量
                pos *= fMaxdis; //最大长度的向量
                transform.position = pos + rightPos.position;
            }

            Line();
        }
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】
    /// Function: 处理松开小鸟飞出的逻辑
    /// </summary>
    void Fly()
    {
        myTrail.StartTrail();//开始拖尾【12 - 添加小鸟飞出的拖尾效果:添加】
        sp.enabled = false;//松开小鸟,取消掉弹簧组件,小鸟就会飞出
        Invoke("Next", 5);//定时器:一段时候后调用Next方法
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【课程08弹弓画线操作:添加】
    /// Function: 画线
    /// </summary>
    void Line()
    {       
        right.enabled = true; //开启画线组件【11解决重复划线和小鸟轮换速度突然变大的问题:添加】
        left.enabled = true;

        right.SetPosition(0, rightPos.position);//画线:右边的起始位置:右边弹弓位置
        right.SetPosition(1, this.transform.position);//画线:右边的终点位置:小鸟位置

        left.SetPosition(0, leftPos.position);
        left.SetPosition(1, this.transform.position);
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【10游戏逻辑的判定,实现多只小鸟的飞出:添加】
    /// Function: 下一只小鸟被弹
    /// </summary>
    private void Next()
    {
        GameManager._instance.birds.Remove(this);//移除列表中此时小鸟元素
        Destroy(this.gameObject);//摧毁这个小鸟
        Instantiate(boom, this.transform.position, Quaternion.identity);//产生特效
        GameManager._instance.NextBird();//下一只小鸟出现
    }

    /// <summary>
    ///【Author:xzy;Time:2021-12-29】【12 - 添加小鸟飞出的拖尾效果:添加】
    /// Function: 碰撞检测
    /// </summary>
    private void OnCollisionEnter2D(Collision2D collision)
    {
        myTrail.ClearTrail();//清除拖尾【12 - 添加小鸟飞出的拖尾效果:添加】
    }
}

1.前の鳥を削除し、新しい鳥+ GameManagerを作成して、もう一度ドラッグします

 

1.実行結果:成功

 

操作:3:13シーンを統合し、破線のパチンコが表示されない問題を修正します

1.画像リソースの切り抜き:木製のブロック画像を見つけます

 

1.ウッドブロック加工

 

1.木製ブロックの特殊効果処理

ドラッグ+適切なサイズに縮小+適切な場所にドラッグ+blockScoreに名前を変更+プレハブフォルダにドラッグアンドドロップ 

 

1.ウッドブロックが再度処理されます

woodCubeの名前を変更+エフェクトを追加+プレハブとして

1.新しい長い木製ブロックプレハブを作成します

 プレハブとして変更された名前woodLong

 

1.新しい石のプレハブを作成します

 block+の名前をプレハブに変更

 

1.空の背景を配置し、すべてのプレーヤーのレイヤーをプレーヤーに置き換えます

 まず、一般的なシーンのレイアウトは次のとおりです+

 

 

1.草を追加します

 草の写真を見つけて+作物+シーンに配置します

1.線画を表示できないように、空の背景のレイヤーを変更します

 1.実行結果:成功

 

おすすめ

転載: blog.csdn.net/qq_40544338/article/details/122216597