2015-06-05 11:20:14 liujan511536 阅读数 3882
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

这里的镜头主要是从人物的背后跟随的。

首先新建一个C#脚本,命名为MyFollow,然后把以下代码粘贴进去,保存:

using UnityEngine;
using System.Collections;

public class MyFollow : MonoBehaviour
{
	public float distanceAway = 5;			// distance from the back of the craft
	public float distanceUp = 2;			// distance above the craft
	public float smooth = 3;				// how smooth the camera movement is
	
	private GameObject hovercraft;		// to store the hovercraft
	private Vector3 targetPosition;		// the position the camera is trying to be in
	
	Transform follow;
	
	void Start(){
		follow = GameObject.FindWithTag ("Player").transform;	
	}
	
	void LateUpdate ()
	{
		// setting the target position to be the correct offset from the hovercraft
		targetPosition = follow.position + Vector3.up * distanceUp - follow.forward * distanceAway;
		
		// making a smooth transition between it's current position and the position it wants to be in
		transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smooth);
		
		// make sure the camera is looking the right way!
		transform.LookAt(follow);
	}
}

接着把上面的这个脚本挂载到摄像机上。

最后把你想跟随的人物的tag设为Player。

运行游戏后,摄像机就可以从人物背后跟随人物了。

2015-03-13 22:49:29 u011410529 阅读数 6317
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

using UnityEngine;
using System.Collections;

public class PlayerControl : MonoBehaviour
{
    [HideInInspector]        //隐藏属性,让其不在面板上显示
    public bool facingRight = true;     //定义朝向
    [HideInInspector]
    public bool jump = false;   // 跳跃属性
    public float moveForce = 200f;  // 所加的力
    public float maxSpeed = 5f;     // x轴上的最大速度

    public float jumpForce = 300f;          // Amount of force added when the player jumps.

    public Transform groundCheck;        //本组件检测是否在地面上!!!
    public LayerMask whatIsGround;
    private float groundRadius=0.2f;
    private bool grounded = false;      
    private Animator anim;      // 指向角色动画组件


    void Awake()
    {
        anim = GetComponent<Animator>();
    }


    void Update()
    {
        //本方法返回真假  
        grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
        if(Input.GetKeyDown (KeyCode.Space)&&grounded )
            jump = true;  //按下空格键且角色在地上
    }


    void FixedUpdate ()
    {
        // 获取你的用力方向和大小
        float h = Input.GetAxis("Horizontal");

        // 速度这个动画参数取决于你按键的用力大小
        anim.SetFloat("speed", Mathf.Abs(h));
        if(h * rigidbody2D.velocity.x < maxSpeed)
        {
            rigidbody2D.velocity=new Vector2(h*maxSpeed,rigidbody2D.velocity.y);
        }


        if(Mathf.Abs(rigidbody2D.velocity.x) > maxSpeed)
            //如果角色的速度大于最大速度
            rigidbody2D.velocity = new Vector2(Mathf.Sign(rigidbody2D.velocity.x) * maxSpeed, rigidbody2D.velocity.y);

        // 向右按的时候角色朝向是左方
        if(h > 0 && !facingRight)

            Flip();
        //转向函数
        else if(h < 0 && facingRight)

            Flip();


        if(jump)
        {
            anim.SetTrigger("jump");
            jump = false;
        }
    }


    void Flip ()
    {

        facingRight = !facingRight;

        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }

这个脚本可以直接使用,是博主根据官方API编写,有删改。

2014-04-19 19:05:28 cooelf 阅读数 10881
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

       在网上有很多通过射线方式实现的人物行走控制脚本,但是如果只是想通过键盘按键来控制的话,比如进行第三人称视角控制,其实只需要进行简单的角度变换即可。思路如下:

1、按照顺时针方向设定前、右、后、左分别为0,1,2,3。

2、设定状态初值0,即朝向前方。

3、通过当前方向值减去前一次方向值,乘以90°即为转向角,然后进行旋转变换即可。

using UnityEngine;
using System.Collections;
using System.Linq;
public class move: MonoBehaviour
{
	private int State;//角色状态
	private int oldState=0;//前一次角色的状态
	private int UP = 0;//角色状态向前
	private int RIGHT =1;//角色状态向右
	private int DOWN = 2;//角色状态向后
	private int LEFT = 3;//角色状态向左
	
	public float speed=8;
	
	void Start()
	{
	}
	void Update()
	{
		if (Input.GetKey("w"))
		{
			setState(UP);
		}
		else if (Input.GetKey("s"))
		{
			setState(DOWN);
		}
		
		if (Input.GetKey("a"))
		{
			setState(LEFT);
		}
		else if (Input.GetKey("d"))
		{
			setState(RIGHT);
		}
		
	}
	
	
	void setState(int currState)
	{
		Vector3 transformValue = new Vector3();//定义平移向量
		int rotateValue = (currState - State) * 90;
		transform.animation.Play("walk");//播放角色行走动画
		switch (currState)
		{
		case 0://角色状态向前时,角色不断向前缓慢移动
			transformValue = Vector3.forward * Time.deltaTime * speed;
			break;
		case 1://角色状态向右时,角色不断向右缓慢移动
			transformValue = Vector3.right * Time.deltaTime * speed;
			break;
		case 2://角色状态向后时,角色不断向后缓慢移动
			transformValue = Vector3.back * Time.deltaTime * speed;
			break;
		case 3://角色状态向左时,角色不断向左缓慢移动
			transformValue = Vector3.left * Time.deltaTime * speed;
			break;
		}
		transform.Rotate(Vector3.up, rotateValue);//旋转角色
		transform.Translate(transformValue, Space.World);//平移角色
		oldState = State;//赋值,方便下一次计算
		State = currState;//赋值,方便下一次计算
	}
	
	
}





2017-12-03 18:21:04 A13155283231 阅读数 2340
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

  1. 加刚体(RigidBody) 设置 y方向锁定位置
  2. 拖拽脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RemController : MonoBehaviour {

    Vector3 movement;
    Rigidbody playerRigidbody;

    private float speed = 6f;
    private int rotSspeed = 100;


    void Awake()
    {
        playerRigidbody = GetComponent<Rigidbody>();
    }

    // 不受fps影响 因为是按一定时间间隔更新
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        movement.Set(h, 0f, v);
        movement = movement.normalized * speed * Time.deltaTime;
        // 移动到指定位置
        playerRigidbody.MovePosition(transform.position + movement);
    }
}

只需要控制方向的移动:

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

public class RemController : MonoBehaviour {

    Vector3 movement;
    Rigidbody playerRigidbody;

    private float speed = 6f;
    public int rotSspeed = 100;


    void Awake()
    {
        playerRigidbody = GetComponent<Rigidbody>();
    }

    // 不受fps影响 因为是按一定时间间隔更新
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        //movement.Set(h, 0f, v);
        //movement = movement.normalized * speed * Time.deltaTime;
        //// 移动到指定位置
        //playerRigidbody.MovePosition(transform.position + movement);
        transform.position += transform.forward * speed * Time.deltaTime;

        if (Input.GetKey(KeyCode.A))
        {
            transform.Rotate(Vector3.up * Time.deltaTime * -rotSspeed);
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Rotate(Vector3.up * Time.deltaTime * +rotSspeed);
        }
    }
}
没有更多推荐了,返回首页