黑暗之光

1.实现标签管理的代码

2.实现点击地面出现点击特效的代码



3.实现人物鼠标点击的朝向


4.控制任务的的动画播放


5.相机的跟随和视野效果代码

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

public class FollowPlayer : MonoBehaviour {


    private Transform player;
    private Vector3 offsetPosition;

    public float distance = 0;
    public float scrollSpeed = 10.0f;
    private bool isRotate = false;
    public float rotateSpeed = 10.0f;
	void Start () {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        offsetPosition = transform.position - player.position;
        transform.LookAt(player.position);   //朝向主角
	}
	
	// Update is called once per frame
	void Update () {
        transform.position = offsetPosition + player.position;
        ScrollView();
        RotateView();
	}
    void ScrollView()   //处理视野的拉近和拉远效果
    {
     //  print(Input.GetAxis("Mouse ScrollWheel"));//向后 返回负值(拉近视野)向前滑动 返回正值 (拉远视野)
        distance = offsetPosition.magnitude;  //magnitude 计算偏移的距离
        distance += Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
        distance = Mathf.Clamp(distance, 2, 18);  //Clamp限制某个变量的范围
        offsetPosition = offsetPosition.normalized * distance;    //normalized 当前向量
      
          
     
    }
      void RotateView()
    {
        //Input.GetAxis("Mouse X");  //得到鼠标在水平方向的滑动
        //Input.GetAxis("Mouse Y"); //得到鼠标在垂直方向的滑动
        if (Input.GetMouseButtonDown(1))
        {
            isRotate = true;
        }
        if (Input.GetMouseButtonUp(1))  
        {
            isRotate = false;

        }
        if (isRotate)
        {
            transform.RotateAround(player.position, player.up,rotateSpeed * Input.GetAxis("Mouse X"));
            Vector3 originalPos = transform.position;
            Quaternion originalRotation = transform.rotation;
          
            transform.RotateAround(player.position, transform.right,- rotateSpeed * Input.GetAxis("Mouse Y"));  //影响的属性有两个,一个position,一个rotation
            float x = transform.eulerAngles.x;
            if (x < 10 || x > 80)   //范围限制
            {
                transform.position = originalPos;
                transform.rotation = originalRotation;
            }
        }
        offsetPosition = transform.position - player.position;  
    }
}

6.NPC的制作

任务系统

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

public class BarNPC : NPC {

    public TweenPosition questTween;
    public bool isInTask = false;  //表示是否在任务中
    public int killCount = 0;  //表示任务进度,已经杀死几只野狼
    public UILabel desLabel;   //任务描述
    //引用三个按钮
    public GameObject acceptBtnGo;
    public GameObject okBtnGo;
    public GameObject cancelBtnGo;

    public GameObject quest; 


    private PlayerStatus status;  //人物状态脚本对象的定义
     void Start()
    {
       status = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerStatus>();   //获得一个脚本,去使用另一个脚本的方法
    }


    void OnMouseOver()  //当鼠标位于这个collider之上,会在每一帧调用这个方法
    {

        if (Input.GetMouseButtonDown(0))   //当点击了老爷爷,会调用显示面板的方法
        {
          if (isInTask)
            {
                ShowTaskProgress();
            }
            else
            {
                ShowTaskDes();
           }
            ShowQuest();
        }
    }
    void ShowQuest()    //显示面板
    {
        questTween.gameObject.SetActive(true);
        questTween.PlayForward();  //向前播放
    }

    void HideQuest()  //隐藏面板
    {
        questTween.PlayReverse();  //向后播放
        questTween.gameObject.SetActive(false);
      //  quest.SetActive(false);

    }
    

    public void ShowTaskDes()   //显示任务描述的方法   ok按钮
    {
        desLabel.text = "任务:\n 杀死了10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(false);
        acceptBtnGo.SetActive(true);
        cancelBtnGo.SetActive(true);
    }

    public void  ShowTaskProgress()   //显示任务进程的方法  接受按钮
    {
        desLabel.text = "任务:\n 你已经杀死了" + killCount + "\\n 10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(true);
        acceptBtnGo.SetActive(false);
        cancelBtnGo.SetActive(false);
    }
    public void OnCloseButton()   //  关闭按钮
    {
        HideQuest();
    }
    //任务系统  任务对话框上的按钮点击时间的处理
    public void OnAcceptButtonClick()
    {
        ShowTaskProgress();
        isInTask = true;//表示在任务中
    }


    public void OnOkButton()   //Ok按钮
    {
        if (killCount >= 10)
        {  //完成任务
            status.GetCoint(1000);  //调用PlayerStatus脚本里获得GetCoint的方法
            killCount = 0;
            ShowTaskDes();


        }
        else
        {//没有完成任务
            HideQuest();
        }
        
    }
    public void OnCancelButton()  //取消按钮
    {
        HideQuest();
    }
    

}

7.点击不同物体显示不同的图标

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

public class CursorManager : MonoBehaviour {
    //设置单例模式,其他脚本可以调用这个脚本的方法
    public static CursorManager _instance;


    public Texture2D cursor_normal;
    public Texture2D cursor_npc_talk;
    public Texture2D cursor_attack;
    public Texture2D cursor_lockTagret;
    public Texture2D cursor_pick;

    private Vector2 hotspot = Vector2.zero;     //保持原来的位置
    private CursorMode mode = CursorMode.Auto;   //自动选择模式
	void Start () {
        _instance = this;   //等于当前脚本
		
	}
    
    public void SetNormal() {    //设置正常的图标
        Cursor.SetCursor(cursor_normal, hotspot, mode);

    }
    public void SetNpcTalk()    //设置对话的图标
    {
        Cursor.SetCursor(cursor_npc_talk,hotspot,mode);
    }
}


猜你喜欢

转载自blog.csdn.net/qq_39134679/article/details/79943679