IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity 第三人称 操作 移动端 安卓端 -> 正文阅读

[游戏开发]Unity 第三人称 操作 移动端 安卓端

仿“息壤” 的第三人称 移动控制

左手摇杆?操作移动和旋转? ?右手控制摄像机绕自己旋转? ? ?先上效果?再贴代码

?

JoyBtn.cs? 控制?摇杆?进行移动

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

public class JoyBtn : JoyStickButton
{
    public RectTransform Background;
    public RectTransform Knob;
    [Header("Input Values")]
    public float Horizontal = 0;
    public float Vertical = 0;


    public float offset;
    Vector2 PointPosition;
    // Use this for initialization
    public override void onTouchBegan(Touch pos)
    {
        Debug.Log(pos.position);
    }
    public override void onTouchEnd(Touch pos)
    {
        PointPosition = new Vector2(0f, 0f);
        Knob.transform.position = Background.position;
    }
    public override void onTouchMove(Touch pos)
    {
        PointPosition = new Vector2((pos.position.x - Background.position.x) / ((Background.rect.size.x - Knob.rect.size.x) / 2), (pos.position.y - Background.position.y) / ((Background.rect.size.y - Knob.rect.size.y) / 2));

        PointPosition = (PointPosition.magnitude > 1.0f) ? PointPosition.normalized : PointPosition;

        Knob.transform.position = new Vector2((PointPosition.x * ((Background.rect.size.x - Knob.rect.size.x) / 2) * offset) + Background.position.x, (PointPosition.y * ((Background.rect.size.y - Knob.rect.size.y) / 2) * offset) + Background.position.y);
    }
    public JoyCam joyCam;
    public Transform tag;
    public float angle;
    public float angle1;
    public bool isMove;
    public Vector3 ve3;

    public static float PointToAngle(Vector2 p1, Vector2 p2)
    {
        float angle = Mathf.Atan2(p2.y - p1.y, p2.x - p1.x) * 180 / Mathf.PI;

        if (angle >= 0 && angle <= 180)
        {
            return angle;
        }
        else
        {
            return 360 + angle;
        }
    }

    private void FixedUpdate()
    {
        Horizontal = PointPosition.x;
        Vertical = PointPosition.y;
        isMove = Mathf.Abs(Vertical - 0) > 0.2f || Mathf.Abs(Horizontal - 0) > 0.2f;
        joyCam.isMove = isMove;
        if (isMove)
        {
            Horizontal *= -1;
            Vertical *= -1;
            angle = PointToAngle(new Vector2(Vertical, Horizontal), Vector2.zero) - angle1 + Camera.main.transform.localEulerAngles.y;
            tag.transform.localEulerAngles = new Vector3(0, angle, 0);
            ve3 = Vector3.forward * 5f * Time.deltaTime;
            tag.transform.Translate(ve3);
        }
    }
}

JoyCam.cs? 控制摄像机?

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

public class JoyCam : JoyStickButton
{
    public GameObject camTag;
    public GameObject target;
    public Vector3 offset = new Vector3(0, 1.6f, -3f);
    public bool isSelf = false;
    public bool isMove = false;
    public bool isRotating = false;
    public float distance = 0f;
    public float scrollSpeed = 0.5f;

    public float rotateSpeed = 2;
    public float mousex;
    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (isMove)
        {
           camTag.transform.localPosition = target.transform.localPosition + offset;
        }
        if (isRotating && isMove)
        {
            target.transform.localEulerAngles = new Vector3(target.transform.localEulerAngles.x, target.transform.localEulerAngles.y + mousex, target.transform.localEulerAngles.z);
        }
       camTag.transform.LookAt(new Vector3(target.transform.localPosition.x, target.transform.localPosition.y + 1f, target.transform.localPosition.z));

        Debug.Log("isRotating  " + isRotating + " isMove  " + isMove);
    }

    public override void onTouchBegan(Touch touch)
    {
        isRotating = false;
    }
    public override void onTouchEnd(Touch touch)
    {
        isRotating = false;
    }
    public override void onTouchMove(Touch touch)
    {
        isRotating = true;
        distance = offset.magnitude;
        distance += touch.deltaPosition.y * -scrollSpeed;
        distance = Mathf.Clamp(distance, 1.0f, 7.0f);
        offset = offset.normalized * distance;
       camTag.transform.localPosition = target.transform.localPosition + offset;
        mousex = touch.deltaPosition.x * rotateSpeed;
       camTag.transform.RotateAround(target.transform.localPosition, target.transform.up, mousex);
        offset =camTag.transform.localPosition - target.transform.localPosition;
    }
}

主要以移动端?操作为主

https://download.csdn.net/download/a1228267639/83928895?项目源码下载

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:32:23  更:2022-03-11 22:33:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/2 4:37:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码