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

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

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; } }


    // 以下幾個參數(shù),是魚兒相應的參數(shù)設置,在繼承各個狀態(tài)機時使用 覺得寫這里 不是很好,不過懶得改 就這樣吧
    protected Vector3 destPos;                          // 目標位置
    protected float curRotSpeed;                        //  驚嚇后速度參數(shù)
    protected float curSpeed;                              //  自身游動速度參數(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;
    }
*/
}

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


public enum FSMStateID
{    
    Patrolling = 0,                // 巡邏 狀態(tài)
    Showtiming,                 //  表演 狀態(tài)
    Chasing,                    // 追趕 狀態(tài)
    Frightening,                // 受驚 狀態(tài)
    Eatting,                    // 吃食 狀態(tài)
    Coming,                     //  進場 狀態(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;
            }
        }
    }
}

魚兒實體掛載上 AIController.cs
using UnityEngine;
using System.Collections;

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

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

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


        // 時間 到了  消失
        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)魚食 進入追食
        patrol.AddTransition (Transition.BombBubble, FSMStateID.Frightening);        // 氣泡爆炸 進入受驚
        patrol.AddTransition (Transition.TouchFish, FSMStateID.Frightening);        // 觸碰魚  進入受驚
        patrol.AddTransition (Transition.NoTime, FSMStateID.Disappearing);            // 到時間  消失

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

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

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

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

        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)在實現(xiàn) PatrolState、ChaseState、FrightenState、DisappearState、ComeState 在相應的狀態(tài)下做相應的事情就ok了。

PatrolState.cs
using UnityEngine;
using System.Collections;

public class PatrolState : FSMState
{    
    float intervalTime = 4.0f;    // 間隔時間
    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);//魚隨機方向
        
//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);//魚隨機方向
                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;    // 間隔時間
    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);//魚隨機方向
        
//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;    // 間隔時間
    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();
        //設置路徑的點
        pathHashtable.Add("path",path);
        //設置類型為線性,線性效果會好一些。
        pathHashtable.Add("easeType", iTween.EaseType.linear);
        //設置尋路的速度
        pathHashtable.Add("time",intervalTime);
        //是否先從原始位置走到路徑中第一個點的位置
        pathHashtable.Add("movetopath",true);
        //是否讓模型始終面朝當面目標的方向,拐彎的地方會自動旋轉(zhuǎn)模型
        
//如果你發(fā)現(xiàn)你的模型在尋路的時候始終都是一個方向那么一定要打開這個
        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;
    }

}

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

<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用鏈接

留言簿(1)

隨筆分類(13)

隨筆檔案(12)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久在线| 亚洲永久免费精品| 亚洲免费一区二区| 亚洲嫩草精品久久| 午夜在线精品偷拍| 久久久久免费| 欧美激情第9页| 亚洲免费激情| 亚洲在线视频免费观看| 欧美一区二区播放| 久久综合狠狠| 欧美午夜精品理论片a级按摩| 欧美日韩国产精品一区| 欧美网站大全在线观看| 国产亚洲激情在线| 日韩视频中文字幕| 久久大逼视频| 亚洲国产片色| 亚洲午夜电影网| 久久久久久久久蜜桃| 欧美日韩高清不卡| 激情久久五月天| 亚洲女人小视频在线观看| 久热精品视频| 亚洲午夜在线| 欧美精品久久99| 黄色成人在线| 亚洲欧美亚洲| 亚洲精品国精品久久99热| 午夜精品久久久久久久99热浪潮 | 一区二区三区在线免费播放| 日韩亚洲国产精品| 亚洲裸体视频| 亚洲在线免费视频| 久久精品人人做人人爽| 国产日韩欧美三级| 亚洲理论在线观看| 欧美在线播放| 亚洲区中文字幕| 久久深夜福利| 国产日韩欧美在线看| 亚洲视频播放| 亚洲精品视频免费| 欧美国产大片| 亚洲精品久久久久久久久久久久 | 亚洲大胆av| 欧美专区日韩视频| 国产精品亚洲综合色区韩国| 亚洲一区二区三区四区在线观看| 欧美福利一区二区| 久久综合久久88| 亚洲第一区在线| 久热精品在线| 久久一区二区三区四区五区| 国产亚洲精品高潮| 久久精品99久久香蕉国产色戒 | 亚洲成色www久久网站| 久久精品综合一区| 国产一二三精品| 久久久久久久久久久一区| 午夜精品婷婷| 国产一区视频观看| 免费欧美电影| 免费日韩av| 日韩亚洲欧美中文三级| 99成人在线| 国产精品爽爽ⅴa在线观看| 欧美专区日韩视频| 久久精品在这里| 亚洲国产成人在线| 亚洲国产另类久久精品| 欧美日韩精品二区第二页| 亚洲一区二区在线| 欧美自拍偷拍午夜视频| 亚洲第一精品久久忘忧草社区| 欧美国内亚洲| 国产精品国产三级国产aⅴ浪潮| 香蕉久久夜色精品国产使用方法 | 久久久噜噜噜久噜久久 | 亚洲另类一区二区| 亚洲免费观看高清在线观看| 国产精品毛片| 美女诱惑黄网站一区| 欧美1区免费| 亚洲欧美成人综合| 久久久久九九九| 中日韩视频在线观看| 欧美一区二区在线视频| 亚洲国产精品久久久久婷婷老年| 亚洲国产欧美在线人成| 亚洲国产91精品在线观看| 欧美激情一区在线观看| 欧美午夜女人视频在线| 久久天堂国产精品| 欧美日韩精品是欧美日韩精品| 久久精品国产一区二区三| 欧美成人精品在线播放| 欧美一区二区三区日韩视频| 男人插女人欧美| 午夜精品久久久久久久| 美女诱惑黄网站一区| 亚洲永久在线| 欧美福利精品| 麻豆精品在线视频| 国产精品一区二区在线观看不卡| 欧美激情免费观看| 国产原创一区二区| 这里是久久伊人| 亚洲免费成人av电影| 久久精品一区二区国产| 午夜精品久久久久久久99水蜜桃| 麻豆成人综合网| 久久久亚洲国产美女国产盗摄| 国产精品videosex极品| 亚洲大胆美女视频| 精品成人a区在线观看| 亚洲综合精品自拍| 亚洲少妇中出一区| 欧美极品欧美精品欧美视频| 美乳少妇欧美精品| 激情欧美国产欧美| 欧美一区二区三区四区在线| 先锋影音久久久| 欧美午夜视频在线| aaa亚洲精品一二三区| 日韩亚洲精品在线| 欧美韩国日本综合| 亚洲国产一区在线观看| 亚洲第一黄色| 美日韩精品免费观看视频| 老妇喷水一区二区三区| 黄色精品免费| 久久亚洲影音av资源网| 免费成人黄色av| 一区一区视频| 欧美r片在线| 亚洲青色在线| 亚洲视频免费在线| 欧美午夜不卡在线观看免费| 99视频热这里只有精品免费| 中文有码久久| 欧美色另类天堂2015| 一区二区三区欧美成人| 午夜在线观看免费一区| 国产日韩欧美一区二区三区四区| 欧美在线视频免费播放| 麻豆精品一区二区av白丝在线| 激情国产一区| 欧美电影免费观看大全| av不卡在线观看| 亚洲欧美电影在线观看| 国产午夜精品久久久久久免费视| 欧美一级日韩一级| 亚洲第一主播视频| 亚洲图片激情小说| 国产日本欧美一区二区三区在线| 久久国产一区二区| 国产三级欧美三级| 久久超碰97中文字幕| 精品福利电影| 欧美sm视频| 中文日韩欧美| 久久久噜噜噜久久人人看| 亚洲国产成人久久综合| 欧美日韩亚洲视频| 欧美一区二区三区在线播放| 欧美成人一品| 亚洲视频图片小说| 国内精品久久久久影院色| 欧美高清在线| 午夜精品影院| 91久久夜色精品国产网站| 午夜一级在线看亚洲| 亚洲国产精品久久久久久女王| 欧美偷拍一区二区| 久久免费99精品久久久久久| 99视频精品免费观看| 美女精品自拍一二三四| 亚洲自拍电影| 亚洲欧洲免费视频| 国产一区视频在线观看免费| 欧美日韩在线播放| 久久综合久久综合九色| 亚洲女与黑人做爰| 亚洲精品久久久久中文字幕欢迎你| 久久av一区二区三区漫画| 一区二区日韩| 亚洲精品系列| 在线观看国产日韩| 国产婷婷色一区二区三区| 欧美色网一区二区| 欧美大片免费观看| 久久手机免费观看| 久久高清国产| 午夜精品久久久久| 亚洲网友自拍| 99精品国产在热久久婷婷| 欧美岛国激情| 蜜臀av国产精品久久久久| 欧美在线观看视频在线|