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