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

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)過(guò)程。
這里魚兒動(dòng)畫比較簡(jiǎn)單,只有一份 idle 動(dòng)作即可,魚兒受驚快速移動(dòng),可以加快動(dòng)畫播放速度即可。
根據(jù)需求,可以給魚兒編寫一份有限無(wú)窮狀態(tài)機(jī)。魚兒在某個(gè)時(shí)間點(diǎn)只處于一種狀態(tài),只是在該狀態(tài)下,做自己相應(yīng)的事情罷了。
好了步入正題,開始限無(wú)窮狀態(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í)使用 覺(jué)得寫這里 不是很好,不過(guò)懶得改 就這樣吧
    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è)枚舉,用來(lái)處理狀態(tài)機(jī)
public enum Transition
{    
    SawFood = 0,            // 看見(jiàn)發(fā)現(xiàn)食物    
    ReachFood,                // 追逐抵達(dá)食物
    LostFood,                    // 失去食物(有可能被別的魚吃了、脫離視野、掉入海底)
    BombBubble,                // 氣泡爆炸
    TouchFish,                // 魚兒被觸摸
    Patrolle,                   //  巡邏(普通)
    ComeInto,               //  進(jìn)場(chǎng)
    ComeEnd,                // 進(jìn)場(chǎng)結(jié)束
    NoTime,                    // 沒(méi)有時(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 閱讀(833) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Unity 3D

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



<2018年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(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一区二区| av成人手机在线| 一本色道久久综合精品竹菊| 99精品久久久| 亚洲永久字幕| 欧美中文字幕在线观看| 久久久久久久久久久久久女国产乱| 久久国产精品一区二区三区四区 | 久久精品综合网| 美国十次成人| 亚洲麻豆国产自偷在线| 亚洲一区在线看| 麻豆久久精品| 国产伦精品一区二区| 亚洲第一中文字幕在线观看| 日韩小视频在线观看专区| 欧美亚洲专区| 亚洲激情一区二区| 亚洲一区二区三区涩| 久久综合九色综合网站| 欧美日韩在线另类| 国产精品久久久久婷婷| 午夜久久久久久| 久久亚洲私人国产精品va| 欧美激情中文字幕乱码免费| 99精品热6080yy久久| 午夜国产欧美理论在线播放| 久久蜜桃精品| 国产精品久久婷婷六月丁香| 狠狠噜噜久久| 亚洲一区免费视频| 欧美成人精品一区二区| 亚洲午夜电影| 欧美成人精品影院| 国产乱码精品一区二区三区不卡 | 久久精品导航| 国产精品免费看片| 99在线精品视频在线观看| 久久精品人人做人人爽电影蜜月| 亚洲日本一区二区| 久久久99免费视频| 国产婷婷成人久久av免费高清| 日韩一区二区精品葵司在线| 久久亚洲电影| 亚洲欧美日韩在线| 欧美亚洲成人免费| 欧美伦理一区二区| 在线不卡中文字幕| 久久免费国产精品1| 亚洲天堂成人在线视频| 欧美日韩精品一区视频| 亚洲美女在线国产| 91久久精品日日躁夜夜躁国产| 久久久精品动漫| 国语自产精品视频在线看8查询8 | 在线播放日韩欧美| 美国十次成人| 亚洲综合三区| 久久久久国产精品一区二区| 国产精品v片在线观看不卡| 亚洲三级免费观看| 欧美电影专区| 久久综合影视| 亚洲高清影视| 欧美国产日本在线| 欧美14一18处毛片| 亚洲毛片一区| 亚洲精品免费在线播放| 欧美激情一区二区久久久| 亚洲人成啪啪网站| 亚洲激情影视| 欧美色偷偷大香| 亚洲欧美日韩天堂| 午夜精品成人在线视频| 国产一区二区三区四区| 欧美激情一区二区久久久| 久久夜色精品国产| 亚洲精选在线观看| 99视频精品在线| 国产精品久久一卡二卡| 久久国产精品72免费观看| 久久成人免费电影| 91久久中文字幕| 一个色综合导航| 国内精品视频在线观看| 亚洲电影免费观看高清| 欧美日韩激情网| 欧美影院一区| 麻豆成人在线| 亚洲影院免费观看| 欧美中文字幕在线播放| 亚洲精品国产精品国自产在线| 日韩视频亚洲视频| 国产在线成人| 亚洲精品久久久久久久久| 国产欧美日本一区二区三区| 欧美高清在线播放| 国产欧美一区二区三区在线看蜜臀 | 午夜久久美女| 亚洲精品视频在线| 久久精品视频99| 欧美精品在线免费| 久久久久国产精品午夜一区| 欧美二区不卡| 久久一二三四| 91久久精品国产91性色tv| 日韩一区二区精品视频| 国产日韩1区| 亚洲经典三级| 一区国产精品| 亚洲午夜久久久久久久久电影网| 在线观看中文字幕不卡| 一区二区三区欧美| 亚洲毛片在线观看| 久久久精品一品道一区| 午夜精品在线看| 欧美日韩亚洲另类| 欧美韩国在线| 黄色日韩在线| 午夜精品久久久久99热蜜桃导演| 一区二区欧美亚洲| 欧美国产亚洲视频| 欧美不卡高清| 亚洲大片在线观看| 久久久久久久久久久久久女国产乱| 午夜精品久久久99热福利| 欧美精品一卡| 亚洲精品美女在线观看| 亚洲美女性视频| 欧美刺激午夜性久久久久久久| 久久―日本道色综合久久| 国产女人精品视频| 亚洲一区二区精品视频| 亚洲免费人成在线视频观看| 欧美日本一区二区高清播放视频| 亚洲国产成人tv| 亚洲精选大片| 欧美日韩国产首页在线观看| 亚洲韩国精品一区| 99视频精品| 欧美日韩在线观看视频| 一区二区三区国产在线| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩一区二区免费视频| 亚洲精品国精品久久99热| 9人人澡人人爽人人精品| 欧美日韩在线免费观看| 亚洲在线视频免费观看| 久久成人羞羞网站| 黄色欧美日韩| 欧美激情日韩| 亚洲一区二区三区三| 久久免费视频这里只有精品| 亚洲大胆女人| 亚洲福利视频网| 久久九九免费视频| 国产欧美二区| 欧美一区二区三区免费在线看| 亚洲一区亚洲二区| 国产欧美另类| 久久综合色婷婷| 亚洲人成亚洲人成在线观看| 一区二区三区av| 国产精品私拍pans大尺度在线 | 欧美激情第三页| 99视频国产精品免费观看| 国产精品不卡在线| 欧美伊人久久大香线蕉综合69| 美日韩精品免费观看视频| 亚洲美女性视频| 国产日韩精品久久| 狠狠综合久久av一区二区小说| 久久国产99| 亚洲精品一二区| 久久久亚洲影院你懂的| 99国产精品视频免费观看| 国产精品素人视频| 免费一区视频| 欧美一区二区三区视频免费播放| 欧美国产第二页| 欧美一级专区免费大片| 亚洲欧洲在线视频| 国产婷婷精品| 国产精品成人免费| 欧美成人国产| 久久久精品午夜少妇| 亚洲一区激情| 日韩午夜av电影| 亚洲成色999久久网站| 久久精品综合一区| 午夜精品影院| 亚洲在线成人精品| 日韩视频第一页| 亚洲国产日韩欧美在线动漫| 国产农村妇女毛片精品久久麻豆 | 午夜老司机精品| aa国产精品| 日韩视频在线一区二区三区|