青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 12,  comments - 6,  trackbacks - 0
需求:魚兒魚兒水中游
魚兒在海底世界嬉戲
1、觸摸魚兒時(shí)候,魚兒受到驚嚇,隨機(jī)快速移動(dòng)。
2、觸摸空白區(qū)域,在觸摸點(diǎn)添加魚食,當(dāng)魚食在魚兒可視范圍內(nèi),魚兒快速移動(dòng),追趕魚食,把它吃掉。
3、海底下方,隨機(jī)產(chǎn)生氣泡,氣泡向上飄浮,當(dāng)?shù)竭_(dá)生存時(shí)間或者被觸摸后,魚兒若在氣泡爆炸范圍,魚兒受到驚嚇,隨機(jī)快速移動(dòng)。
4、后續(xù)添加一個(gè)魚兒進(jìn)場(chǎng)過程。
這里魚兒動(dòng)畫比較簡(jiǎn)單,只有一份 idle 動(dòng)作即可,魚兒受驚快速移動(dòng),可以加快動(dòng)畫播放速度即可。
根據(jù)需求,可以給魚兒編寫一份有限無窮狀態(tài)機(jī)。魚兒在某個(gè)時(shí)間點(diǎn)只處于一種狀態(tài),只是在該狀態(tài)下,做自己相應(yīng)的事情罷了。
好了步入正題,開始限無窮狀態(tài)機(jī)的編寫。

FSM.cs
using UnityEngine;
using System.Collections;

public class FSM : MonoBehaviour 
{
    //Fish GameObject
    protected GameObject goFish;
    //Player Transform
    public Transform oceanTransform;

    //Next destination position of the NPC Tank
    protected Vector3 destPos;
    
    protected float elapsedTime;

    protected virtual void Initialize() {}
    protected virtual void FSMUpdate() {}
    protected virtual void FSMFixedUpdate() {}

    //Use this for initialization
    void Start()
    {
        Initialize();
    }
        
    // Update is called once per frame
    void Update () 
    {
        FSMUpdate();    
    }

    void FixedUpdate()
    {
        FSMFixedUpdate();
    }
}

FSMState.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// This class is adapted and modified from the FSM implementation class available on UnifyCommunity website
/// The license for the code is Creative Commons Attribution Share Alike.
/// It's originally the port of C++ FSM implementation mentioned in Chapter01 of Game Programming Gems 1
/// You're free to use, modify and distribute the code in any projects including commercial ones.
/// Please read the link to know more about CCA license @http://creativecommons.org/licenses/by-sa/3.0/

/// This class represents the States in the Finite State System.
/// Each state has a Dictionary with pairs (transition-state) showing
/// which state the FSM should be if a transition is fired while this state
/// is the current state.
/// Reason method is used to determine which transition should be fired .
/// Act method has the code to perform the actions the NPC is supposed to do if it磗 on this state.
/// </summary>
public abstract class FSMState
{
    protected Dictionary<Transition, FSMStateID> map = new Dictionary<Transition, FSMStateID>();
    protected FSMStateID stateID;
    public FSMStateID ID { get { return stateID; } }


    // 以下幾個(gè)參數(shù),是魚兒相應(yīng)的參數(shù)設(shè)置,在繼承各個(gè)狀態(tài)機(jī)時(shí)使用 覺得寫這里 不是很好,不過懶得改 就這樣吧
    protected Vector3 destPos;                          // 目標(biāo)位置
    protected float curRotSpeed;                        //  驚嚇后速度參數(shù)
    protected float curSpeed;                              //  自身游動(dòng)速度參數(shù)
    protected float chaseDistance = 10.0f;         //  魚兒追趕魚食范圍


    public void AddTransition(Transition transition, FSMStateID id)
    {
        //Since this is a Deterministc FSM,
        
//Check if the current transition was already inside the map
        if (map.ContainsKey(transition))
        {
            Debug.LogWarning("FSMState ERROR: transition is already inside the map");
            return;
        }

        map.Add(transition, id);
        Debug.Log("Added : " + transition + " with ID : " + id);
    }

    /// <summary>
    
/// This method deletes a pair transition-state from this state磗 map.    
    
/// </summary>
    public void DeleteTransition(Transition trans)
    {
        // Check if the pair is inside the map before deleting
        if (map.ContainsKey(trans))
        {
            map.Remove(trans);
            return;
        }
        Debug.LogError("FSMState ERROR: Transition passed was not on this State磗 List");
    }


    /// <summary>
    
/// This method returns the new state the FSM should be if
    
///    this state receives a transition  
    
/// </summary>
    public FSMStateID GetOutputState(Transition trans)
    {
        return map[trans];
    }

    /// <summary>
    
/// Decides if the state should transition to another on its list
    
/// NPC is a reference to the npc tha is controlled by this class
    
/// </summary>
    public abstract void Reason(GameObject fish);

    /// <summary>
    
/// This method controls the behavior of the NPC in the game World.
    
/// Every action, movement or communication the NPC does should be placed here
    
/// NPC is a reference to the npc tha is controlled by this class
    
/// </summary>
    public abstract void Act(GameObject fish);

    /// <summary>
    
/// Find the next semi-random patrol point
    
/// </summary>
    public void FindNextPoint()
    {
        //Debug.Log("Finding next point");
        
    }

    /// <summary>
    
/// Check whether the next random position is the same as current tank position
    
/// </summary>
    
/// <param name="pos">position to check</param>
    /*
    protected bool IsInCurrentRange(Transform trans, Vector3 pos)
    {
        float xPos = Mathf.Abs(pos.x - trans.position.x);
        float zPos = Mathf.Abs(pos.z - trans.position.z);

        if (xPos <= 50 && zPos <= 50)
            return true;

        return false;
    }
*/
}

定義倆個(gè)枚舉,用來處理狀態(tài)機(jī)
public enum Transition
{    
    SawFood = 0,            // 看見發(fā)現(xiàn)食物    
    ReachFood,                // 追逐抵達(dá)食物
    LostFood,                    // 失去食物(有可能被別的魚吃了、脫離視野、掉入海底)
    BombBubble,                // 氣泡爆炸
    TouchFish,                // 魚兒被觸摸
    Patrolle,                   //  巡邏(普通)
    ComeInto,               //  進(jìn)場(chǎng)
    ComeEnd,                // 進(jìn)場(chǎng)結(jié)束
    NoTime,                    // 沒有時(shí)間了 
}


public enum FSMStateID
{    
    Patrolling = 0,                // 巡邏 狀態(tài)
    Showtiming,                 //  表演 狀態(tài)
    Chasing,                    // 追趕 狀態(tài)
    Frightening,                // 受驚 狀態(tài)
    Eatting,                    // 吃食 狀態(tài)
    Coming,                     //  進(jìn)場(chǎng) 狀態(tài)
    Disappearing,                // 消失 狀態(tài)
}

AdvancedFSM.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// This class is adapted and modified from the FSM implementation class available on UnifyCommunity website
/// The license for the code is Creative Commons Attribution Share Alike.
/// It's originally the port of C++ FSM implementation mentioned in Chapter01 of Game Programming Gems 1
/// You're free to use, modify and distribute the code in any projects including commercial ones.
/// Please read the link to know more about CCA license @http://creativecommons.org/licenses/by-sa/3.0/
/// </summary>


public class AdvancedFSM : FSM 
{
    private List<FSMState> fsmStates;

    //The fsmStates are not changing directly but updated by using transitions
    private FSMStateID currentStateID;
    public FSMStateID CurrentStateID { get { return currentStateID; } }

    private FSMState currentState;
    public FSMState CurrentState { get { return currentState; } }

    public AdvancedFSM()
    {
        fsmStates = new List<FSMState>();
    }

    /// <summary>
    
/// Add New State into the list
    
/// </summary>
    public void AddFSMState(FSMState fsmState)
    {
        // Check for Null reference before deleting
        if (fsmState == null)
        {
            Debug.LogError("FSM ERROR: Null reference is not allowed");
        }

        // First State inserted is also the Initial state
        
//   the state the machine is in when the simulation begins
        if (fsmStates.Count == 0)
        {
            fsmStates.Add(fsmState);
            currentState = fsmState;
            currentStateID = fsmState.ID;
            return;
        }

        // Add the state to the List if it磗 not inside it
        foreach (FSMState state in fsmStates)
        {
            if (state.ID == fsmState.ID)
            {
                Debug.LogError("FSM ERROR: Trying to add a state that was already inside the list");
                return;
            }
        }

        //If no state in the current then add the state to the list
        fsmStates.Add(fsmState);
    }

    
    //This method delete a state from the FSM List if it exists,     
    public void DeleteState(FSMStateID fsmState)
    {
        // Search the List and delete the state if it磗 inside it
        foreach (FSMState state in fsmStates)
        {
            if (state.ID == fsmState)
            {
                fsmStates.Remove(state);
                return;
            }
        }
        Debug.LogError("FSM ERROR: The state passed was not on the list. Impossible to delete it");
    }

    /// <summary>
    
/// This method tries to change the state the FSM is in based on
    
/// the current state and the transition passed. 
    
/// </summary>
    public void PerformTransition(Transition trans)
    {  
        // Check if the currentState has the transition passed as argument
        FSMStateID id = currentState.GetOutputState(trans);        
        
        // Update the currentStateID and currentState        
        currentStateID = id;
        foreach (FSMState state in fsmStates)
        {
            if (state.ID == currentStateID)
            {
                currentState = state;
                break;
            }
        }
    }
}

魚兒實(shí)體掛載上 AIController.cs
using UnityEngine;
using System.Collections;

public class AIController : AdvancedFSM 
{
    private int survivalTime;        // 生存時(shí)間
    public bool isNPC = true;

    protected override void Initialize()
    {
        goFish = this.gameObject;
        survivalTime = 60 * 3;            // 生存時(shí)間 60秒 * 3

        
//Start Doing the Finite State Machine
        ConstructFSM ();
    }
    
    //Update each frame
    protected override void FSMUpdate()
    {
        //Check for health
        elapsedTime += Time.deltaTime;


        // 時(shí)間 到了  消失
        if (elapsedTime >  survivalTime && isNPC == false)
            SetTransition(Transition.NoTime); 
    }

    protected override void FSMFixedUpdate()
    {
        CurrentState.Reason(goFish);
        CurrentState.Act(goFish);
    }
    
    public void SetTransition(Transition t) 
    { 
        PerformTransition(t); 
    }

    public void TouchFishAC()
    {
        int TouchID = Random.Range(1, 6);
        string strTouch = "Sound/yu0" + TouchID.ToString();
        AudioClip ACTouch = Resources.Load(strTouch) as AudioClip;
        AudioSource.PlayClipAtPoint(ACTouch, transform.localPosition); 
    }

    private void ConstructFSM()
    {
        GameObject objOcean = GameObject.FindGameObjectWithTag("Ocean");
        oceanTransform = objOcean.transform;

        PatrolState patrol = new PatrolState ();            // 游走
        patrol.AddTransition (Transition.SawFood, FSMStateID.Chasing);    // 發(fā)現(xiàn)魚食 進(jìn)入追食
        patrol.AddTransition (Transition.BombBubble, FSMStateID.Frightening);        // 氣泡爆炸 進(jìn)入受驚
        patrol.AddTransition (Transition.TouchFish, FSMStateID.Frightening);        // 觸碰魚  進(jìn)入受驚
        patrol.AddTransition (Transition.NoTime, FSMStateID.Disappearing);            // 到時(shí)間  消失

        ChaseState chase = new ChaseState();                // 追食
        chase.AddTransition (Transition.ReachFood, FSMStateID.Eatting);                // 追到魚食 進(jìn)入吃食
        chase.AddTransition (Transition.LostFood, FSMStateID.Patrolling);            // 魚食消失 進(jìn)入游走
        chase.AddTransition (Transition.BombBubble, FSMStateID.Frightening);        // 氣泡爆炸 進(jìn)入受驚
        chase.AddTransition (Transition.TouchFish, FSMStateID.Frightening);            // 觸碰魚  進(jìn)入受驚
        chase.AddTransition (Transition.NoTime, FSMStateID.Disappearing);            // 到時(shí)間  消失

        
//EatState eat = new EatState ();                        // 吃食

        FrightenState frighten = new FrightenState ();        // 受驚
        frighten.AddTransition (Transition.Patrolle, FSMStateID.Patrolling);         // 受驚后 游走
        frighten.AddTransition (Transition.NoTime, FSMStateID.Disappearing);            // 到時(shí)間  消失

        DisappearState disappear = new DisappearState ();    // 離場(chǎng)
        disappear.AddTransition(Transition.NoTime, FSMStateID.Disappearing);            // 到時(shí)間  消失

        ComeState comeinto = new ComeState ();
        comeinto.AddTransition (Transition.ComeInto, FSMStateID.Coming);
        comeinto.AddTransition (Transition.ComeEnd, FSMStateID.Patrolling);

        //AddFSMState (comeinto);
        AddFSMState (patrol);
        AddFSMState (chase);
        //AddFSMState (eat);
        AddFSMState (frighten);
        AddFSMState (disappear);
        //AddFSMState (comeinto);
    }
}


好了,我們現(xiàn)在實(shí)現(xiàn) PatrolState、ChaseState、FrightenState、DisappearState、ComeState 在相應(yīng)的狀態(tài)下做相應(yīng)的事情就ok了。

PatrolState.cs
using UnityEngine;
using System.Collections;

public class PatrolState : FSMState
{    
    float intervalTime = 4.0f;    // 間隔時(shí)間
    float patrolTime = 0.0f;    
    int patrolPointID = 2;
    Vector3    selfPoint;
    GameObject goPatrol;

    public PatrolState()     
    {    
        intervalTime = Random.Range(3.5f, 8.0f);
        stateID = FSMStateID.Patrolling;        
        curRotSpeed = 3.0f;        
        curSpeed = 0.1f;   
        goPatrol = GameObject.FindGameObjectWithTag("PatrolPoint");
        destPos = goPatrol.transform.Find (patrolPointID.ToString ()).transform.position;
    }

    public void FindNextPoint(GameObject fish)
    {
        intervalTime = Random.Range(5.5f, 8.0f);
        selfPoint = fish.transform.position;
        destPos = goPatrol.transform.Find (patrolPointID.ToString ()).transform.position;
    }

    public override void Reason(GameObject fish)    
    {       
        //fish.GetComponent<AIController> ().SetTransition (Transition.SawFood);
        AIController aiController = fish.GetComponent<AIController> ();
        if (aiController != null)
        {
            OceanManage oceanManage = aiController.oceanTransform.GetComponent<OceanManage> ();
            GameObject goFish = oceanManage.FindFishFood (fish);
            if (goFish != null) {
                float distance = Vector3.Distance(fish.transform.position, goFish.transform.position);
                if (distance < chaseDistance)
                    aiController.SetTransition (Transition.SawFood);
            }
        }
    }

    public override void Act(GameObject fish)    
    {
        if ((patrolTime += Time.deltaTime) > intervalTime) {
            patrolTime = 0.0f;
            patrolPointID = Random.Range(1, goPatrol.gameObject.transform.childCount + 1);
            FindNextPoint(fish);
        }
          
        Quaternion targetRotation = Quaternion.LookRotation(destPos - fish.transform.position);
        Quaternion rotateQuaterntion = Quaternion.identity;
        rotateQuaterntion.eulerAngles = new Vector3(0f, 90.0f, 0f);
        fish.transform.rotation = Quaternion.Slerp(fish.transform.rotation, targetRotation * rotateQuaterntion, Time.deltaTime * curRotSpeed); 
  
        //fish.transform.LookAt(destPos);//魚隨機(jī)方向
        
//fish.transform.Rotate(new Vector3(0, 90, 0));  
        fish.transform.position = Vector3.Lerp(fish.transform.position, destPos, Time.deltaTime * curSpeed);

        Animator animComponent = fish.GetComponent<Animator>();    
        animComponent.CrossFade("idle", 0);
        animComponent.speed = 1f;
    }
}

ChaseState.cs
using UnityEngine;
using System.Collections;

public class ChaseState : FSMState 
{
    public ChaseState()     
    { 
        stateID = FSMStateID.Chasing;     
        curRotSpeed = 3.0f;        
        curSpeed = 2.75f;   
    }

    public override void Reason(GameObject fish)    
    {       
        AIController aiController = fish.GetComponent<AIController> ();
        OceanManage oceanManage = aiController.oceanTransform.GetComponent<OceanManage> ();
        GameObject goFish = oceanManage.FindFishFood (fish);
        if (goFish == null) {
            aiController.SetTransition (Transition.LostFood);
        }
    }
    
    public override void Act(GameObject fish)    
    {
        AIController aiController = fish.GetComponent<AIController> ();
        OceanManage oceanManage = aiController.oceanTransform.GetComponent<OceanManage> ();
        GameObject goFish = oceanManage.FindFishFood (fish);
        if (goFish != null) {
            float distance = Vector3.Distance(fish.transform.position, goFish.transform.position);
            if (distance < chaseDistance)
            {
                fish.transform.LookAt(goFish.transform.position);//魚隨機(jī)方向
                fish.transform.Rotate(new Vector3(0, 90, 0)); 


                fish.transform.position = Vector3.Lerp(fish.transform.position, goFish.transform.position, Time.deltaTime * curSpeed);

                Animator animComponent = fish.GetComponent<Animator>();    
                animComponent.CrossFade("idle", 0);
                   animComponent.speed = 1f;
            }
            else
            {
                aiController.SetTransition (Transition.LostFood);
            }
            //animComponent.animation.s
        }
    }
}

FrightenState.cs
using UnityEngine;
using System.Collections;

public class FrightenState :FSMState 
{
    float intervalTime = 1.0f;    // 間隔時(shí)間
    float patrolTime = 0.0f;
    GameObject goPatrol;
    int patrolPointID = 2;

    public FrightenState()     
    {
        intervalTime = 1.5f;
        stateID = FSMStateID.Frightening;
        curRotSpeed = 3.0f;
        curSpeed = 0.7f;
        goPatrol = GameObject.FindGameObjectWithTag("PatrolPoint");
    }
    
    public override void Reason(GameObject fish)    
    {
        if (patrolTime == 0)
        {
            patrolPointID = Random.Range(1, goPatrol.gameObject.transform.childCount + 1);
            destPos = goPatrol.transform.Find(patrolPointID.ToString()).transform.position;
        }
    }
    
    public override void Act(GameObject fish)    
    {
        if ((patrolTime += Time.deltaTime) > intervalTime)
        {
            patrolTime = 0.0f;
            AIController aiController = fish.GetComponent<AIController>();
            aiController.SetTransition(Transition.Patrolle);
        }

        Quaternion targetRotation = Quaternion.LookRotation(destPos - fish.transform.position);
        Quaternion rotateQuaterntion = Quaternion.identity;
        rotateQuaterntion.eulerAngles = new Vector3(0f, 90.0f, 0f);
        fish.transform.rotation = Quaternion.Slerp(fish.transform.rotation, targetRotation * rotateQuaterntion, Time.deltaTime * curRotSpeed);

        //fish.transform.LookAt(destPos);//魚隨機(jī)方向
        
//fish.transform.Rotate(new Vector3(0, 90, 0));  
        fish.transform.position = Vector3.Lerp(fish.transform.position, destPos, Time.deltaTime * curSpeed );

        Animator animComponent = fish.GetComponent<Animator>();
        animComponent.CrossFade("idle", 0);
        animComponent.speed = 2f;
    }
}

DisappearState.cs
using UnityEngine;
using System.Collections;

public class DisappearState : FSMState 
{
    public DisappearState()     
    {
        stateID = FSMStateID.Disappearing; 
    }
    
    public override void Reason(GameObject fish)    
    {       
        
    }
    
    public override void Act(GameObject fish)    
    {
        GameObject oceanGO = GameObject.Find("Ocean");
        if (oceanGO) {
            OceanManage ocean = oceanGO.GetComponent<OceanManage> ();
            ocean.MakeBubble(fish);
        }
        GameObject.Destroy (fish);

    }
}

ComeState.cs
using UnityEngine;
using System.Collections;

public class ComeState : FSMState 
{
    int comeIntoPointID = 1;
    GameObject goComeInto;
    Hashtable    pathHashtable;

    float intervalTime = 1.0f;    // 間隔時(shí)間
    float comeintoTime = 0.0f;

    // Use this for initialization
    public ComeState()     
    { 
        stateID = FSMStateID.Coming;    
        goComeInto = GameObject.FindGameObjectWithTag("ComeIntoPoint");
    }

    public void SetComeIntoPath(GameObject fish)
    {
        comeIntoPointID = Random.Range(1, goComeInto.gameObject.transform.childCount + 1);
        iTweenPath path = goComeInto.transform.Find (comeIntoPointID.ToString ()).GetComponent<iTweenPath>();
        destPos = goComeInto.transform.Find (comeIntoPointID.ToString ()).transform.position;
        fish.transform.position = path.nodes [0];
        
        pathHashtable = new Hashtable();
        //設(shè)置路徑的點(diǎn)
        pathHashtable.Add("path",path);
        //設(shè)置類型為線性,線性效果會(huì)好一些。
        pathHashtable.Add("easeType", iTween.EaseType.linear);
        //設(shè)置尋路的速度
        pathHashtable.Add("time",intervalTime);
        //是否先從原始位置走到路徑中第一個(gè)點(diǎn)的位置
        pathHashtable.Add("movetopath",true);
        //是否讓模型始終面朝當(dāng)面目標(biāo)的方向,拐彎的地方會(huì)自動(dòng)旋轉(zhuǎn)模型
        
//如果你發(fā)現(xiàn)你的模型在尋路的時(shí)候始終都是一個(gè)方向那么一定要打開這個(gè)
        pathHashtable.Add("orienttopath",true);
        //讓模型開始尋路   
        iTween.MoveTo(fish,pathHashtable);
    }

    public override void Reason(GameObject fish)    
    { 
        if (comeintoTime == 0.0f)
            SetComeIntoPath (fish);

        if ((comeintoTime += Time.deltaTime) > intervalTime) {
            comeintoTime = 0.0f;
            AIController aiController = fish.GetComponent<AIController> ();
            aiController.SetTransition (Transition.ComeEnd);
        }
    }

    public override void Act(GameObject fish)    
    {

        Quaternion targetRotation = Quaternion.LookRotation(destPos - fish.transform.position);
        Quaternion rotateQuaterntion = Quaternion.identity;
        rotateQuaterntion.eulerAngles = new Vector3(0f, 90.0f, 0f);
        fish.transform.rotation = Quaternion.Slerp(fish.transform.rotation, targetRotation * rotateQuaterntion, Time.deltaTime * curRotSpeed); 

        Animator animComponent = fish.GetComponent<Animator>();
        animComponent.CrossFade("idle", 0);
        animComponent.speed = 2f;
    }

}

這個(gè)思想 就是這樣,但具體實(shí)現(xiàn)根據(jù)具體功能需求而定和編寫。
posted on 2018-09-20 14:11 vic.MINg 閱讀(834) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Unity 3D

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(1)

隨筆分類(13)

隨筆檔案(12)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产乱码最新视频| 国内精品久久久久久久影视蜜臀 | 亚洲午夜激情免费视频| 亚洲美女av在线播放| 亚洲激情成人网| 欧美成人嫩草网站| 欧美福利视频在线观看| 亚洲欧洲精品成人久久奇米网| 亚洲精品美女| 午夜在线视频一区二区区别| 久久久久se| 欧美国产日韩亚洲一区| 欧美视频在线观看 亚洲欧| 国产欧美日本一区二区三区| 国户精品久久久久久久久久久不卡| 亚洲电影第三页| 国产精品99久久久久久白浆小说| 亚洲欧美三级伦理| 欧美亚洲成人精品| 国产视频在线观看一区二区| 亚洲激情国产| 午夜精品99久久免费| 男人的天堂成人在线| 一区二区三区久久| 久久五月天婷婷| 国产精品a级| 亚洲国产电影| 性欧美xxxx大乳国产app| 欧美黄在线观看| 亚洲欧美日韩一区二区三区在线| 美女黄毛**国产精品啪啪 | 欧美激情精品久久久久久大尺度 | 久久免费黄色| 欧美丝袜第一区| 亚洲国产成人久久综合| 性18欧美另类| 亚洲另类视频| 免费观看久久久4p| 国内精品免费午夜毛片| 亚洲一区二区三区四区中文| 欧美第一黄色网| 欧美一区二区三区视频| 国产精品国产三级国产专播品爱网 | 狼狼综合久久久久综合网| 9l国产精品久久久久麻豆| 久久综合中文| 伊人激情综合| 欧美一二三视频| 一区二区欧美亚洲| 欧美日韩亚洲免费| 亚洲免费成人| 91久久国产自产拍夜夜嗨| 久久夜色精品国产亚洲aⅴ| 国内欧美视频一区二区| 久久久久国产精品一区二区| 亚洲女与黑人做爰| 国产精品日本一区二区| 小辣椒精品导航| 亚洲一级片在线看| 国产伦精品一区| 欧美一区免费视频| 亚洲免费视频成人| 国产色综合网| 老司机精品视频网站| 久久九九热re6这里有精品| 好吊妞这里只有精品| 久久亚洲美女| 免费亚洲电影在线| 麻豆精品一区二区综合av| 亚洲电影在线免费观看| 亚洲二区在线观看| 欧美日韩福利在线观看| 亚洲视频你懂的| 亚洲欧美日韩精品| 黑人一区二区三区四区五区| 女主播福利一区| 欧美精品激情在线观看| 亚洲婷婷综合久久一本伊一区| 一区二区av| 国产曰批免费观看久久久| 麻豆freexxxx性91精品| 欧美激情一区二区三区不卡| 亚洲免费视频一区二区| 久久精品91| 亚洲人成网站色ww在线| 亚洲日本欧美日韩高观看| 国产精品白丝av嫩草影院| 久久久久一区二区三区四区| 久久久亚洲高清| 亚洲作爱视频| 午夜精品久久久久久99热软件| 激情久久久久久| 亚洲精品一区在线观看| 国产欧美在线看| 91久久精品一区| 国产视频一区免费看| 欧美国产一区二区在线观看| 国产精品99免视看9| 牛夜精品久久久久久久99黑人| 欧美日韩国产一区| 老司机67194精品线观看| 欧美激情精品久久久久久久变态| 一区二区av在线| 久久久国产一区二区三区| 一本大道久久a久久综合婷婷| 亚洲欧美日韩一区二区在线 | aa国产精品| 久久精品午夜| 午夜精品美女久久久久av福利| 久久婷婷国产麻豆91天堂| 亚洲综合导航| 欧美国产一区二区在线观看| 久久久五月天| 国产精品综合| 日韩亚洲国产精品| 在线日韩av| 欧美一区亚洲| 午夜精品福利一区二区三区av| 六月天综合网| 免费观看亚洲视频大全| 国产欧美在线| 亚洲综合三区| 亚洲欧美中文日韩v在线观看| 欧美精品日韩精品| 欧美二区在线播放| 在线观看日韩www视频免费| 亚洲自拍偷拍色片视频| 国产精品99久久久久久久久| 亚洲国产成人av| 一区三区视频| 欧美在线视频免费观看| 欧美亚洲一区三区| 国产精品蜜臀在线观看| 夜色激情一区二区| 亚洲婷婷在线| 国产精品美女主播在线观看纯欲| 日韩午夜免费视频| 亚洲视频播放| 国产精品爱久久久久久久| 一区二区欧美视频| 香港成人在线视频| 国产亚洲精品福利| 久久精品盗摄| 欧美激情中文字幕一区二区| 亚洲啪啪91| 欧美日韩一区二区三区四区在线观看 | 亚洲欧美另类国产| 久久精品国产精品| 在线看国产一区| 欧美不卡在线视频| 亚洲精品美女在线观看| 亚洲午夜女主播在线直播| 国产精品亚洲视频| 性色av一区二区三区| 欧美jizz19性欧美| 一区二区日韩伦理片| 国产精品推荐精品| 久久久亚洲综合| 99riav1国产精品视频| 久久激情综合| 亚洲老板91色精品久久| 国产精品久久一卡二卡| 久久久国产一区二区| 亚洲国产欧美在线人成| 亚洲一区三区电影在线观看| 国产欧美日韩一区二区三区| 久久综合伊人77777| 中文av一区特黄| 免费影视亚洲| 亚洲欧美日本精品| 亚洲国产精品成人综合| 国产精品高潮呻吟视频| 久久免费视频网站| 中文欧美在线视频| 欧美国产日韩视频| 欧美一区二区免费| 亚洲精品视频一区| 国内久久视频| 国产精品萝li| 欧美极品影院| 久久婷婷综合激情| 性欧美暴力猛交另类hd| 亚洲老板91色精品久久| 久热精品视频在线观看| 亚洲欧美www| av成人老司机| 亚洲国产99精品国自产| 国产欧美精品一区| 欧美日韩国产三区| 麻豆精品在线观看| 久久久综合网| 久久国产主播| 欧美一区二区三区免费视| 一区二区91| 亚洲美女在线看| 最新日韩精品| 欧美国产激情二区三区| 老色鬼精品视频在线观看播放| 欧美在线免费| 国内久久视频|